正则表达式(2)

主题

正则表达式(2)

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)
\t 制表符 ('\u0009')
\n 换行 ('\u000A')
\r 回车 ('\u000D')
\f 换页 ('\u000C')
\a 警铃 ('\u0007')
\e Esc键 ('\u001B')
\cx x对应的控制字符
字符集合
[abc] a, b, 或 c (简单集合)
[^abc] 任意字符除了a, b, 或 c (取反)
[a-zA-Z] azAZ, 包含 (范围)
[a-d[m-p]] ad, 或 mp: [a-dm-p] (并集)
[a-z&&[def]] d, e, 或 f (交集)
[a-z&&[^bc]] az, 除了 b and c: [ad-z] (差集)
[a-z&&[^m-p]] az, 且不是 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
正则表达式入门简单,精深难,学习曲线有点高。
在整理这份资料时,我自己又学到了一些新的东西。