尝试在一段文本中查找多个匹配项时遇到了问题。该文本具有以下格式:
string text = "#IDENTIFIER http://www.link1.com #IDENTIFIER http://www.link2.org #IDENTIFIER http://www.link3.com #IDENTIFIER http://www.link4.net";
我的目标是从中提取每个 #IDENTIFIER链接事件,我使用以下代码执行此操作:
string pat = @"(#IDENTIFIER)(.*)\.(com|org|net)";
MatchCollection matches = Regex.Matches(text, pat);
foreach(Match match in matches) {
Console.WriteLine("'{0}' found at index {1}.", match.Value, match.Index);
}
问题是,它返回一个匹配而不是4.为什么忽略中间模式?
你知道我错过了吗?
答案 0 :(得分:1)
这是因为.*
本身通常是贪婪的。而是尝试使用.*?
:
string pat = @"(#IDENTIFIER)(.*?)\.(com|org|net)";