本文最后更新于:2022-11-17T23:11:52+08:00
                  
                  
                
              
            
            
              
                
                Java中的正则表达式
相关类
Java中正则表达式的相关应用主要集中在包java.util.regex中,并且相关的主要类为Pattern和Matcher。
- Pattern:Pattern对象是一个正则表达式的编译表示。它不提供公共的构造方法,而是通过一个Pattern的静态方法来获取Pattern对象,该方法接受一个字符串参数,即为对应的正则表达式。
- Matcher:Matcher对象则是用来对输入字符串进行匹配操作的。它也不提供公共的构造方法,获取一个Matcher对象需要通过调用Pattern对象的matcher方法来获得。
在使用过程中,我们通常是通过Pattern的静态方法获取到Pattern对象之后,再通过该对象的matcher方法获取到Matcher对象。之后相关的匹配操作就是通过Matcher对象来完成的。
常用方法介绍
是否能匹配
判断给定的字符串能够匹配正则表达式,使用matches方法。
| 12
 3
 4
 5
 6
 
 | Pattern pattern = Pattern.compile("a\\d*b");Matcher matcher = pattern.matcher("a123b");
 
 boolean matches = matcher.matches();
 System.out.println(matches);
 
 
 | 
matches()和lookingAt()方法否用来尝试匹配一个输入序列模式。它们的不同是前者要求整个序列都匹配,而后者不需要整个序列都匹配,但还是需要从第一个字符开始匹配。
捕获匹配项
在给定的字符串中捕获所有的匹配项。
这里的正则表达式(?<=),(?=)表示需要匹配对应模式,但是不包含在结果中。在进行模式匹配的时候有很大的作用。
例如下面的例子中的(?<=a)\d*(?=b),则表示匹配开头为a,结尾为b,中间为数字的字符串,但是实际匹配的结果只返回中间的数字
| 12
 3
 4
 5
 6
 
 | Pattern pattern = Pattern.compile("(?<=a)\\d*(?=b)");Matcher matcher = pattern.matcher("a123ba345bb213c");
 
 while (matcher.find()) {
 System.out.println(matcher.group());
 }
 
 | 
输出结果为:
这里的find()方法调用之后,会偏移到下一个匹配。然后调用group()方法返回当前匹配的值。该过程类似于迭代器,表示迭代匹配并获取结果。
匹配索引
使用start和end可以获得当前匹配的索引。需要结合find方法一起使用。
| 12
 3
 4
 5
 6
 7
 8
 
 | Pattern pattern = Pattern.compile("a\\d*b");Matcher matcher = pattern.matcher("a123ba345bb213c");
 
 while (matcher.find()){
 System.out.println("start =" + matcher.start());
 System.out.println("end =" + matcher.end());
 System.out.println("---");
 }
 
 | 
输出如下:
| 12
 3
 4
 5
 6
 
 | start =0end =5
 ---
 start =5
 end =10
 ---
 
 | 
文本替换
文本替换表示将匹配项替换为指定的字符串。相关的方法有replaceFirst和replaceAll方法:
| 12
 3
 4
 5
 6
 7
 
 | Pattern pattern = Pattern.compile("(?<=a)\\d*(?=b)");Matcher matcher = pattern.matcher("a123ba345bb213c");
 
 String first = matcher.replaceFirst("|first|");
 String all = matcher.replaceAll("|all|");
 System.out.println(first);
 System.out.println(all);
 
 | 
输出如下:
| 12
 
 | a|first|ba345bb213ca|all|ba|all|bb213c
 
 | 
参考文章
- Java
正则表达式 | 菜鸟教程 (runoob.com)
- 正则表达式在线测试 |
菜鸟工具 (runoob.com)
- 正则表达式如何表示以某字符开头和结尾但不包含本身的匹配_VIP的博客-CSDN博客
- java正则表达式获取字符串中所有匹配的内容_ysyysjbama的博客-CSDN博客