带有限制量词的正则表达式在g ++中不起作用(Ubuntu)

时间:2015-09-28 11:28:04

标签: c++ regex g++

我必须在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(&regex, "RESERVE [A-Z][a-z]*[A-Z][a-z]* [0-9]{7}", 0);    
    if(result){
        cout<<"ERROR"<<endl;
    }


    result = regexec(&regex, "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, &regex, msg, 100);
        cout<<msg<<endl;
    }

}

以上程序仅打印&#34; NO MATCH&#34; ...
请给我一个建议。

1 个答案:

答案 0 :(得分:4)

你在这里遇到的问题是你的正则表达式是用POSIX ERE风格编写的(限制量词写成{7})。

要确保您的正则表达式有效,您需要可以使用REG_EXTENDED标志启用的ERE正则表达式类型。

BRE正则表达式类型支持限制量词(你的正则表达式{7}中有一个),但你需要转义它们:\{7\}

IDEONE demo上查看POSIX Basic Regular Expressions以及有关POSIX BRE / ERE区别的更多详细信息。