正則表達式和Java編程語言
應用程序常常需要有文本處理功能,比如單詞查找、電子郵件確認或XML文檔 集成。這通常會涉及到模式匹配。Perl、sed或awk等語言通過使用正則表達式來 改善模式匹配,正則表達式是一串字符,它所定義的模式可用來查找匹配的文本。 為了使用JavaTM編程語言進行模式匹配,需 要使用帶有許多
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 |
\ | 反斜線字符 |
n | 八進制值的字符0 n (0 <= n <= 7) |
nn | 八進制值的字符 0 nn (0 <= n <= 7) |
mnn | 八進制值的字符0mnn 0 mnn (0 <= m <= 3, 0 <= n <= 7) |
x hh | 十六進制值的字符0x hh |
u hhhh | 十六進制值的字符0x hhhh |
| 制表符('u0009' ) |
| 換行符 ('u000A' ) |
| 回車符 ('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 | 空格符: [ x0Bf] |
S | 非空格符: [^s] |
w | 單詞字符: [a-zA-Z_0-9] |
W | 非單詞字符: [^w] |