Java 中正则表达式组的问题. ip = ip.replaceAll("(\\d{1,3})", "00$1"),为什么这个就能把 192 分为一个组,而不是把 1 分为一个组?不是说 {1,3} 就是一到三个都行吗?为什么偏选三个?

如果有多个匹配可能,就选择最长的那个,这是正则表达式的默认 greedy match(贪婪匹配)。如果在 {1,3} 后面放一个问号,变为 \d{1,3}? 它就会选择最短的那个匹配,这样的匹配就是 lazy match(懒惰匹配)。不过这样一来,1、9、2 每一个数字都会被匹配到,这应该不是你要的。
原发布于 https://www.zhihu.com/question/19888367/answer/13259590