正则表达式

推荐在线网站
https://regex101.com
https://geek-docs.com/java/java-tutorial/regex.html

Java中的语法参照表

Java 具有用于处理正则表达式的内置 API。 它位于java.util.regex中。

Pattern就是regex正则表达式的对象,返回一个Pattern对象
Matcher是进行匹配操作的对象,返回true/false

正则表达式 含义 例子
. 匹配任何单个字符。 示例
? 一次匹配或根本不匹配前面的元素。
+ 与前面的元素匹配一次或多次。
* 与前面的元素匹配零次或多次。
^ 匹配字符串中的起始位置。
$ 匹配字符串中的结束位置。
| 备用运算符。
[abc] 匹配 a 或 b 或 c。
[a-c] 范围; 匹配 a 或 b 或 c。
[^abc] 否定,匹配除 a 或 b 或 c 之外的所有内容。
\s 匹配空白字符。 示例
\w 匹配单词字符; 等同于[a-zA-Z_0-9] 示例
\d 匹配单词字符; 等同于[0-9] 示例

例子

.

正则表达式a.c中间的.可以匹配一个任意字符,例如,下面的字符串都可以被匹配:

abc,因为.可以匹配字符b;
a&c,因为.可以匹配字符&;
acc,因为.可以匹配字符c。

但它不能匹配aca&&c,因为.匹配一个字符且仅限一个字符。

\s

a\sc可以匹配:

a c,因为\s可以匹配空格字符;
a c,因为\s可以匹配tab字符\t。

它不能匹配acabc等。

\w

\w可以匹配一个字母、数字或下划线,w的意思是word。例如,java\w可以匹配:

javac,因为\w可以匹配英文字符c;
java9,因为\w可以匹配数字字符9;。
java_,因为\w可以匹配下划线_。

它不能匹配java#java ,因为\w不能匹配#、空格等字符。

\d

正则表达式00\d可以匹配:

007,因为\d可以匹配字符7;
008,因为\d可以匹配字符8。

它不能匹配00A0077,因为\d仅限单个数字字符。

\D大写的D就是反向,不能为数字

捕获组

使用()来把匹配的内容分组

(?<name>...)
自定义捕获组的名称,后面使用${name}调用

正确答案.*(?[A-D])

匹配”正确答案”,再匹配它后面的空白符”.*”星号是说明点号多个匹配,捕获组名称为answer,匹配ABCD四种字母

1
2
3
4
5
// 正则表达式匹配 "正确答案" 后面的任意一个字母,并使用捕获组
Pattern p = Pattern.compile("正确答案.*(?<answer>[A-D])");
Matcher matcher = p.matcher(line);
// 如果匹配成功,则替换为自定义的字符串
String replacedLine = matcher.replaceAll("正确答案: {% hideInline ${answer} %}");