regex - std::regex 在运行时在内存位置抛出 Microsoft C++ 异常:std::regex_error
问题描述
在过去的两个小时里,我试图理解为什么下面的代码行
std::regex matchPattern{R"(?<=\@)(.*?)(?=\=)"};
在内存位置引发Microsoft C++ 异常:std::regex_error ....
我已经用在线工具和记事本++测试了正则表达式,一切正常。当我尝试在我的 c++ 应用程序中使用它时,我在初始化时从上面收到运行时错误。我正在使用 c++14
在此先感谢您的帮助。
解决方案
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
推荐阅读
- r - 错误:“use_package”不是从“命名空间:devtools”导出的对象
- angular8 - 使用 angular 8 而不是 9 编译
- actionscript-3 - 如何将其加载到 AS3 中的 Main 类中?
- python-3.x - 使用 tkinter 定位 3 帧布局
- keras - 类型错误:load_model() 缺少 1 个必需的位置参数:“文件路径”
- go - 执行系统命令的最佳方式是什么
- mysql - 查询以获取表中的总数
- mysql - TYPO3 LTS 8 不支持数据类型 JSON
- c - 在 Opengl 上打印文本
- c++ - 使用代码块在 Linux 上使用 C++ 中的地址获取 USB 大容量存储设备