我想从这里使用正则表达式,但要有所不同:
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}).*
出现此错误,但是正则表达式不同。
这个人的意思与此类似:
?,*或+之前没有有效的正则表达式
我应该如何避免此错误?我的正则表达式正确吗?
答案 0 :(得分:2)
<regex.h>
POSIX正则表达式不支持环视。
您可以将前瞻中的简单模式作为消费模式进行匹配,如果ret
为REG_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!!!");
}