为什么 IgnorePatternWhitespace 会破坏正则表达式
本文关键字:正则表达式 IgnorePatternWhitespace 为什么 | 更新日期: 2023-09-27 18:31:31
虚拟 1 和 2 不会抛出异常,但虚拟 3 会抛出异常。此外,似乎 dummy2 没有正确运行我的正则表达式(从更长的真实版本来看)。为什么这些都不同?第一个在模式中没有空格,另外两个应该忽略空格以创建相同的模式
将所有内容全部放在一行中可以完美运行,但更难阅读和编辑。
Regex dummy1 = new Regex(@"(^'s*#(?<test>.*))", RegexOptions.Compiled );
Regex dummy2 = new Regex(@"(^'s*#(?<test>.*)
)", RegexOptions.Compiled | RegexOptions.IgnorePatternWhitespace);
Regex dummy3 = new Regex(@"(^'s*#(?<test>.*))", RegexOptions.Compiled | RegexOptions.IgnorePatternWhitespace);
来自MSDN
忽略模式空白 从模式中删除未转义的空格,并启用标有 #...
#
(含)中的所有内容都被视为评论
在第二个示例中也是如此,但在这种情况下,下一行上的)
平衡了第一行上的(
。
所以第二个正则表达式模式实际上是(^'s*)
的 - 第三个是(^s*
的 - 这是无效的。
您可能想用 '#
替换您的#
。