您的位置:首页 > 编程语言 > Java开发

正则表达式袖珍手册——java.util.regex

2008-01-29 19:48 344 查看

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归组、捕获、条件和控制(续)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: