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

获取到了(.)的值