当我在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 (®ex, regPatt, 0);
short status = regexec (®ex, "HR16", (size_t) 0, NULL, 0);
printf ("%hd", status);
regfree (®ex);
}
因此,在线测试工作正常。
正则表达式-^ HR(\ d {2})$
字符串-HR16
例如,在https://regex101.com,一切都很好,我得到了比赛。
在我的代码中,它失败。用printf()打印的值为1(REG_NOMATCH)。
编辑-可以将代码粘贴到此处进行测试:https://rextester.com/l/c_online_compiler_gcc
答案 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 (®ex, regPatt, REG_EXTENDED);
short status = regexec (®ex, "HR16", (size_t) 0, NULL, 0);
printf ("%hd", status);
regfree (®ex);
}