學點JavaRegex + 文法表

來源:互聯網
上載者:User
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.+
匹配下列形式的任何字串:

 

  • 首字母是J或j
  • 後續的三個字母是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。
  • 大多數字元與它們自身匹配,像上例中的ava字元。
  • 符號.匹配任何字元(可能行終止符(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

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.