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