如何通过此正则表达式避免regcomp错误13?

时间:2018-10-10 08:08:12

标签: c regex

我想从这里使用正则表达式,但要有所不同:

https://tools.ietf.org/html/rfc3986#appendix-B

我正在这样尝试:

ret = regcomp(preg,"^(?!01418710[0-9]{2}).*", REG_EXTENDED);
if (ret) {
    char errmsg[256];
    regerror(ret, preg, errmsg, sizeof(errmsg));
    printf("Error msg :%s (ret = %d) for regex:%s\n",errmsg,ret, prefix);
   return -1;
}

这是我的正则表达式:^(?!01418710[0-9]{2}).*

但是我对regcomp的返回值感到困惑:

REG_BADRPT

根据人的意思是:

  

无效使用重复运算符,例如使用'*'作为第一个字符。

我目前可以避免使用^(\?!01418710[0-9]{2}).*出现此错误,但是正则表达式不同。

这个人的意思与此类似:

  

?,*或+之前没有有效的正则表达式

我应该如何避免此错误?我的正则表达式正确吗?

1 个答案:

答案 0 :(得分:2)

<regex.h> POSIX正则表达式不支持环视。

您可以将前瞻中的简单模式作为消费模式进行匹配,如果retREG_NOMATCH,则认为匹配有效:

regex_t preg;
int ret;
ret = regcomp(&preg,"01418710[0-9]{2}", REG_EXTENDED);
... 
ret = regexec(&preg, "your_string", 0, NULL, 0);
if (ret == REG_NOMATCH) {
    printf("Matched!!!");
}