【发布时间】:2011-11-25 11:02:58
【问题描述】:
我写了一个简单的c程序如下:
#include <stdio.h>
#include <regex.h>
int main(int argc, char* argv[])
{
regex_t re;
char *pattern = "\\d{3}([a-zA-Z]+).(\\d{2}|N/A)\\s\\1"; // use \d, but wouldn't match
const char *target = "123Hello N/A Hello";
regcomp(&re, pattern, REG_EXTENDED|REG_NOSUB);
int ret = regexec(&re, target, (size_t) 0, NULL, 0);
if(ret == REG_NOMATCH) {
printf("\n%s\n does not match \n%s\n", target, pattern);
}
pattern = "[0-9]{3}([a-zA-Z]+).([0-9]{2}|N/A)\\s\\1"; // changes to [0-9], now OK
regcomp(&re, pattern, REG_EXTENDED|REG_NOSUB);
ret = regexec(&re, target, (size_t) 0, NULL, 0);
if(ret == REG_NOMATCH) {
printf("\n%s\n does not match \n%s\n", target, pattern);
}
regfree(&re);
return 0;
}
我已经阅读了Wikipedia 上的 POSIX 正则表达式标准,我还没有找到任何证据证明 POSIX 立场是否支持 \d 元字符。
还是我的代码有细微的错误?
【问题讨论】:
标签: regex