为什么“.*”和“.”给出不同的结果?
System.out.println("foo".replaceAll(".+","bar")); // --> "bar" System.out.println("foo".replaceAll(".*","bar")); //--> "barbar"
我会期望“bar”为两个,因为*,都是贪婪的,应该匹配整个字符串. (上面的例子是Java,但其他工具,像http://www.gskinner.com/RegExr/给我一样的结果)
你是对的贪婪,但“.*”是匹配两个字符串:第一个是“foo”,第二个是“”. “”只会匹配“foo”.
两者都尝试匹配最长可能的字符串,即“foo”.之后,他们尝试找到最后匹配的字符串.在这个阶段,“.*”能够匹配一个空字符串,而“.”不会.