javaSE复习之——正则表达式
正则表达式概念
就是一种规则,可以在某一段字符串中以某一个特殊的规则,取到自己想要的那段字符串。
String中的正则表达式方法:
.matches()
是否匹配这个正则表达式,返回true或者false
.replaceAll(String regex,String xxx)
替换所有匹配到的字符串
ps:使用正则非常好用,例:regex的内容为\d 那么那个字符串的所有数字都会被替换
.replaceFirst(String regex,String xxx)
替换找到的第一个字符串
.split()
以某一个字符串切割字符串
正则表达式专属类与方法
实现方法:
1 | Pattern p = Pattern.compile("a*b"); |
实战例子:
1 | String str1 = "我手机号码是18734126341,曾经用过17707053381,曾经还用过13228865165"; |
正则表达式字符类
表达式 | 获取结果 |
---|---|
[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")
//返回true2、$符号,在替换时可以获取到正则表达式中某组获取到的字符,$1代表获取到第一组中的字符串
例子:
1
2 "问问啊啊".replaceAll("(.)\\1","$1");
//替换后的结果为:问啊 $1获取到了(.)的值