Java中的正则表达式

Java中的正则表达式

相关类

Java中正则表达式的相关应用主要集中在包java.util.regex中,并且相关的主要类为PatternMatcher

  • 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); // true
// 如果提供的字符串为a123bc,则没有匹配,返回false

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());
}

输出结果为:

1
2
123
345

这里的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
---

文本替换

文本替换表示将匹配项替换为指定的字符串。相关的方法有replaceFirstreplaceAll方法:

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

参考文章

  1. Java 正则表达式 | 菜鸟教程 (runoob.com)
  2. 正则表达式在线测试 | 菜鸟工具 (runoob.com)
  3. 正则表达式如何表示以某字符开头和结尾但不包含本身的匹配_VIP的博客-CSDN博客
  4. java正则表达式获取字符串中所有匹配的内容_ysyysjbama的博客-CSDN博客

Java中的正则表达式
http://example.com/2022/11/17/Java中的正则表达式/
作者
EverNorif
发布于
2022年11月17日
许可协议