Java (java.util.regex)
作者:张桂权
(摘自《正则表达式袖珍手册》一书。译者,张桂权。可以从http://download.csdn.net/source/346896下载完整的译稿。如果感觉不错就去买一本原版的书吧,
Regular Expression Pocket Reference,支持原书的作者。看PDF文件也是很累的。看完之后别忘了,给我提宝贵意见哦。谢谢。ajax.mailer@gmail.com)
在Java1.4中通过Sun的java.util.regex包来介绍正则表达式。虽然在以前的版本中有可与之媲美的包,但是现在Sun的是标准。Sun提供的软件包采用的是传统的NFA匹配引擎。如果想进一步了解传统的NFA引擎背后的规则,请看“正则表达式和模式匹配”一节。本章包括Java1.5和1.6中的正则表达式。
支持的元字符
java.util.regex支持表11到表14中列出来的元字符和元序列。关于每一个元字符的详述,请看“正则表达式元字符、模式和结构”一节。
Java字符表示
|
序列名
| 序列描述
|
/a
| 告警
|
/b
| 空格,/x08,只有在字符类中有效
|
/e
| Esc字符,/x1B
|
/n
| 换行,/x0A
|
/r
| 回车,/x0D
|
/f
| 分页,/x0C
|
/t
| 水平制表符(tab),/x09
|
/0octal
| 通过1、2或3个八进制码数指定的字符
|
/xhex
| 通过2个十六进制数指定的字符
|
/uhex
| 通过4个十六进制数指定的Unicode字符
|
/cchar
| 命名的控制字符
|
表11 Java字符表示
Java字符类和类似(class-like)结构
|
字符类
| 类描述
|
[…]
| 列出来的或包含在列表范围的单一字符
|
[^…]
| 不在列出来的或不包含在列表范围的单一字符
|
.
| 除行终止(除非是DOTALL模式)之外的任意字符
|
/w
| 字字符,[a-zA-Z0-9_]
|
/W
| 非字字符,[^a-zA-Z0-9_]
|
/d
| 数字字符,[0-9]
|
/D
| 非数字字符,[^0-9]
|
/s
| 空格字符,[ /t/n/f/r/x0B]
|
/S
| 非空格字符,[^ /t/n/f/r/x0B]
|
/p{prop}
| 包含在给定POSIX字符类,Unicode属性和Unicode区位中的字符
|
/P{prop}
| 不包含在给定POSIX字符类,Unicode属性和Unicode区位中的字符
|
表12 Java字符类和类似(class-like)结构
Java锚和其他0宽测试
|
序列名
| 序列描述
|
^
| 字符串的开头,或,在多行匹配模式(MULTILINE),任意换行之后的位置
|
/A
| 在任意匹配模式,搜索字符串的开头
|
$
| 字符串末尾,或在多行模式(MULTILINE),任意换行之前的位置
|
/Z
| 在任意匹配模式下,字符串末尾或字符串末尾换行之前的位置
|
/z
| 任意匹配模式下,字符串末尾
|
/b
| 字边界
|
/B
| 非字边界
|
/G
| 当前搜索的开头
|
(?=…)
| 正向前(Positive lookahead)
|
(?!…)
| 负向前(Negative lookahead)
|
(?<=…)
| 正向后(Positive lookbehind)
|
(?<!...)
| 负向后(Negative lookbehind)
|
表13 Java锚和其他0宽测试
Java注释和模式转换器
|
转换器/序列
| 模式字符
| 转换器描述
|
Pattern.UNIX_LINES
| d
| 把/n作为终止符
|
Pattern.DOTALL
| s
| 点号匹配包括行终止符在内的任意字符
|
Pattern.MULTILINE
| m
| ^和$匹配下一个内嵌的行终止符
|
Pattern.COMMENTS
| x
| 忽略空格,并允许以#开头的注释
|
Pattern.CASE_INSENSITIVE
| i
| 大小写不敏感的ASCII码字符匹配
|
Pattern.UNICODE_CASE
| u
| 大小写不敏感的UNICODE码字符匹配
|
Pattern.CANON_EQ
| | Unicode“canonical equivalence””模式,其中基础字符中的字符,或序列和可视化表示的联合字符视为相等
|
(?mode)
| 为其余子表达式启动所列的模式(一个或多个idmsux)
|
(?-mode)
| 为其余子表达式取消所列的模式(一个或多个idmsux)
|
(?mode:...)
| 启动括号内所列的模式(一个或多个idmsux)
|
(?-mode:...)
| 取消括号内所列的模式(一个或多个idmsux)
|
#...
| 在/x模式中,把行内剩余部分当作注释
|
表14 Java注释和模式转换器
Java归组、捕获、条件和控制
|
序列
| 序列描述
|
(...)
| 把子模式和捕获子匹配归到/1,/2,...和$1,$2,...
|
/n
| 包含第n个被捕获的文本
|
$n
| 在替换字符串中,包含第n个捕获组中匹配的文本
|
(?:...)
| 把子模式分组,但是不捕获子匹配
|
(?>...)
| 自动分组
|
...|...
| 尝试子模式替换
|
*
| 匹配0或多次
|
+
| 匹配1次或多次
|
?
| 匹配1次或0次
|
{n}
| 匹配精确的n次
|
{n,}
| 至少匹配n次
|
{x,y}
| 至少匹配x次,最多y次
|
*?
| 匹配0次或多次,但是尽可能少
|
+?
| 匹配1次或多次,但是尽可能少
|
??
| 匹配0次或多次,但是尽可能少
|
表15 Java归组、捕获、条件和控制
Java归组、捕获、条件和控制(续)
|
序列
| 序列描述
|
{n,}?
| 至少匹配n次,但是尽可能少
|
{x,y}?
| 至少匹配x次,最多y次,但是尽可能少
|
*+
| 匹配0此或多次,并且从不回溯
|
++
| 匹配1此或多次,并且从不回溯
|
?+
| 匹配0此或1次,并且从不回溯
|
{n}+
| 至少匹配n次,并且从不回溯
|
{n,}+
| 至少匹配n次,并且从不回溯
|
{x,y}+
| 至少匹配x次,最多匹配y次,并且从不回溯
|
表15 Java归组、捕获、条件和控制(续)