首页 > 解决方案 > 如何使用此正则表达式避免 regcomp 错误 13?

问题描述

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

https://www.rfc-editor.org/rfc/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}).*但正则表达式不同。

这个人的类似含义:

?、* 或 + 前面没有有效的正则表达式

我应该如何避免这个错误?我的正则表达式是否正确?

标签: cregex

解决方案


<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!!!");
}

推荐阅读