提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
学习正则表达式的时候对Matcher类一直领会不到,经过一段学习后记录下来。
一、Pattern
方法
matches():boolean类型
Pattern.matchers(pattern,content)第一个参数为正则表达式,第二个被验证的字符串
本方法一般用于验证输入的字符串整体是否满足要求
源码:
二、Matcher
matcher类
属性:
- Pattern parentPattern;
- int[] groups;
- int from, to;
- int lookbehindTo;
- CharSequence text;
方法:
repalceAll():不会修改原字符串,返回的是替换后新的。
find()
:返回boolean类型,用于while循环查出是否匹配到字符串。 如果需要验证字符串整体是否满足要求,则需要加定位符^$。
例如:while(mathcer.find()){
}
捕获分组
group()
group方法返回getSubSequence().toString()返回所找到的字符串。
例如:
matcher.group(0):表示匹配到的子字符串
matcher.group(1):若有分组,则记录捕获字符串的第一组,以groups[group2]开始,groups[group2+1]结束
matcher.group(2):表示匹配到的子字符串的第二组。
注意 分组不能越界
命名分组(?pattern):命名捕获,将匹配到的字符串捕获到一个组名称或编号名称中。用于name的字符串不能包含任何标点符号,且不能以数字为开头,可以使用单引号代替尖括号,例如(?‘name’)。 group()方法是重载的,可以用数字取,也可以用String类型的命名取。
非捕获分组
不能使用group(1或2等等)获取
分组捕获反向引用
1.举例说明反向引用作用:匹配个位数和千位数相同,十位数和百位数相同 5225 1551 正则表达式用(\\d)(\\d)\\2\\1 这里的\2和\1分别表示了引用了第二个分组,第一个分组。
2.举例说明反向引用作用:请在字符串中检索商品编号,如12311-333999444。要求满足前面是5位数字,中间-,后边9位数字,且每三位相同。
正则表达式用\\d{5}-(\\d)\\1{2}(\\d)\\2{2}(\\d)\\3{2}
参考资料:B站视频