正则表达式(2)
主题
正则表达式(2)
Java支持的正则表达式
正则表达式构造的摘要
构造 | 匹配 |
---|---|
字符 | |
x | 字符 x |
\\ |
反斜杠 |
\0 n |
八进制 0 n (0 <= n <= 7) |
\0 nn |
八进制 0 nn (0 <= n <= 7) |
\0 mnn |
八进制 0 mnn (0 <= m <= 3, 0 <= n <= 7) |
\x hh |
十六进制 0x hh |
\u hhhh |
十六进制 0x hhhh |
\x {h…h} |
十六进制 0x h…h (Character.MIN_CODE_POINT <= 0x h…h <= Character.MAX_CODE_POINT ) |
\t |
制表符 ('\u0009' ) |
\n |
换行 ('\u000A' ) |
\r |
回车 ('\u000D' ) |
\f |
换页 ('\u000C' ) |
\a |
警铃 ('\u0007' ) |
\e |
Esc键 ('\u001B' ) |
\c x |
与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 , 除了 b and c : [ad-z] (差集) |
[a-z&&[^m-p]] |
a 到 z , 且不是 m through 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} |
十进制数字: [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 |
非单词边界 |
\A |
输入的开始 |
\G |
上一个匹配的结尾 |
\Z |
输入的结尾,但用于最终terminator, 如果有的话 |
\z |
输入的结尾 |
换行匹配 | |
\R |
任何Unicode换行符序列都等效于 `\u000D\u000A |
贪婪量词 | |
X? |
X, 一次或没有 |
X* |
X, 零次或多次 |
X+ |
X, 一或多次 |
X{ n} |
X, 正好n次 |
X{ n,} |
X, 至少n次 |
X{ n, m} |
X, 至少n次,但不超过m次 |
惰性量词 | |
X?? |
X, 一次或没有 |
X*? |
X, 零次或多次 |
X+? |
X, 一或多次 |
X{ n}? |
X, 正好n次 |
X{ n,}? |
X, 至少n次 |
X{ n, m}? |
X, 至少n次,但不超过m次 |
支配量词 | |
X?+ |
X, 一次或没有 |
X*+ |
X, 零次或多次 |
X++ |
X, 一或多次 |
X{ n}+ |
X, 正好n次 |
X{ n,}+ |
X, 至少n次 |
X{ n, m}+ |
X, 至少n次,但不超过m次 |
逻辑运算符 | |
XY | X紧跟着Y |
X` | `Y |
( X) |
X, 作为捕获组 |
后引用 | |
\ n |
匹配第n个捕获组 |
\ k<*name*> |
匹配名为”name”的命名捕获组 |
引用 | |
\ |
无意义,但引用了以下字符 |
\Q |
无意义,但是引用所有字符,直到\E |
\E |
无意义,但是结束由\Q 开始的引用 |
特殊构造(命名捕获和非捕获) | |
(?<name> X) |
X, 作为命名捕获组 |
(?: X) |
X, 作为一个非捕获组 |
(?idmsuxU-idmsuxU) |
无意义,切换匹配开关 i d m s u x U 开 - 关 |
(?idmsux-idmsux: X) |
X, 作为非捕获组 ,使用给定的标志 i d m s u x 开 - 关 |
(?= X) |
X, 零宽正向先行断言 |
(?! X) |
X, 零宽负向先行断言 |
(?<= X) |
X, 零宽正向后行断言 |
(?<! X) |
X, 零宽负向后行断言 |
(?> X) |
X, 作为一个独立的非捕获组 |
小结
本次内容摘自 JDK8 Pattern 。
正则表达式入门简单,精深难,学习曲线有点高。
在整理这份资料时,我自己又学到了一些新的东西。