Regex LookAround在C ++中不起作用

时间:2016-11-16 04:51:17

标签: c++ regex

我对Python中的Regex工作有相当好的理解,但是用于外观工作的相同正则表达式字符串在C ++中不起作用。我已经使用以下示例https://regex101.com/r/5ad2Cu/1对此进行了测试。看起来很好。但是,对于以下C ++代码片段,相同的字符串显示为false。

#include <iostream>
#include <regex>
using namespace std;
int main()
{
const char* rejectReason = "Failed to execute SQL. Error=ORA-00936: missing expression";    
regex rgx(".+?(?=(ORA-([0-9]{5}):))");
cout<<regex_match(rejectReason, rgx)<<endl;
return 0;
}

我对C ++有些陌生,很多参考文献都表明前瞻可行,但是在C ++中不能使用,也没有提到这个外观。那么在C ++中没有任何直接的方法吗?

1 个答案:

答案 0 :(得分:0)

尝试将其作为入门者,这将为您提供regex库如何工作的基本概念。

#include <iostream>
#include <regex>
using namespace std;

int main()
{
    string rejectReason = "Failed to execute SQL. Error=ORA-00936: missing expression";
    regex rgx(".*Error=ORA-([0-9]{5}).*$");
    if (regex_match(rejectReason, rgx)) {
        cout << "String matches" <<endl;
    }

    smatch match;
    string result;
    if (regex_search(rejectReason, match, rgx) && match.size() > 1) {
        result = match.str(1);
    } else {
        result = string("");
    }

    cout << result << endl;
    return 0;
}