为什么 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);

为什么 IgnorePatternWhitespace 会破坏正则表达式

来自MSDN

忽略模式空白 从模式中删除未转义的空格,并启用标有 #...

#(含)中的所有内容都被视为评论

在第二个示例中也是如此,但在这种情况下,下一行上的)平衡了第一行上的(

所以第二个正则表达式模式实际上是(^'s*)的 - 第三个是(^s*的 - 这是无效的。

您可能想用 '# 替换您的#