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

为什么“.*”和“.”给出不同的结果?
System.out.println("foo".replaceAll(".+","bar")); // --> "bar"
System.out.println("foo".replaceAll(".*","bar")); //--> "barbar"

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

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

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

相关文章

jquery.validate使用攻略(表单校验) 目录 jquery.validate...
/\s+/g和/\s/g的区别 正则表达式/\s+/g...
自整理几个jquery.Validate验证正则: 1. 只能输入数字和字母...
this.optional(element)的用法 this.optional(element)是jqu...
jQuery.validate 表单动态验证 实际上jQuery.validate提供了...
自定义验证之这能输入数字(包括小数 负数 ) <script ...