我正在尝试使用regex.h lib构建正则表达式。
我用输入检查了https://regex101.com/中的表达式 “ 00001206 ffffff00 00200800 00001044”,我也在python中检查了它,两者都给了我预期的结果。 当我在C中(通过Unix)运行下面的代码时,我得到了“ no match”打印。 任何人有什么建议吗?
regex_t regex;
int reti;
reti = regcomp(®ex, "([0-9a-fA-F]{8}( |$))+$", 0);
if (reti)
{
fprintf(stderr, "Could not compile regex\n");
exit(1);
}
reti = regexec(®ex, "00001206 ffffff00 00200800 00001044", 0, NULL, 0);
if (!reti)
{
printf("Match");
}
else if (reti == REG_NOMATCH) {
printf("No match bla bla\n");
}
答案 0 :(得分:3)
您的模式包含一个formControlName
锚,使用$
和间隔量词(...)
捕获组,因此您需要将{m,n}
传递给regex编译方法:>
REG_EXTENDED
请参见online C demo打印regex_t regex;
int reti;
reti = regcomp(®ex, "([0-9a-fA-F]{8}( |$))+$", REG_EXTENDED); // <-- See here
if (reti)
{
fprintf(stderr, "Could not compile regex\n");
exit(1);
}
reti = regexec(®ex, "00001206 ffffff00 00200800 00001044", 0, NULL, 0);
if (!reti)
{
printf("Match");
}
else if (reti == REG_NOMATCH) {
printf("No match bla bla\n");
}
。
但是,我相信您需要匹配整个字符串,并在末尾禁止空格
Match
将会更加精确,因为它不允许在前面出现任何任意文本,也不允许在结尾添加空格。