求助,关于 C 的正则表达式:
用 POSIX 的 regex 写了一个正则表达式:^[^\()[]{}",';#\|\s^\d{1,}$]+, 然后在程序里用 const char *pattern = "^[^\\\\\\(\\)\\[\\]\\{\\}\",'
;#\|\s^\d{1,}$]+",
匹配“ define a '(11 2.2 233 "abcd" "123abc"))”字符串中的 define,但是匹配不到,而我在一些正则表达式测试网站,用同样一套 pattern 和 string,是可以匹配到 define 这个单词的。
代码片段如下:
const char *pattern = "^[^\\\\\\(\\)\\[\\]\\{\\}\",'`;#\\|\\s^\\d{1,}$]+";
regex_t reg;
regmatch_t match[1];
int result = regcomp(®, pattern, REG_ENHANCED | REG_EXTENDED);
if (result != 0)
{
perror("Could not compile regex");
exit(EXIT_FAILURE);
}
int status = regexec(®, &line[i], 1, match, 0);
if (status == REG_NOMATCH)
{
// no match
regfree(®);
}
else if (status == 0)
{
// matched
// do something here
}
else
{
perror("Regex in exceptional situations, match identifier failed");
exit(EXIT_FAILURE);
}
1
vibbow 2019-06-08 02:39:34 +08:00 2
首先,每家正则式引擎的用法都是有些差异的,并不是想象中的那种通用的。
其次,Regex Buddy 你值得拥有,可以帮你在各种正则式引擎之间转换规则。 https://www.regexbuddy.com/ |
2
May725 2019-06-08 03:45:48 +08:00 via iPhone 1
正则语法或功能的支持可能并不是完全相同。
调试时,建议先缩短表达式,逐步确认,最后找出不能匹配的原因。 |
5
SmallZheng 2019-06-08 10:44:37 +08:00
\d 换成 [0-9] 试试
|