现在的位置: 首页 > 综合 > 正文

.NET(C#):正则表达式的RegexOptions和行数

2012年05月21日 ⁄ 综合 ⁄ 共 1057字 ⁄ 字号 评论关闭

研究一下正则RegexOptions枚举的三个针对匹配行的区别,对应None,SingleLine(单行)和Multiline(多行)枚举值。

 

结论是:

  • None:(.)匹配任何字符除了\n。^和$不起作用。
  • Singleline:(.)匹配任何字符。^和$匹配整个字符串
  • Multiline:(.)匹配任何字符除了\n。^和$匹配每行的开头和结尾。

 

另外貌似目前.NET的正则对\A和\Z支持的不是很好。

下面测试代码:(注意由于输出字符中有换行符,因此用ASCII码作输出)

//+ using System.Text.RegularExpressions;

 

static void Main()

{

    var opts = new RegexOptions[]

    {

        RegexOptions.None, RegexOptions.Singleline, RegexOptions.Multiline

    };

 

    //一次用RegexOptions和指定正则来匹配并输出结果

    foreach (var opt in opts)

    {

        test(opt, @".");

        test(opt, @"^.*$");

    }

}

 

//用指定RegexOptions正则选项和正则来匹配"A\nB"并输出结果

static void test(RegexOptions opt, string pattern)

{

    Console.WriteLine("=== {0} - \"{1}\"", opt, pattern);

    var regex = new Regex(pattern, opt);

    var match = regex.Match("A\nB");

    while (match.Success)

    {

        PrintString(match.Value);

        match = match.NextMatch();

    }

}

 

//输出字符串的ASCII码

static void PrintString(string s)

{

    Console.WriteLine(BitConverter.ToString(Encoding.ASCII.GetBytes(s)));

}

 

输出:

=== None - "."

41

42

=== None - "^.*$"

=== Singleline - "."

41

0A

42

=== Singleline - "^.*$"

41-0A-42

=== Multiline - "."

41

42

=== Multiline - "^.*$"

41

42

抱歉!评论已关闭.