为什么我的比赛成功等于假?我已经测试了以下模式并在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);
}
答案 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);