在过去的两个小时中,我试图理解为什么下面的代码行
std::regex matchPattern{R"(?<=\@)(.*?)(?=\=)"};
引发 Microsoft C ++异常:内存位置上的std :: regex_error...。
我已经使用在线工具和notepad ++测试了常规表达式,并且一切正常。当我尝试在我的C ++应用程序中使用它时,在初始化时从上面得到运行时错误。 我正在使用c ++ 14
在此先感谢您的帮助。
答案 0 :(得分:1)
C ++ 14 std::regex
(任何一种口味)均不支持后向构造。
您可以使用R"(@([^=]+))"
并获取第1组的值。请注意,R"(
和)"
是原始字符串文字边界,@([^=]+)
是与@
匹配,然后匹配并捕获除{以外的1个以上字符的实字符串模式{1}}进入第1组。
请参见cppreference:
=
输出:
#include <regex>
#include <string>
#include <iostream>
using namespace std;
int main() {
std::regex matchPattern(R"(@([^=]+))");
std::string s("@test=boundary");
std::smatch matches;
if (std::regex_search(s, matches, matchPattern)) {
std::cout<<matches.str(1);
}
return 0;
}