为什么我的比赛成功错误?

时间:2012-07-19 05:09:45

标签: c# regex

为什么我的比赛成功等于假?我已经测试了以下模式并在Regexbuddy中输入并且它是成功的。

string pattern = @"(?i)(<!-- START -->)(.*?)(?i)(<!-- END -->)";
string input = @"Hello
    <!-- START -->
    is there anyone out there?
    <!-- END -->";

Match match = Regex.Match(input, pattern, RegexOptions.Multiline);
if (match.Success) //-- FALSE!
{
    string found = match.Groups[1].Value;
    Console.WriteLine(found);
}

enter image description here

3 个答案:

答案 0 :(得分:3)

来自:http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regexoptions.aspx

RegexOptions.Multiline会导致^$更改其含义,以便它们在输入的任何行上匹配。它不会导致.\n匹配。为此,您需要使用RegexOptions.Singleline

答案 1 :(得分:2)

试一试

string pattern = @"(?is)(<!-- START -->)(.*?)(<!-- END -->)";
string input = @"Hello
    <!-- START -->
    is there anyone out there?
    <!-- END -->";

Match match = Regex.Match(input, pattern, RegexOptions.None);
if (match.Success) //-- FALSE!
{
    string found = match.Groups[1].Value;
    Console.WriteLine(found);
}

使用s选项会强制您的模式与.任意字符匹配,包括\r\n

答案 2 :(得分:0)

使用单行选项

Regex RegexObj = new Regex("(?i)(<!-- START -->)(.*?)(?i)(<!-- END -->)",
        RegexOptions.Singleline);