Regexp Multiline

时间:2014-06-24 08:35:42

标签: c# regex

帮助为这样的文本写正确的正则表达式。

需要:

  1. 匹配所有这些字符串。但关键数字是 id 123 。 有必要从设置政策ID 128 退出

  2. 以及如何将每个字符串放入组中,因为我需要将每一行转换为另一种

  3. set policy id 128 
    from "Trust" to "Untrust" "lm pool" "172.16.2.2/32" "ANY" permit 
    set policy id 128
    set dst-address "MIEP"
    set dst-address "MIEP WS"
    set dst-address "radius1"
    set dst-address "radius2"
    exit
    

    我如何补充我的创作:

    StreamReader reader = new StreamReader(opendialog.FileName);
    string patternPolicy = @"set policy (id)(.+)exit";
    var matchesPolicy = Regex.Matches(
        reader.ReadToEnd(), 
        patternPolicy,
        RegexOptions.Multiline);
    

1 个答案:

答案 0 :(得分:2)

您不需要Multiline选项,需要RegexOptions.Singleline

var matchesPolicy = 
    Regex.Matches(reader.ReadToEnd(), patternPolicy,RegexOptions.Singleline);

请参阅Regular Expression Options

  

多   米   使用多行模式,其中^和$匹配每行的开头和结尾(而不是输入字符串的开头和结尾)。有关更多信息,请参阅多行模式。

     

SINGLELINE   小号   使用单行模式,其中句点(。)匹配每个字符(而不是除\ n之外的每个字符)。有关更多信息,请参阅单线模式。

然后你可能需要通过在量词中添加set policy (id)来使量词库变得懒惰以避免从第一个exit到最后一个?进行匹配:

string patternPolicy = @"set policy (id)(.+?)exit";

另一件事是,为什么要将“id”放入捕获组? 没有意义

string patternPolicy = @"set policy id(.+?)exit";