带有限制量词的正则表达式在 g++ 中不起作用 (Ubuntu)
Regex with limiting quantifier does not work in g++ (Ubuntu)
出于某种原因,我必须在 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;
}
}
以上程序只打印 "NO MATCH"...
请给我一个建议。
你这里的问题是你的正则表达式是用 POSIX ERE 风格写的(限制量词写成 {7}
)。
为确保您的正则表达式有效,您需要可以使用 REG_EXTENDED
标志启用的 ERE 正则表达式类型。
BRE 正则表达式类型支持限制量词(您的正则表达式中有一个 {7}
),但您需要转义它们:\{7\}
.
见IDEONE demo and more details about POSIX BRE/ERE distinctions at POSIX Basic Regular Expressions。
出于某种原因,我必须在 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;
}
}
以上程序只打印 "NO MATCH"...
请给我一个建议。
你这里的问题是你的正则表达式是用 POSIX ERE 风格写的(限制量词写成 {7}
)。
为确保您的正则表达式有效,您需要可以使用 REG_EXTENDED
标志启用的 ERE 正则表达式类型。
BRE 正则表达式类型支持限制量词(您的正则表达式中有一个 {7}
),但您需要转义它们:\{7\}
.
见IDEONE demo and more details about POSIX BRE/ERE distinctions at POSIX Basic Regular Expressions。