我必须在Ubuntu 14.04 g ++(版本4.8.4)中出于某种原因使用POSIX' regex.h
但是,似乎正则表达式在此环境中不起作用
#include <iostream>
#include <regex.h>
using namespace std;
int main()
{
regex_t regex;
int result = regcomp(®ex, "RESERVE [A-Z][a-z]*[A-Z][a-z]* [0-9]{7}", 0);
if(result){
cout<<"ERROR"<<endl;
}
result = regexec(®ex, "RESERVE MrKim 1111111", 0, NULL, 0);
if(!result){
cout<<"MATCH"<<endl;
}
else if(result == REG_NOMATCH){
cout<<"NO MATCH"<<endl;
}
else{
char msg[100];
regerror(result, ®ex, msg, 100);
cout<<msg<<endl;
}
}
以上程序仅打印&#34; NO MATCH&#34; ...
请给我一个建议。
答案 0 :(得分:4)
你在这里遇到的问题是你的正则表达式是用POSIX ERE风格编写的(限制量词写成{7}
)。
要确保您的正则表达式有效,您需要可以使用REG_EXTENDED
标志启用的ERE正则表达式类型。
BRE正则表达式类型支持限制量词(你的正则表达式{7}
中有一个),但你需要转义它们:\{7\}
。
在IDEONE demo上查看POSIX Basic Regular Expressions以及有关POSIX BRE / ERE区别的更多详细信息。