【发布时间】:2026-02-02 11:40:01
【问题描述】:
当我在 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
【问题讨论】:
-
次要注意:您为什么使用
char *regPatt = regPatt = "^HR(\\d{2})$";而不仅仅是char *regPatt = "^HR(\\d{2})$";?为什么要多出regPatt =? -
您使用的是基本的正则表达式(没有 REG_EXTENDED 标志),因此 {2} 是按字面意思解释的。试试
"^HR[0-9][0-9]$"