Eclipse 正則外掛程式 Myregexp
先推薦Eclipse的一個關於java Regex的外掛程式,
可以從 http://myregexp.com/eclipsePlugin.html 下載
本文
以下文轉自 http://dev.csdn.net/htmls/85/85006.html
Regex用來指定字串模式。當你需要定位匹配某種模式的字串時就可以使用Regex。例如,我們下面的一個常式就是在一個HTML檔案中通過尋找字串模式<a href="...">來定位所有的超連結。
當然,為了指定一種模式,使用...這種記號是不夠精確的。你需要精確地指定什麼樣的字元排列是一個合法的匹配。當描述某種模式時,你需要使用一種特殊的文法。
這裡有一個簡單例子。Regex
[Jj]ava.+
匹配下列形式的任何字串:
例如,字串“javaness”匹配這個特殊的Regex,但是字串“Core Java”卻不匹配。
如你所見,你需要瞭解一點文法來理解Regex的含意。幸運的是對於大多數的用途,使用少量的簡單構造(straightforward constructs)就已足夠。
- 字元類是可選自符的集合,用‘[’封裝,比如[Jj],[0-9],[A-Za-z]或[^0-9]。這裡的-表示範圍(Unicode落在兩個邊界之間的所有字元),^表示求補(指定字元外的所有字元)。
- 有許多預定以的字元類,像/d(數字)或/p{Sc}(Unicode貨幣符號),見表12-8和12-9。
- 符號.匹配任何字元(可能行終止符(line terminators)除外,這依賴於標識設定(flag settings))
- /用作轉義符,比如/.匹配一個句點,//匹配一個反斜線。
- 如果X和Y都是Regex,則XY表示“X的匹配後面跟著Y的匹配”。X|Y表示“任何X或Y的匹配”
- 可以將量詞(quantifier)用到運算式中,X+ 表示X重複1次或多次,X* 表示X重複0次或多次,X? 表示X重複0次或1次
- 預設地,一個量詞總是與使總體成功匹配的最長的可能重複匹配。可以加上尾碼?(稱為reluctant或stingy 匹配,用以匹配最小的重複數),和+(稱為possessive或貪婪匹配,用以即使在總體匹配失敗的情況下也匹配最大的重複數)來更改這種屬性。
例如,字串cab匹配[a-z]*ab,但不匹配[a-z]*+ab。第一種情況下,[a-z]*只匹配字元c,因此字元ab正好與模式的剩餘部分匹配。但是貪婪版本[a-z]*+就與字元cab匹配,模式的剩餘部分ab就匹配失敗(,這樣總體也就匹配失敗)。
- 可以使用分組來定義子運算式。將分組封裝在()中,如([+-]?)([0-9]+)。然後你可以讓模式比對符(the pattern matcher)返回每個分組的匹配,或者使用/n來回引分組(refer back to a group with /n),其中n是組號(以/1起始)
這裡有一個稍微有點複雜卻又很有用的Regex--它用來描述十進位和十六進位的整數。
[+-]?[0-9]+|0[Xx][0-9A-Fa-f]+
不幸的是,在使用Regex的各種程式和庫之間,它的文法還沒有完全標準化。對基本的構造上已達成了共識,但在細節方面有許多令人“抓狂”的區別(many maddening differences)。Java的Regex類使用了與Perl語言類似的文法,但也不盡相同。表12-8顯示了Java文法的所有Regex構造。要瞭解更多關於Regex的資訊,請參考Pattern類的API文檔,或者Jeffrey E. F. Friedl的著作《Mastering Regular Expressions》(O'Reilly and Associates, 1997)(剛去第二書店查了一下,東南大學出版社已經引入了其第二版,影印)
表12-8 Regex文法
文法 解釋
字元
c 字元c
/unnnn, /xnn, /0n, /0nn, /0nnn 帶有十六或八進位值的代碼單元
/0n 八進位0n代表的字元(0<=n<=7)/0nn 八進位0nn代表的字元(0<=n<=7)/0mnn 八進位0mnn代表的字元(0<=m<=3,0<=n<=7)/xnn 十六進位 0xnn所代表的字元/uhhhh 十六進位 0xhhhh所代表的字元
/t, /n, /r, /f, /a, /e 控制字元,依次是定位字元,分行符號,斷行符號符,換頁符,警示符和轉義符
/cc 控制字元中出現的相應字元c
字元類
[C1C2. . .] C1、C2……中的任何字元。Ci可以是字元,字元範圍(C1-C2)或者字元類。
[^. . .] 字元類的補集
[ . . . && . . .] 兩個字元類的交集
預定義字元類
. 除行終止符外的任何字元(如果DOTALL標誌置位,則表示任何字元)
/d 數字[0-9]
/D 非數字[^0-9]
/s 空白字元[/t/n/r/f/x0B]
/S 非空白字元
/w 單詞字元[a-zA-Z0-9_]
/W 非單詞字元
/p{name} 一個指定的字元類,見表12-9
/P{name} 指定字元類的補集
邊界匹配符
^ $ 輸入的開頭和結尾(在多行模式(multiline mode)下是行的開頭和結尾)
/b 單詞邊界
/B 非單詞邊界
/A 輸入的開頭
/z 輸入的結尾
/Z 除最後行終止符之外的輸入結尾
/G 上個匹配的結尾
量詞
X? 可選的X(即X可能出現,也可能不出現)
X* X,可以重複0次或多次
X+ X,可以重複1次或多次
X{n} X{n,} X{n,m} X重複n次,至少重複n次,重複n到m次
量詞尾碼
? 設預設(貪婪)匹配為reluctant匹配
+ 設預設(貪婪)匹配為possessive匹配
集合操作
XY X的匹配後面跟著Y的匹配
X|Y X或Y的匹配
分組
(X) 匹配X並且在一個自動計數的分組中捕獲它
/n 與第n個分組的匹配
轉義
/c 字元c(必須不是字母)
/Q.../E 逐字地引用...
(?...) 特殊構造,看Pattern類的API