Java基础类库-3

AI摘要:

对应《疯狂Java讲义(第5版)》7.5 章节

正则表达式

正则表达式是用于匹配字符串的模板

String类提供的方法

  • boolean matches(String regax):判断字符串是否匹配指定的正则表达式
  • String replaceAll(String regex, String replacement):将该字符串所有匹配regax的子串替换为replacement
  • String replaceFirst(String regax, String replacement):将该字符串第一个匹配regax的子串替换为replacement
  • String[] split(String regax):以regax作为分隔符,分割为多个子串

此外,Java提供了PatternMatcher两个类专门用于提供正则表达式支持

正则表达式的匹配规则

基本字符

字符解释
x字符x
\0mnn八进制数 0mnn 所表示的字符
\xhh十六进制值 0xhh 所表示的字符
\uhhhh十六进制值 0xhhhh 所表示的Unicode字符
\t制表符(’\u0009’)
\n新行(换行)符(’\u000A’)
\r回车符(’\u000D’)
\f换页符(’\u000C’)
\a报警(bell)符(’\u0007’)
\eEscape符(’\u001B’)
\cxx对应的控制符。如\cM匹配 Ctrl-M。x必须为AZ或az之一

特殊字符

字符说明
$
^
( )
[ ]
{ }
*
+
?
.
\
|

预定义字符(通配符)

字符说明
.可以匹配任何字符
\d匹配 0~9 的所有数字
\D匹配非数字
\s匹配所有的空白字符,包括空格、制表符、回车符、换页符、换行符等
\S匹配所有的非空白字符
\w匹配所有的单词字符,包括 0~9 的所有数字,26个英文字母和下划线(_)
\W匹配所有的非单词字符

方括号表达式

方括号表达式说明
[abc],[gz]枚举,表示a、b、c中任意一个字符
[a-f],[\u0041-\u0056]表示范围,可以和枚举共用,如[a-cx-z]
[^abc],[^a-f]求否,非a、b、c的任意字符,非 a~f 的任意字符
[a-z&&[def]]与运算,求交集
[a-d[m-p]]并运算[a-dm-p]

匹配所有中文字符:[\\u0041-\\u0056]

圆括号表达式

用于将多个表达式组成一个子表达式,可以使用运算符 | ,如:

((public)|(protected)|(private))用于匹配Java三个访问控制符之一

边界匹配符

边界匹配符说明
^行的开头
$行的结尾
\b单词的边界
\B非单词的边界
\A输入的开头
\G前一个匹配的结尾
\Z输入的结尾,仅用于最后的结束符
\z输入的结尾

三种匹配模式与数量表示符

  • Greedy(贪婪模式):默认,一直匹配下去,直到无法匹配为止
  • Reluctant(勉强模式):加(?)后缀,匹配最少字符
  • Pocessive(占有模式):加(+)后缀,仅Java
贪婪模式勉强模式占用模式说明
X?X??X?+X表达式出现零次或一次
X*X*?X*+X表达式出现零次或多次
X+X+?X++X表达式出现一次或多次
X{n}X{n}?X{n}+X表达式出现n次
X{n,}X{n,}?X{n,}+X表达式出现至少n次
X{n,m}X{n,m}?X{n,m}+X表达式出现至少n次,至少m次

使用正则表达式


Java基础类库-3
https://blog.cngo.rr.nu/posts/cd69.html
作者
cngo
发布于
2024年7月12日
许可协议