为什么这个正则表达式会导致我的程序崩溃
Why does this regex cause my program to crash?
我正在编写一个正则表达式来提取目录和文件名。我在正则表达式测试器中对其进行了测试,它似乎在那里工作,但是当我在C++程序中运行它时,它崩溃了。
regex re("^(.*)(\/|\)(.*\.flt)$");
我正在使用Visual Studio 2010 SP1进行编译。当我运行代码时,它会在上面给出的行上中断。为什么?
编辑:我得到的例外是
Microsoft C++异常:内存位置的 std::tr1::regex_error 0x0042eb4c。
它在正则表达式的第 19 行中断.cpp
问题是您错误地转义了反斜杠:
(\/|\)
这应该意味着"正斜杠或反斜杠"将首先由编译器转换。以反斜杠开头的每对字符都将替换为基于转义序列的单个字符。
\
是表示 的有效转义序列。 但是,
)
不是有效的转义序列,因此它将被替换为 )
。因此,正则表达式构造函数将"看到"以下内容:
(/|)
这会转义右括号,从而导致语法错误。
字符类为您的情况提供了更好的语法:使用单个
[/\\]
C++替换转义序列后,正则表达式构造函数将看到此构造,
[/\]
意思是"正斜杠或反斜杠"。
相关文章:
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 为什么我的程序在for循环中k=0时返回垃圾值
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 我的程序没有从文件中读取并输入数据
- 为什么我的C++程序的程序集输出充满了 .ascii,没有汇编代码?
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- 为什么我的程序不能显示斐波那契级数?
- 为什么我的程序在使用预留后没有加速?
- 为什么如果我添加这一行,我的程序会不断询问值
- 为什么当我输入较大的数字时,我的程序会到达文件末尾?
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 为什么我的程序在 O0 和 O2 的优化级别返回不同的结果
- 为什么我的 c++ 程序检查不是初始化的变量?
- 为什么我的程序在输入某个形状的面积的测量值后没有结束?
- 在 fork() 之后,我在我的程序中不断得到相同的 pid
- C++ - 为什么我的程序在再次调用函数后关闭?
- 我的程序将 26 个字母转换为 ascII 没有显示正确答案
- 为什么我的程序在读取/写入文件时会删除最重要的数字?
- 我需要如何更改我的程序以使用打开/关闭原则?
- 我的 c++ 程序似乎没有发现字符串和我拥有但输入使用 getline 的变量之间的比较