正则表达式(Regular expression)用于搜索、编辑和操作字符串文本,从左到右匹配文本,每个源字符只匹配一次。
import java.util.regex.Matcher; import java.util.regex.Pattern;
目录
字符串内置正则处理方法
模式匹配 Pattern Matcher
基本语法实例
-
字符串内置正则处理方法
// 字符串内置正则处理方法
public static void RegExTest1() {
// matches() 当仅且当正则匹配整个字符串时返回 true
System.out.println("-----matches-----");
System.out.println("Regular".matches("Regular"));
System.out.println("Regular".matches("Regular "));
// replaceFirst() 替换首次匹配的字符串片段
System.out.println("-----replaceFirst-----");
System.out.println("Regex Regex_ Regex ".replaceFirst("\w{6}", "First"));
System.out.println("Regex Regex_ Regex ".replaceFirst("\w+\s", "First"));
// replaceAll() 替换所有匹配的字符 不会改变原str,返回修改后的对象
System.out.println("-----replaceAll-----");
System.out.println("RegggexReggexReggggex".replaceAll("g{2,4}", "g"));
// split() 按匹配的正则表达式切片字符串
System.out.println("-----split-----");
for (String item : "Regex Regex R".split("\s+")) {
System.out.println(item); // Regex Regex R
}
}
结果:
-----matches-----
true
false
-----replaceFirst-----
Regex First Regex
FirstRegex_ Regex
-----replaceAll-----
RegexRegexRegex
-----split-----
Regex
Regex
R
-
模式匹配 Pattern Matcher
// 模式匹配 Pattern Matcher
public static void RegExTest2() {
System.out.println("-----Pattern Matcher-----");
String str = "Regular , expression. ";
Pattern pat = Pattern.compile("\w+"); // 创建模式对象 匹配 Regular与expression
Matcher mat = pat.matcher(str); // 创建匹配对象 匹配 str
while (mat.find()) {
System.out.print("Start Index: " + mat.start()); // 匹配关系 [start, end)
System.out.print(" End Index: "+ mat.end() + " ");
System.out.println(mat.group()); // 没有用()分组,默认打印$0
}
System.out.println("-----()-----"); // 添加小括号可以进行分组创建反向引用生成对应片段
System.out.println(str.replaceAll("(\w+)(\s*)([.,])(\s*)", "$1$3"));
// Matcher.find(index) 查找下一个匹配的位置,可指定开始下标index
// 要先find(),找到后才有group()
// $0 匹配 `(w+)(s*)([.,])(s*)` 结果为 `Regular空格,空格空格` 和 `expression.空格`
// $1 匹配 `(w+)` 结果为 `Regular` 和 `expression`
// $2 匹配 `(s*)` 结果为 `空格` 和 ``
// $3 匹配 `([.,])` 结果为 `,` 和 `.`
// $4 匹配 `(s*)` 结果为 `空格空格` 和 `空格`
Pattern pat2 = Pattern.compile("(\w+)(\s*)([.,])(\s*)");
Matcher mat2 = pat2.matcher(str);
mat2.find();
System.out.println("$0 : " + mat2.group());
System.out.println("$1 : " + mat2.group(1));
System.out.println("$3 : " + mat2.group(3));
System.out.println("-----(?:)-----");
// (?:) 小括号内以?:开头可以取消对应分组生成片段
System.out.println(str.replaceAll("(\w+)(?:\s*)([.,])(?:\s*)", "$1$2"));
}
结果:
-----Pattern Matcher-----
Start Index: 0 End Index: 7 Regular
Start Index: 11 End Index: 21 expression
-----()-----
Regular,expression.
$0 : Regular ,
$1 : Regular
$3 : ,
-----(?:)-----
Regular,expression.
-
基本语法实例
// 基本语法
public static void RegExTest3() {
// 字符串中 n 表示回车,\n 表示 "n"
// 正则表达 . 表示字符,\. 表示匹配"."
System.out.println("-----.\s\w-----");
System.out.println("Reg6!nrular".replaceAll("R.+", "_"));
System.out.println("Reg6!nnular".replaceAll("\s", "_"));
System.out.println("Reg6!nrular".replaceAll("R\w+", "_"));
// 数字范围匹配
System.out.println("-----^$-----");
// 使用^与$注意范围为字符串整体的开始和结尾
System.out.println(Pattern.compile("0$").matcher("1200n1205").find()); // false
System.out.println(Pattern.compile("0$").matcher("1205n1200").find()); // true
System.out.println("-----^$2-----");
String str = "1990 2021 2017 1995 2016";
Pattern pat = Pattern.compile("199[5-9]|20[0-1][0-6]|2017"); // 匹配1995-2017
Matcher mat = pat.matcher(str);
while (mat.find()) {
System.out.print(mat.group() + " ");
}
结果:
-----.sw-----
_
ular
Reg6!__ular
_!
ular
-----^$-----
false
true
-----^$2-----
2017 1995 2016



