javaSE复习之——正则表达式

正则表达式概念

就是一种规则,可以在某一段字符串中以某一个特殊的规则,取到自己想要的那段字符串。

String中的正则表达式方法:

  • .matches()

    是否匹配这个正则表达式,返回true或者false

  • .replaceAll(String regex,String xxx)

    替换所有匹配到的字符串

    ps:使用正则非常好用,例:regex的内容为\d 那么那个字符串的所有数字都会被替换

  • .replaceFirst(String regex,String xxx)

    替换找到的第一个字符串

  • .split()

    以某一个字符串切割字符串

正则表达式专属类与方法

实现方法:

1
2
3
4
5
6
7
8
Pattern p = Pattern.compile("a*b");
//把正则表达式编译到模式中

Matcher m = p.matcher("aaaaab");
//使用上面创建的对象来匹配一个字符串

boolean b = m.matches();
//全部匹配到了则返回true

实战例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
String str1 = "我手机号码是18734126341,曾经用过17707053381,曾经还用过13228865165";

Pattern p = Pattern.compile("1[356789]\\d{9}");
//把正则表达式编译到模式中

Matcher m = p.matcher(str1);
//创建一个匹配器

while(m.find())
//匹配下一个能成功匹配的字符串,成功返回true

System.out.println(m.group());
//返回上一个匹配到的字符串


正则表达式字符类

表达式获取结果
[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]

正则表达式Greedy 数量词

表达式获取结果
X?X,一次或一次也没有
X*X,零次或多次
X+X,一次或多次
X{n}X,恰好 n 次
X{n,}X,至少 n 次
X{n,m}X,至少 n 次,但是不超过 m 次

正则表达式的分组功能

1、使用()进行分组

例子:(.)\1(.)\2

代表:第一组再出现一次,第二组也再出现一次,也就是\1同等与上一组出现的数据

例子:

1
2
3
str1 = “高高兴兴”
str1.matches("(.)\\1(.)\\2")
//返回true

2、$符号,在替换时可以获取到正则表达式中某组获取到的字符,$1代表获取到第一组中的字符串

例子:

1
2
"问问啊啊".replaceAll("(.)\\1","$1");
//替换后的结果为:问啊 $1

获取到了(.)的值