本文最后更新于: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方法。
1 2 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,中间为数字的字符串,但是实际匹配的结果只返回中间的数字
1 2 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方法一起使用。
1 2 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("---"); }
|
输出如下:
1 2 3 4 5 6
| start =0 end =5 --- start =5 end =10 ---
|
文本替换
文本替换表示将匹配项替换为指定的字符串。相关的方法有replaceFirst和replaceAll方法:
1 2 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);
|
输出如下:
1 2
| a|first|ba345bb213c a|all|ba|all|bb213c
|
参考文章
- Java
正则表达式 | 菜鸟教程 (runoob.com)
- 正则表达式在线测试 |
菜鸟工具 (runoob.com)
- 正则表达式如何表示以某字符开头和结尾但不包含本身的匹配_VIP的博客-CSDN博客
- java正则表达式获取字符串中所有匹配的内容_ysyysjbama的博客-CSDN博客