首页 > 解决方案 > std::regex 在运行时在内存位置抛出 Microsoft C++ 异常:std::regex_error

问题描述

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

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

在内存位置引发Microsoft C++ 异常:std::regex_error ....

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

在此先感谢您的帮助。

标签: regexc++11

解决方案


C++14 std::regex(任何它的风格)不支持lookbehind构造。

您可以使用R"(@([^=]+))"并获取 Group 1 值。请注意,R"(and)"是原始字符串文字边界,and是匹配然后匹配并捕获除第 1 组之外的 1+ 个字符@([^=]+)的真实字符串模式。@=

请参阅此 C++ 演示

#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;
}

输出:

test

推荐阅读