目录
正则表达式
一.语法
非贪心需要在后面加?
整体匹配,匹配内容为整个字符串
非整体匹配,匹配内容为部分字符串
String c = "12";
// 贪婪匹配
String i = "\\d+";
Pattern p = Pattern.compile(i);
Matcher m = p.matcher(c);
while (m.find()) {
System.out.println(m.group(0));
}
// 非贪婪匹配
i = "\\d+?";
p = Pattern.compile(i);
m = p.matcher(c);
while (m.find()) {
System.out.println(m.group(0));
}
输出:
1.转义符
\\ 用于某些特殊字符,否则会报错( . * + ( ) $ \ / ? [ ] ^ { } ) |
2.限定符
3.选择匹配符
4.分组组合和反向引用
①.分组:可以把一个小括号看作一个分组
②.捕获:以小括号为标签,从左到右第一个为1,第二个为2,0为整个正则表达式获取的内容,
③.反向引用:小括号被捕获后,可以使用,内部反向引用用 \\ 分组号,外部反向引用用 $分组号
String c = "1221,5225,6666";
String i = "(\\d)(\\d)\\2\\1";// 分组,内部反向引用
Pattern p = Pattern.compile(i);
Matcher m = p.matcher(c);
while (m.find()) {
System.out.print(m.group(1));
System.out.print(" " + m.group(2) + " ");
System.out.println(m.group(0));
}
System.out.println(m.replaceAll("$1"));// 外部反向引用
输出:
5.特殊字符
/s 空白字符 /S 非空白字符 [a-z] // 匹配所有的小写字母 [A-Z] // 匹配所有的大写字母 [a-zA-Z] // 匹配所有的字母 [0-9] // 匹配所有的数字
6.定位符
二.常用类
1.Pattern
Pettern对象是一个 正则表达式对象,没有公共的方法
String c = "222.22.22.22";
String i = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}";
Pattern p = Pattern.compile(i);
Matcher m = p.matcher(c);
while (m.find()) {// find() 不是整体匹配,能匹配到就有
System.out.print(m.group(0));
}
System.out.println();
System.out.println(p.pattern());
System.out.println(p.quote(" "));
System.out.println(p.matcher(i));
输出:
2.Matcher
Matcher 对象是对输入字符串进行 解释和匹配的引擎
3.PatternSyntaxException
是一个非强制异常类,表示正则表达式语法错误
三.String
String c = "a12,a45,a78,aa";
// replaceAll()替换 (?=)是这个后缀的
System.out.println(c.replaceAll("a(?=12|45)", "b"));
// (?!)不是这个后缀的
System.out.println(c.replaceAll("a(?!12|45)", "b"));
// 分割字符串
String[] i = c.split(",");
for (String string : i) {
System.out.println(string);
}
c = "100";
// 整体匹配,即匹配内容为整个字符串才返回 true
System.out.println(c.matches("\\d+"));
输出:
b12,b45,a78,aa
a12,a45,b78,bb
a12
a45
a78
aa
true