rt
想验证[].[].[]格式的字符串,并将中括号的内容放到m.Groups中。
现在正则字符串为 \\[(?<1>.*?)\\]\\.\\[(?<2>.*?)\\]\\.\\[(?<3>.*?)\\]
现在的情况是中括号内出现换行符(\n)则不能通过匹配
但第三个中括号内应允许换行符,如出现换行,要把包括换行符在内的中括号内的全部内容存放到m.Groups[2]中。
请问该如何修改

解决方案 »

  1.   

    使用 System.RegexOptions.Singleline 选项:using System;
    using System.Text.RegularExpressions;class Test
    {
      static void Main()
      {
        string s = "XYZ.[ABC].[DEFG].[HI\nJKL].OPQRSTUVW";
        string r = @"(?s)\[(.*?)\]\.\[(.*?)\]\.\[(.*?)\]";
        Match  m = Regex.Match(s, r);
        // 如果不使用"(?s)...",就这样用:
        // Match  m = Regex.Match(s, r, RegexOptions.Singleline);
        foreach (Group g in m.Groups)
        {
          Console.WriteLine(g.Value);
        }
      }
    }
    /*
    程序输出:
    [ABC].[DEFG].[HI
    JKL]
    ABC
    DEFG
    HI
    JKL
    注意,Groups[0]是整个匹配的文本,
    Groups[1]-Groups[3]对应第1-3个捕获型括号捕获的内容。
    */
      

  2.   

    System.RegexOptions.Singleline:
    指定单行模式。更改点 (.) 的含义,使它与每一个字符匹配(而不是与除 \n 之外的每个字符匹配)。 也可以在正则表达式前面加上 "(?s)" 表示这个意思。
      

  3.   

    ^(?<1>[\s\S])+.(?<2>[\s\S])+.(?<3>[\s\S])+$