gpt4 book ai didi

c++ - 为什么这个正则表达式模式 (tr1::regex) 会出现异常?

转载 作者:行者123 更新时间:2023-11-30 04:39:17 24 4
gpt4 key购买 nike

我遇到了 tr1::regex (VS2008) 的一个非常奇怪的问题,我无法找出原因。帖子末尾的代码编译正常,但在执行期间到达第 4 个正则表达式定义时抛出异常:

Microsoft C++ exception: std::tr1::regex_error at memory location 0x0012f5f4..

但是,我能看到的第 3 个和第 4 个之间的唯一区别(也许我是盲人)是“NumberOfComponents”而不是“SchemeVersion”。起初我想也许两者(第 3 和第 4)都是错误的,第 3 个错误只是在第 4 个中触发。情况似乎并非如此,因为我移动了它们并在它们之间放置了多个其他正则表达式定义。有问题的行总是触发异常。

有没有人知道为什么那条线

std::tr1::regex rxNumberOfComponents("\\NumberOfComponents:(\\s*\\d+){1}");

触发异常但是

std::tr1::regex rxSchemeVersion("\\SchemeVersion:(\\s*\\d+){1}");

不是吗?运行时只是在搞乱我吗?

感谢您花时间阅读本文并提供任何见解。

PS:我完全确定解决方案非常简单,我必须将头撞到最近的墙上才能平衡“愚蠢的问题”业力......


#include <regex>

int main(void)
{
std::tr1::regex rxSepFileIdent("Scanner Separation Configuration");
std::tr1::regex rxScannerNameIdent("\\ScannerName:((\\s*\\w+)+)");

std::tr1::regex rxSchemeVersion("\\SchemeVersion:(\\s*\\d+){1}");
std::tr1::regex rxNumberOfComponents("\\NumberOfComponents:(\\s*\\d+){1}");

std::tr1::regex rxConfigStartIdent("Configuration Start");
std::tr1::regex rxConfigEndIdent("Configuration End");

return 0;
}

最佳答案

您需要对反斜杠进行两次转义 - 一次用于正则表达式本身,第二次用于它们所在的字符串。

以 S 开头的那个有效,因为 \S 是一个有效的正则表达式转义(非空白字符)。以 N 开头的不是(因为 \N 不是有效的正则表达式转义)。

而是使用 "\\\\SchemeVersion: 等等。

关于c++ - 为什么这个正则表达式模式 (tr1::regex) 会出现异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2360563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com