1

为什么我的匹配成功等于 false?我已经在 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);
}

在此处输入图像描述

4

3 回答 3

3

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

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

于 2012-07-19T05:18:57.173 回答
3

试试这个

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选项强制您的模式匹配.任何字符,包括\rand \n

于 2012-07-19T05:22:16.313 回答
0

使用单行选项

Regex RegexObj = new Regex("(?i)(<!-- START -->)(.*?)(?i)(<!-- END -->)",
        RegexOptions.Singleline);
于 2012-07-19T05:20:07.680 回答