std :: regex在运行时在内存位置抛出Microsoft C ++异常:std :: regex_error

时间:2018-07-12 14:54:18

标签: regex c++11

在过去的两个小时中,我试图理解为什么下面的代码行

std::regex matchPattern{R"(?<=\@)(.*?)(?=\=)"};

引发 Microsoft C ++异常:内存位置上的std :: regex_error...。

我已经使用在线工具和notepad ++测试了常规表达式,并且一切正常。当我尝试在我的C ++应用程序中使用它时,在初始化时从上面得到运行时错误。 我正在使用c ++ 14

在此先感谢您的帮助。

1 个答案:

答案 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;
}