有人可以向我解释为什么以下语句的结果只有两个而不只是一个?
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#)
答案 0 :(得分:5)
表达式"*."
在字符串的开头匹配"foo"
,在结尾处匹配一个空字符串(位置3)。请记住,*
表示“零或更多”。所以它在字符串的末尾匹配“nothing”。
这是一致的。 Regex.Match(string.Empty, ".*");
返回一个匹配:空字符串。
答案 1 :(得分:0)
包含'^'以将匹配的表达式锚定在输入字符串的开头。
MatchCollection matches = new Regex( "^.*" ).Matches( "foo" ) ;