http://www.yesky.com/SoftChannel/72342371961929728/20030611/1706928.shtml应用程序常常需要有文本处理功能,比如单词查找、电子邮件确认或XML文档 集成。这通常会涉及到模式匹配。Perl、sed或awk等语言通过使用正则表达式来 改善模式匹配,正则表达式是一串字符,它所定义的模式可用来查找匹配的文本。 为了使用Java
TM编程语言进行模式匹配,需 要使用带有许多
charAt
子字串的
StringTokenizer
类,读取字母或符号以便处理文本。这常常导致复杂或凌乱的代码。
现在不一样了。
2平台标准版(J2SETM)1.4版包含一个名 为java.util.regex
的新软件包,使得使用正则表达式成为可能。 目前的功能包括元字符的使用,它赋予正则表达式极大的灵活性
本文概括地介绍了正则表达式的使用,并详细解释如何利用 java.util.regex
软件包来使用正则表达式,用以下常见情形作为 例子:
- 简单的单词替换
- 电子邮件确认
- 从文件中删除控制字符
- 查找文件
为了编译这些例子中的代码和在应用程序中使用正则表达式,需要安装 J2SE 1.4版。
构造正则表达式
正则表达式是一种字符模式,它描述的是一组字符串。你可以使用 java.util.regex
软件包,查找、显示或修改输入序列中出现的 某个模式的一部分或全部。
正则表达式最简单的形式是一个精确的字符串,比如“Java”或 “programming”。正则表达式匹配还允许你检查一个字符串是否符合某个具体的 句法形式,比如是不是一个电子邮件地址。
为了编写正则表达式,普通字符和特殊字符都要使用:
正则表达式中出现的任何其他字符都是普通字符,除非它前面有个 \
。
特殊字符有着特别的用处。例如,.可匹配除了换行符之外的任意字符。与 s.n
这样的正则表达式匹配的是任何三个字符的、以s
开始以n
结束的字符串,包括sun
和son
。
在正则表达式中有许多特殊字符,可以查找一行开头的单词,忽略大小写或 大小写敏感的单词,还有特殊字符可以给出一个范围,比如a-e
表 示从a
到e
的任何字母。
使用这个新软件包的正则表达式用法与Perl类似,所以如果你熟悉Perl中正则 表达式的使用,就可以在Java语言中使用同样的表达式语法。如果你不熟悉正则 表达式,下面是一些入门的例子:
构造 |
匹配于 |
字符 |
|
x |
字符 x |
\\ |
反斜线字符 |
\0 n |
八进制值的字符0 n (0 <= n <= 7) |
\0 nn |
八进制值的字符 0 nn (0 <= n <= 7) |
\0 mnn |
八进制值的字符0mnn 0 mnn (0 <= m <= 3, 0 <= n <= 7) |
\x hh |
十六进制值的字符0x hh |
\u hhhh |
十六进制值的字符0x hhhh |
\t |
制表符('\u0009' ) |
\n |
换行符 ('\u000A' ) |
\r |
回车符 ('\u000D' ) |
\f |
换页符 ('\u000C' ) |
\a |
响铃符 ('\u0007' ) |
\e |
转义符 ('\u001B' ) |
\c x |
T对应于x的控制字符 x |
|
字符类 |
[abc] |
a , b , or c (简单类) |
[^abc] |
除了a 、b 或c 之外的任意 字符(求反) |
[a-zA-Z] |
a 到z 或A 到Z ,包含(范围) |
[a-z-[bc]] |
a 到z ,除了b 和c : [ad-z] (减去) |
[a-z-[m-p]] |
a 到z ,除了m 到 p : [a-lq-z] |
[a-z-[^def]] |
d , e , 或 f |
预定义的字符类 |
. |
任意字符(也许能与行终止符匹配,也许不能) |
\d |
数字: [0-9] |
\D |
非数字: [^0-9] |
\s |
空格符: [ \t\n\x0B\f\r] |
\S |
非空格符: [^\s] |
\w |
单词字符: [a-zA-Z_0-9] |
\W |
非单词字符: [^\w] |