如何解决regexec不排除字符
我正在尝试匹配其中没有字母'd'的单词,但是regexec仍然匹配带有字母d的单词
int main(void) {
regex_t regex;
char *str = "dabcd";
char *pattern = "[^d]*";
int ret;
ret = regcomp(®ex,pattern,0);
if (ret == 0) {
printf("regex compilation successfully\n");
} else {
printf("regex compilation unsuccessful\n");
}
ret = regexec(®ex,str,NULL,0);
if (ret == 0) {
printf("there is a match\n");
} else {
printf("there is no match : %d\n",ret);
}
return 0;
}
如何解决呢?我的正则表达式有问题吗?
解决方法
您的表达式仅检查在字符串中的某个点上是否存在一系列零个或多个非d
字符。如果您希望整个过程都匹配:
^[^d]*$
在字符串开头转换为的位置,零个或多个非d
字符后跟字符串的结尾。
这将需要更改您的编译代码:
ret = regcomp(®ex,pattern,REG_EXTENDED);
标记为in the documentation的地方:
解释正则表达式时,请使用POSIX扩展正则表达式语法。如果未设置,则使用POSIX基本正则表达式语法。
编译现代(“扩展”)RE,而不是默认的过时(“基本”)RE。
因此默认情况下使用该模式。
提示:要调试正则表达式,请使用诸如Regex101之类的解释器工具。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。