在进行正则匹配时,"正则字符串"会被编译成Pattern对象保存在内存中,以"待匹配字符串"作为参数通过Pattern对象创建出Matcher对象,然后对匹配结果做针对性操作
1 Pattern类
java.util.regex.Pattern
方法名 | 说明 |
静态 compile("regex") | 将"正则字符串"编译成Pattern对象 |
matcher("str") | 使用Pattern对象创建Matcher对象 |
split("str") | 对str按照regex分隔,返回String[ ] |
静态 matcher("regex","str") | 对整串字符串的校验 |
Pattern pattern = Pattern.compile("\\d*");
Matcher matcher1 = pattern.matcher("abc456");
Matcher matcher2 = pattern.matcher("123456");
Arrays.toString(pattern.split("12ab33db56cf")); //返回[, ab, db, cf]
如果一个Pattern对象只用一次,则可以使用Pattern的静态方法matchs( ) String类的matchs( )方法本质就是调用Pattern类的matchs( )方法
boolean flag = Pattern.matches("\\d*", "123456");
2 Matcher类
java.util.regex.Matcher
方法名 | 说明 |
matchers( ) | 整个字符串与regex是否匹配,返回boolean |
lookingAt( ) | 字符串前面部分与regex是否匹配,返回boolean |
find( ) | 字符串继续往后匹配,是否还有满足regex的子串,返回boolean |
groupCount( ) | 返回regex表达式中捕获组个数 |
group(int) / group(nama) | 返回上一次find( )匹配过的子串的捕获组,无参默认0 |
start( ) | 返回上一次find( )匹配过的子串的开始索引 |
end( ) | 返回上一次find( )匹配过的子串的结束索引+1 |
replaceFirst(replacement) | 用replacement替换第一次匹配的内容 |
replaceAll(replacement) | 用replacement替换所有匹配中的内容 |
2.1 matchers( )和 lookingAt( )
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher("123abc");
matcher.matches(); //返回false
matcher.lookingAt(); //返回true
2.2 find( ),groupCount( )和group( )
Pattern pattern = Pattern.compile("(\\d{3})-(\\d{7})");
Matcher mc = pattern.matcher("728-4765164 520-7758258");
while (mc.find()) {
System.out.println("分组的个数有:" + mc.groupCount());
for (int i = 0; i <= mc.groupCount(); i++) {
System.out.println("第" + i + "个分组为:" + mc.group(i));
}
}
//分组的个数有:2
//第0个分组为:728-4765164
//第1个分组为:728
//第2个分组为:4765164
//分组的个数有:2
//第0个分组为:520-7758258
//第1个分组为:520
//第2个分组为:7758258
2.3 start( )和end( )
Pattern pattern = Pattern.compile("[a-z]+");
Matcher matcher = pattern.matcher("123abc456def789");
while (matcher.find()) {
System.out.println("匹配子串" + matcher.group() + "开始于" + matcher.start() + "结束于" + matcher.end());
//匹配子串abc开始于3结束于6
//匹配子串def开始于9结束于12
}
2.4 replaceFirst( )和replaceAll( )
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher("12ab33db56cf");
matcher.replaceFirst("换"); //换ab33db56cf
matcher.replaceAll("换"); //换ab换db换cf