C#Regex.Matches返回太多匹配?

时间:2010-09-24 17:48:16

标签: c# regex .net-3.5

有人可以向我解释为什么以下语句的结果只有两个而不只是一个?

MatchCollection matches = new Regex( ".*" ).Matches( "foo" ) ;
Assert.AreEqual( 1, matches.Count ) ; // will fail!

new Regex( ".+" ).Matches( "foo" ) ; // returns one match (as expected)
new Regex( ".*" ).Matches( "" ) ; // also returns one match 

(我正在使用.NET 3.5的C#)

2 个答案:

答案 0 :(得分:5)

表达式"*."在字符串的开头匹配"foo",在结尾处匹配一个空字符串(位置3)。请记住,*表示“零或更多”。所以它在字符串的末尾匹配“nothing”。

这是一致的。 Regex.Match(string.Empty, ".*");返回一个匹配:空字符串。

答案 1 :(得分:0)

包含'^'以将匹配的表达式锚定在输入字符串的开头。

MatchCollection matches = new Regex( "^.*" ).Matches( "foo" ) ;