我对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 ++中没有任何直接的方法吗?
答案 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;
}