Java 中的正则表达式是由各种表达式结构综合组合起来的, 以下就是 Java 正则表达式结构总结.
关键字 | 说明 |
---|---|
字符表达式 | |
x | 字符x |
\\ | 反斜线 |
\0n | 八进制值为 0n (0 <= n <= 7) 的字符 |
\0nn | 八进制值为 0nn (0 <= n <= 7) 的字符 |
\0mnn | 八进制值为 0mnn (0<=m<=3, 0 <= n <= 7) 的字符 |
\xhh | 十六进制值为 0xhh 的字符 |
\uhhhh | 十六进制值为 0xhhhh 的字符 |
\x{h...h} | 十六进制值为 0xh...h 的字符(Character.MIN_CODE_POINT <= 0xh...h <= Character.MAX_CODE_POINT |
\N{name} | Unicode 字符名称为 'name' 的字符 |
\t | 制表符('\u0009') |
\n | 换行符('\u000A') |
\r | 回车符('\u000D') |
\f | 换页符('\u000C') |
\a | 警报(铃)字符('\u0007') |
\e | 转义符('\u001B') |
\cx | x对应的控制字符 |
字符类表达式 | |
[abc] | a, b 或 c (简单归类) |
[^abc] | 任意字符除了 a, b 或 c (否定) |
[a-zA-Z] | a-z 或 A-Z 包含边界字符(区间) |
[a-d[m-p]] | a到d或m-p:[a-dm-p](联合) |
[a-z&&[def]] | d, e, 或 f (交集) |
[a-z&&[^bc]] | a 到 z 但排除bc:[ad-z] (减法) |
[a-z&&[^m-p]] | a 到 z 但排除其中的 m 到 p:[a-lq-z](减法) |
预定义字符类表达式 | |
. | 匹配任意字符(不一定会匹配行终止符) |
\d | 数字:[0-9] |
\D | 除了数字:[^0-9] |
\h | 水平空白字符:[ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000] |
\H | 非水平空白字符:[^\h] |
\s | 空白字符:[ \t\n\x0B\f\r] |
\S | 非空白字符:[^\s] |
\v | 垂直空白字符:[\n\x0B\f\r\x85\u2028\u2029] |
\V | 非垂直空白字符:[^\v] |
\w | 单词字符:[a-zA-Z_0-9] |
\W | 非单词字符:[^\w] |
POSIX 字符类表达式(US-ASCII专用) | |
\p{Lower} | 小写字母字符:[a-z] |
\p{Upper} | 大写字母字符:[A-Z] |
\p{ASCII} | 全部 ASCII 字符:[\x00-\x7F] |
\p{Alpha} | 所有字母字符:[\p{Lower}\p{Upper}] |
\p{Digit} | 一个数字(10进制):[0-9] |
\p{Alnum} | 字母数字字符:[\p{Alpha}\p{Digit}] |
\p{Punct} | 标点符号(英文): !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ 中的一个 |
\p{Graph} | 可见字符:[\p{Alnum}\p{Punct}] |
\p{Print} | 可打印字符:[\p{Graph}\x20] |
\p{Blank} | 空格或制表符:[ \t] |
\p{Cntrl} | 控制字符:[\x00-\x1F\x7F] |
\p{XDigit} | 十六进制数:[0-9a-fA-F] |
\p{Space} | 空白符:[ \t\n\x0B\f\r] |
java.lang.Character类表达式(简单Java字符类) | |
\p{javaLowerCase} | 等效于java.lang.Character.isLowerCase() |
\p{javaUpperCase} | 等效于java.lang.Character.isUpperCase() |
\p{javaWhitespace} | 等效于java.lang.Character.isWhitespace() |
\p{javaMirrored} | 等效于java.lang.Character.isMirrored() |
用于Unicode 脚本, 块, 分类和二进制属性类表达式 | |
\p{IsLatin} | 拉丁文字字符(script) |
\p{InGreek} | 希腊语块字符(block) |
\p{Lu} | 大写字母(category) |
\p{IsAlphabetic} | 字母字符(binary property) |
\p{Sc} | 货币符号 |
\P{InGreek} | 除希腊语块字符的任意字符(否定). |
[\p{L}&&[^\p{Lu}]] | 除大写字母外的任意字母(减法) |
边界匹配符表达式 | |
^ | 一行的开始 |
$ | 一行的结束 |
\b | 单词边界 |
\b{g} | Unicode 扩展字素簇边界 |
\B | 非单词边界 |
\A | 输入的开始 |
\G | 前一个匹配的结尾 |
\Z | 输入的结束,但得有任意最终结束符 |
\z | 输入的结束 |
换行匹配符表达式 | |
\R | 任何 Unicode 换行符序列, 等价于 \u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029] |
Unicode 扩展字素匹配符 | |
\X | 任意 Unicode 扩展字素簇 |
贪婪性的量化表达式 | |
X? | X, 出现0次或1次 |
X* | X出现任意次,包括0次 |
X+ | X至少出现一次 |
X{n} | X出现n次 |
X{n,} | X至少出现n次 |
X{n,m} | X至少出现n次,但不会超过m次 |
勉强性(Reluctant)的量化表达式 | |
X?? | X, 出现0次或1次 |
X*? | X出现任意次,包括0次 |
X+? | X至少出现一次 |
X{n}? | X出现n次 |
X{n,}? | X至少出现n次 |
X{n,m}? | X至少出现n次,但不会超过m次 |
所有权性(Possessive)的量化表达式 | |
X?+ | X, 出现0次或1次 |
X*+ | X出现任意次,包括0次 |
X++ | X至少出现一次 |
X{n}+ | X出现n次 |
X{n,}+ | X至少出现n次 |
X{n,m}+ | X至少出现n次,但不会超过m次 |
逻辑操作符表达式 | |
XY | X 后跟着 Y |
X|Y | X 或 Y |
(X) | 将X视为捕捉组 |
上溯(Back)引用表达式 | |
\n | 匹配第n个匹配组, n是一个数字 |
\k<name> | 与 'name' 同名的命名捕获组匹配 |
引述(Quotation)表达式 | |
\ | 没有匹配意义, 但引用后面的一个字符 |
\Q | 没有匹配意义, 但引用后面所有的字符直到出现\E |
\E | 没有匹配意义, 但结束\Q开始的引用 |
特殊结构:命名捕获和空捕获表达式(non-capturing) | |
(?<name>X) | 将X视为一个命名捕获组 |
(?:X) | 将X视为一个空捕获组 |
(?idmsuxU-idmsuxU) | 没有匹配意义, 但会打开-关闭匹配标志 idmsuxU |
(?idmsux-idmsux:X) | 将X是为一个打开-关闭了匹配标志 idmsuxU 的空捕获组 |
(?=X) | X, 通过零宽度正向前瞻 |
(?!X) | X, 通过零宽度负向前瞻 |
(?<=X) | X, 通过零宽度正向前瞻 |
(?<!X) | X, 通过零宽度负向前瞻 |
(?>X) | X 视为一个独立的空捕获组 |
参考资料
Java Pattern 说明
https://21yi.com/java/java.util.regex.Pattern_10247.html