正则表达式在c中执行时不起作用

时间:2018-09-04 13:57:49

标签: c regex posix

我正在尝试使用regex.h lib构建正则表达式。

我用输入检查了https://regex101.com/中的表达式 “ 00001206 ffffff00 00200800 00001044”,我也在python中检查了它,两者都给了我预期的结果。 当我在C中(通过Unix)运行下面的代码时,我得到了“ no match”打印。 任何人有什么建议吗?

regex_t regex;
int reti;
reti = regcomp(&regex, "([0-9a-fA-F]{8}( |$))+$", 0);
if (reti) 
{
    fprintf(stderr, "Could not compile regex\n");
    exit(1);
}

reti = regexec(&regex, "00001206 ffffff00 00200800 00001044", 0, NULL, 0);
if (!reti) 
{
     printf("Match");
 }
  else if (reti == REG_NOMATCH) {
  printf("No match bla bla\n");
   }  

1 个答案:

答案 0 :(得分:3)

您的模式包含一个formControlName锚,使用$和间隔量词(...)捕获组,因此您需要将{m,n}传递给regex编译方法:

REG_EXTENDED

请参见online C demo打印regex_t regex; int reti; reti = regcomp(&regex, "([0-9a-fA-F]{8}( |$))+$", REG_EXTENDED); // <-- See here if (reti) { fprintf(stderr, "Could not compile regex\n"); exit(1); } reti = regexec(&regex, "00001206 ffffff00 00200800 00001044", 0, NULL, 0); if (!reti) { printf("Match"); } else if (reti == REG_NOMATCH) { printf("No match bla bla\n"); }

但是,我相信您需要匹配整个字符串,并在末尾禁止空格

Match

将会更加精确,因为它不允许在前面出现任何任意文本,也不允许在结尾添加空格。