带有限制量词的正则表达式在 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(&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;
    }

}

以上程序只打印 "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