如何解决C中的正则表达式
| 我正在尝试使用regex.h匹配字符串\“ 123,1234 \”。以下模式可以完成工作:\"^[0-9]\\{1,\\},[0-9]\\{1,\\}$\"
如果我将其作为命令行参数使用,则可以正常运行。但是,当我在C代码中使用它时,它不起作用。可能是因为将反斜杠标识为转义字符。
样例代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <regex.h>
int main (int argc,char * argv[]){
regex_t regex;
int reti;
char msgbuf[100];
char * string,* pattern;
string = \"123,1234\";
pattern = \"^[0-9]\\{1,\\}$\";
if(regcomp(®ex,pattern,0))
{
fprintf(stderr,\"Could not compile regex\\n\");
exit(107);
}
if(!(reti = regexec(®ex,string,NULL,0)))
{
printf(\"MATCH\\n\");
}
else if(reti == REG_NOMATCH)
{
printf(\"NO MATCH\\n\");
}
else
{
regerror(reti,®ex,msgbuf,sizeof(msgbuf));
fprintf(stderr,\"Regex match failed: %s\\n\",msgbuf);
exit(107);
}
regfree(®ex);
return 0;
}
我该如何解决?
解决方法
您的正则表达式是ERE而不是BRE,因此您需要将
REG_EXTENDED
标志传递给regcomp
。然后,正如其他人所说,也删除反斜杠。
, ^[0-9]{1,},[0-9]{1,}$
取出反斜杠“ 5”。他们逃脱了紧随其后的角色。
, 为了覆盖斜线作为转义序列,在C语言中,使用斜线对斜线进行转义,因此\\
变为\\\\
。
但是,由于没有将字符串传递给命令行,因此花括号ces8ѭ和}
不会被shell的解析器捕获,因此您可以在没有所有斜杠的情况下尝试使用它。
\"^[0-9]{1,}$\"
, 如果将斜杠视为转义字符,您是否尝试过将斜杠加倍以使它们被视为转义斜杠?
即
\"^[0-9]\\\\{1,\\\\},[0-9]\\\\{1,\\\\}$\"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。