正则表达式 – 为什么“.*”和“. “给不同的结果?

前端之家收集整理的这篇文章主要介绍了正则表达式 – 为什么“.*”和“. “给不同的结果?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么“.*”和“.”给出不同的结果?
System.out.println("foo".replaceAll(".+","bar")); // --> "bar"
System.out.println("foo".replaceAll(".*","bar")); //--> "barbar"

我会期望“bar”为两个,因为*,都是贪婪的,应该匹配整个字符串. (上面的例子是Java,但其他工具,像http://www.gskinner.com/RegExr/给我一样的结果)

你是对的贪婪,但“.*”是匹配两个字符串:第一个是“foo”,第二个是“”. “”只会匹配“foo”.

两者都尝试匹配最长可能的字符串,即“foo”.之后,他们尝试找到最后匹配的字符串.在这个阶段,“.*”能够匹配一个空字符串,而“.”不会.

猜你在找的正则表达式相关文章