2017-05-28 73 views
0

我在尝试查找一段文本中的多个匹配时遇到了问题。文本格式如下:Regex.Matches无法找到多个匹配

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

令人惊叹的,谢谢! – dspfnder

+0

尝试'RegexOptions.RightToLeft'。处理循环前缀时通常起作用。 –

+0

@劳埃德是正确的,但如果它是一个多线问题使用m标志:https://msdn.microsoft.com/en-US/library/yd1hzczs(v=vs.110).aspx – jojomojo

回答

1

这是因为.*本身一般是贪婪的。请尝试使用.*?

string pat = @"(#IDENTIFIER)(.*?)\.(com|org|net)"; 
+0

我做了,它工作。谢谢! – dspfnder

+1

有关说明:请参阅https://stackoverflow.com/a/3075150/3883866 –