正则表达式在C语言中失败,在线测试通过

时间:2019-07-05 14:16:24

标签: c regex

当我在C语言中使用时,应该正常工作的正则表达式会失败。

当我将此正则表达式粘贴到此处-https://regex101.com并对其进行测试时,正如预期的那样。

//clang 3.8.0

#include  <stdio.h>
#include  <regex.h>

int main(void)
{
   char    *regPatt = regPatt = "^HR(\\d{2})$";
   regex_t  regex;
   short    retval = regcomp (&regex, regPatt, 0);
   short    status = regexec (&regex, "HR16", (size_t) 0, NULL, 0);

   printf ("%hd", status);

   regfree (&regex);
}

因此,在线测试工作正常。

正则表达式-^ HR(\ d {2})$

字符串-HR16

例如,在https://regex101.com,一切都很好,我得到了比赛。

在我的代码中,它失败。用printf()打印的值为1(REG_NOMATCH)。

编辑-可以将代码粘贴到此处进行测试:https://rextester.com/l/c_online_compiler_gcc

1 个答案:

答案 0 :(得分:7)

您应该使用[0-9]而不是\d并将REG_EXTENDED传递给regcomp函数。

  

REG_EXTENDED
  解释正则表达式时,请使用POSIX扩展正则表达式语法。如果未设置,则使用POSIX基本正则表达式语法。

这里是updated code

#include  <stdio.h>
#include  <regex.h>

int main(void)
{
   char    *regPatt = regPatt = "^HR([0-9]{2})$";
   regex_t  regex;
   short    retval = regcomp (&regex, regPatt, REG_EXTENDED);
   short    status = regexec (&regex, "HR16", (size_t) 0, NULL, 0);
   printf ("%hd", status);
   regfree (&regex);
}