一、反向引用
圆括号的内容被捕获后,可以在这个括号被使用,从而写出一个比较实用的匹配模式,这个就是反向引用。反向引用既可以在正则表达式的内部,也可以在正则表达式的外部,内部反向引用\\f分组号,外部反向引用$分组号。
package com.jun.regexp;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 反向引用
*/
public class RegExp12 {
public static void main(String[] args) {
String content ="hello lili11 tom22 aaa55555 zzz";
//匹配两个连续的相同数字:(\\d)\\1
// String regStr ="(\\d)\\1";
//匹配五个连续的相同数字:(\\d)\\1
String regStr ="(\\d)\\1{4}";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);
while (matcher.find()){
System.out.println("找到:"+matcher.group(0));
}
}
}
二、结巴去重
package com.jun.regexp;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 结巴去重案
*/
public class RegExp13 {
public static void main(String[] args) {
String content = "我..我..要....要....要要......学Java";
//去除所有的.
String regStr = "\\.";
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);
content = matcher.replaceAll("");
//System.out.println("content:" + content);
//去除重复的字
//使用(.)\1+
//用反向引用$1来替换匹配到的内容
// pattern = Pattern.compile("(.)\\1+");
// matcher = pattern.matcher(content);
// while (matcher.find()) {
// System.out.println("找到:" + matcher.group(0));
// }
// content = matcher.replaceAll("$1");
// System.out.println("content:"+content);
//简化上面代码
content = Pattern.compile("(.)\\1+").matcher(content).replaceAll("$1");
System.out.println("content:"+content);
}
}