gpt4 book ai didi

花括号在 C 语言的正则表达式中不起作用

转载 作者:太空狗 更新时间:2023-10-29 15:26:16 28 4
gpt4 key购买 nike

花括号{}在 C 语言正则表达式中不起作用,如果我给出正确的输入“ab”或“ac”,它总是给出不匹配的输出。在这种情况下,我会请求提供帮助。

 #include <sys/types.h>
#include <regex.h>
#include <stdio.h>


int main(int argc, char *argv[]){ regex_t regex;
int reti;
char msgbuf[100];

/* Compile regular expression */
reti = regcomp(&regex, "[a-c]{2}", 0);
if( reti ){ fprintf(stderr, "Could not compile regex\n"); return(1); }

/* Execute regular expression */
reti = regexec(&regex, "ab", 0, NULL, 0);
if( !reti ){
puts("Match");
}
else if( reti == REG_NOMATCH ){
puts("No match");
}
else{
regerror(reti, &regex, msgbuf, sizeof(msgbuf));
fprintf(stderr, "Regex match failed: %s\n", msgbuf);
return 1;
}

/* Free compiled regular expression if you want to use the regex_t again */
regfree(&regex);

return 0;
}

最佳答案

您正在使用不了解正则表达式中的量词 {n} 的基本正则表达式方言。

一种解决方案是在创建 regex_t 对象时提供选项 REG_EXTENDED 作为最后一个参数而不是 0。

reti = regcomp(&regex, "[a-c]{2}", REG_EXTENDED);

参见 http://ideone.com/oIBXxu获取经过我修改后的代码演示。


正如 Casimir et Hippolyte 在评论中指出的那样,基本正则表达式也支持 {} 量词,但是大括号必须在正则表达式中使用 \ 进行转义,这又是必须在 C 字符串中转义为 \\。所以你可以使用这条线

reti = regcomp(&regex, "[a-c]\\{2\\}", 0);

以及上述解决方案的替代方案(在 http://ideone.com/x7vlIO 下修改此行运行 Demo)。

可以查看http://www.regular-expressions.info/posix.html有关基本正则表达式和扩展正则表达式之间区别的更多信息。

关于花括号在 C 语言的正则表达式中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30212167/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com