1.概述:
正则表达式通过一些特定符号表示,用于操作字符串数据。
2.常见规则:
字符类 | |
---|---|
[abc] | a、b 或 c(简单类) |
[^abc] | 任何字符,除了 a、b 或 c(否定) |
[a-zA-Z] | a 到 z 或 A 到 Z,两头的字母包括在内(范围) |
[a-d[m-p]] | a 到 d 或 m 到 p:[a-dm-p](并集) |
[a-z&&[def]] | d、e 或 f(交集) |
[a-z&&[^bc]] | a 到 z,除了 b 和 c:[ad-z](减去) |
[a-z&&[^m-p]] | a 到 z,而非 m 到 p:[a-lq-z](减去) |
预定义字符类 | |
---|---|
. | 任何字符(与行结束符可能匹配也可能不匹配) |
\d | 数字:[0-9] |
\D | 非数字: [^0-9] |
\s | 空白字符:[ \t\n\x0B\f\r] |
\S | 非空白字符:[^\s] |
\w | 单词字符:[a-zA-Z_0-9] |
\W | 非单词字符:[^\w] |
边界匹配器 | |
---|---|
^ | 行的开头 |
$ | 行的结尾 |
\b | 单词边界 |
\B | 非单词边界 |
\A | 输入的开头 |
\G | 上一个匹配的结尾 |
\Z | 输入的结尾,仅用于最后的结束符(如果有的话) |
\z | 输入的结尾 |
Greedy 数量词 | |
---|---|
X? | X,一次或一次也没有 |
X* | X,零次或多次 |
X+ | X,一次或多次 |
X{n} | X,恰好 n 次 |
X{n,} | X,至少 n 次 |
X{n,m} | X,至少 n 次,但是不超过 m 次 |
3.常见功能:
代码示例:
String qq = "01234567";
// 特殊符号定义正则表达式
String regex = "[1-9][0-9]{4,14}";
// 1.匹配 public boolean matches(String regex); 告知此字符串是否匹配给定的正则表达式。
boolean b = qq.matches(regex);
System.out.println(qq + ":" + b);
String str = "zhangsan.lisi.wangwu";
// 2.切割 public String[] split(String regex,int limit);
// 根据匹配给定的正则表达式来拆分此字符串。
String[] names = str.split("\\.");
for (String name : names) {
System.out.println(name);
}
// 3.替换 String replaceAll(String regex, String replacement); 使用给定的
// replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
String str1 = "zhangsanttttxiaoqiangmmmmmmmzhaoliu";
str1 = str1.replaceAll("(.)\\1+", "#");
System.out.println(str1);
// 4.获取 指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,
// 依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。
// 因此,典型的调用顺序是
// 将正则规则进行对象的分装
Pattern p = Pattern.compile("a*b");
// 通过正则对象的matcher方法字符串相关联,获取要对字符串操作的匹配器对象Matcher
Matcher m = p.matcher("aaaaab");
// 通过Matcher匹配器对象的方法对字符串进行操作
boolean b1 = m.matches();
// 例
String str2 = "da jia hao,ming tian bu fang jia!";
String regex2 = "\\b[a-z]{3}\\b";
// 1.将正则封装成对象
Pattern p1 = Pattern.compile(regex2);
// 2.通过正则对象获取匹配器对象
Matcher m1 = p1.matcher(str2);
// 使用Matcher对象的方法对字符串进行操作
// 既然要获取三个字母组成的单词
// 查找 find();
while (m1.find()) {
// 获取匹配的子序列
System.out.println(m1.group());
}