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

时间:2013-09-17 09:57:53

标签: c# .net regex

虚拟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);

1 个答案:

答案 0 :(得分:8)

来自MSDN

  

IgnorePatternWhitespace 消除模式中未转义的空白区域,并启用标有#...

的注释

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

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

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

您可能希望将#替换为\#