Java正则
Pattern & Matcher
demo1
demo2
说明
java 中的正则匹配以小括号为依据,第一个小括号为第一组,第二个为第二组。默认正则有一个第0组
$0 & $X
以组匹配出的结果我们可以用$0 $1…依次来代替,具体参考如下例子。
注:
$0 $1只代表第一次出现的大写字母,上述(在大写字母前或后加_)功能的实现是因为String的repalaceAll底层有循环依次做正则匹配
$ \实例
1、在 Java 字符串的:
public String replaceFirst(String regex, String replacement)
public String replaceAll(String regex, String replacement)
两方法的第二个参数中是可以用 $1, $2 ... 来引用第一个参数的括号分组的,简单 Java 示例代码如下:
"abc def".replaceFirst("(\\w+)\\s+(\\w+)", "$2 $1"); // 结果为 def abc
"abc def aaa bbb".replaceAll("(\\w+)\\s+(\\w+)", "$2 $1"); // 结果是 def abc bbb aaa
2、在正则表达式外是用 $1, $2 ... 来进行 后向引用,如果是在正则表达式中就需要用 \1, \2 ... 的形式来进 后向引用。
下面例子,替换重复出现的两位数及之间的内容:
"xx12abcd12345".replaceAll("(\\d{2}).+?\\1", ""); // 结果为 xx345
3、案例3
x.replaceAll("(.)\\1+", "$1$1").replaceAll("(.)\\1(.)\\2", "$1$1$2")
"(.)\\1+"此正则参数代表2次以上匹配
"(.)\\1(.)\\2"此正则参数代表配AABB型
整个案例的含义为:
1. 三个同样的字母连在一起,去掉一个的就好啦:比如 helllo -> hello
2. 两对一样的字母(AABB型)连在一起,去掉第二对的一个字母就好啦:比如 helloo -> hello