Java (java.util.regex)
作者:張桂權
(摘自《正則表達式袖珍手冊》一書。譯者,張桂權。可以從http://download.csdn.net/source/346896下載完整的譯稿。如果感覺不錯就去買一本原版的書吧,Regular Expression Pocket Reference,支持原書的作者。看PDF文件也是很累的。看完之後別忘了,給我提寶貴意見哦。謝謝。[email protected])
在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歸組、捕獲、條件和控制(續)