似乎c ++ std :: regex在前瞻中不支持后向引用。 http://www.regular-expressions.info只表示c ++不支持lookbehind,foreward reference和嵌套引用。我也扫描了c ++ 14标准,一无所获。关于网络上c ++ std :: regex的信息太少。
#include <iostream>
#include <string>
#include <regex>
using namespace std;
int main(int argc, char **argv) {
regex re("(a)xxx(?=\\1)");
smatch matchs;
string str {"axxxa"};
if(regex_search(str,matchs,re)) {
cout << "matched" << endl;
}else{
cout<<"not matched"<<endl;
}
return 0;
}
代码编译,但运行错误位于:
regex re("(a)xxx(?=\\1)");
libc ++ abi.dylib:以类型为std :: __的未捕获异常终止1 :: regex_error:表达式包含无效的反向引用。
我的gcc版本:
Apple LLVM版本8.1.0(clang-802.0.42)
目标:x86_64-apple-darwin16.7.0
B.T.W。相同的正则表达式在Nodejs中起作用:
var t = /(a)xxx(?=\1)/;
console.log(t.exec("axxxa"));
谢谢!