常用的正则表达式符号
1. 字符类
表达式 | 说明 |
---|---|
[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](减去) |
2. 预定义字符类
- 预定义字符就是拿这些符号当字符
表达式 | 说明 |
---|---|
. | 任何字符(与行结束符可能匹配也可能不匹配) |
\d | 数字:[0-9] |
\D | 非数字: [^0-9] |
\s | 空白字符:[ \t\n\x0B\f\r] |
\S | 非空白字符:[^\s] |
\w | 单词字符:[a-zA-Z_0-9] |
\W | 非单词字符:[^\w] |
3. 边界匹配器
- 限定位置
表达式 | 说明 |
---|---|
^ | 行的开头 |
$ | 行的结尾 |
\b | 单词边界 就是此词的起始和末尾有分隔符。 |
\B | 非单词边界 |
\A | 输入的开头 |
\G | 上一个匹配的结尾 |
\Z | 输入的结尾,仅用于最后的结束符(如果有的话) |
\z | 输入的结尾 |
4. Greedy 数量词
- X代表前面的字符或者表达式
表达式 | 说明 |
---|---|
X? | X,1次或0次 |
X* | X,0次或n次 |
X+ | X,1次或n次 |
X{n} | X,恰好 n 次 |
X{n,} | X,至少 n 次 |
X{n,m} | X,至少 n 次,但是不超过 m 次 |
5. 组
表达式 | 说明 |
---|---|
(X) | 把括号内的规则分成一个组,每个组都有一个编号,从1开始 |
组示例:
@Test
public void regTest() {
//根据叠词切割(tttmmmm)
String str = "zhangsanttttxiaoqiangmmmmmmzhaoliu";
//解释:()为分组, .为任意字符, 1代表组的编号, +一个或多个
//总体解释是:以任意字符为一个编号为1的组,匹配他一个或多个
String[] names = str.split("(.)\\1+");
for (String name : names) {
System.out.println(name);
}
}
正则表达式对字符串的常见操作:
-
匹配。
其实使用的就是String类中的matches方法。 -
切割。
其实使用的就是String类中的split方法。 -
替换。
其实使用的就是String类中的replaceAll()方法。 -
获取。
String中的正则方法
返回值 | 方法名称 | 说明 |
---|---|---|
boolean | matches(String regex) | 查看某一串与正则表达式的规则是否匹配,匹配为true,否false |
String[] | split(String regex) | 根据给定正则表达式的匹配拆分此字符串。 |
String | replaceAll(String regex, String replacement) | 如果某一串中的子串与正则表达式匹配,则替换新元素。 |
String | replaceFirst(String regex, String replacement) | 使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。 |
用正则表达式进行字符串的获取
- 将正则规则进行对象的封装。
Pattern p = Pattern.compile("a*b");
通过正则对象的matcher方法字符串相关联。获取要对字符串操作的匹配器对象Matcher .
Matcher m = p.matcher("aaaaab");
通过Matcher匹配器对象的方法对字符串进行操作。
boolean b = m.matches();
@Test
public void test5() {
String str = "da jia hao,ming tian bu fang jia!";
String regex = "\\b[a-z]{3}\\b";
//1,将正则封装成对象。
Pattern p = Pattern.compile(regex);
//2, 通过正则对象获取匹配器对象。
Matcher m = p.matcher(str);
//使用Matcher对象的方法对字符串进行操作。
//既然要获取三个字母组成的单词
//查找。 find();
System.out.println(str);
//使用循环,查找一个,返回值一个......
while (m.find()) {
System.out.println(m.group());//获取匹配的子序列
System.out.println(m.start() + ":" + m.end());
}
}