JavaRegex,Regex

來源:互聯網
上載者:User

JavaRegex,Regex
一、概述

  Regex是一串描述一個字元序列的字元,可以用來尋找其他字元序列中的匹配項。支援Regex處理的是兩個類:Pattern和Matcher,使用Pattern定義Regex,使用Matcher匹配其他序列中的模式。

回到頂部二、建立Regex

  建立Regex就是建立一個特殊的字串。

  Regex的編譯表達形式:指定為字串的Regex必須首先被編譯為此類的執行個體,然後將得到的模式用於建立Matcher對象。執行匹配所涉及的所有狀態都駐留在匹配器中,多個匹配器可以共用同一模式。

public class Test{    public static void main(String[] args)    {        Pattern pat=Pattern.compile("a*b");        Matcher  mat=pat.matcher("aaaaab");        if(mat.matches())        {            System.out.print("匹配");        }    }}

  上述代碼等同於

if("aaaaab".matches("a*b"))    {        System.out.print("匹配");    }

  Pattern對象可以多次使用,如果某個Regex只需要一次使用,可直接使用Pattern類的靜態matches方法。

  Regex的構造摘要:

構造 匹配
字元
x 字元 x
\\ 反斜線字元
\0n 帶有八進位值 0 的字元 n (0 <= n <= 7)
\0nn 帶有八進位值 0 的字元 nn (0 <= n <= 7)
\0mnn 帶有八進位值 0 的字元 mnn(0 <= m <= 3、0 <= n <= 7)
\xhh 帶有十六進位值 0x 的字元 hh
\uhhhh 帶有十六進位值 0x 的字元 hhhh
\t 定位字元 ('\u0009')
\n 新行(換行)符 ('\u000A')
\r 斷行符號符 ('\u000D')
\f 換頁符 ('\u000C')
\a 警示 (bell) 符 ('\u0007')
\e 轉義符 ('\u001B')
\cx 對應於 x 的控制符
字元類
[abc] a、b 或 c(簡單類)
[^abc] 任何字元,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,兩頭的字母包括在內(範圍)
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](並集)
[a-z&&[def]] d、e 或 f(交集)
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](減去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](減去)
預定義字元類
. 任何字元(與行結束符可能匹配也可能不匹配)
\d 數字:[0-9]
\D 非數字: [^0-9]
\s 空白字元:[ \t\n\x0B\f\r]
\S 非空白字元:[^\s]
\w 單詞字元:[a-zA-Z_0-9]
\W 非單詞字元:[^\w]
邊界匹配器
^ 行的開頭
$ 行的結尾
\b 單詞邊界
\B 非單詞邊界
\A 輸入的開頭
\G 上一個匹配的結尾
\Z 輸入的結尾,僅用於最後的結束符(如果有的話)
\z 輸入的結尾
Greedy 數量詞
X? X,一次或一次也沒有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超過 m 次
Reluctant 數量詞
X?? X,一次或一次也沒有
X*? X,零次或多次
X+? X,一次或多次
X{n}? X,恰好 n 次
X{n,}? X,至少 n 次
X{n,m}? X,至少 n 次,但是不超過 m 次
Possessive 數量詞
X?+ X,一次或一次也沒有
X*+ X,零次或多次
X++ X,一次或多次
X{n}+ X,恰好 n 次
X{n,}+ X,至少 n 次
X{n,m}+ X,至少 n 次,但是不超過 m 次
Logical 運算子
XY X 後跟 Y
X|Y X 或 Y
(X) X,作為擷取的群組

  Regex支援的數量標識符有如下幾種模式:

  Greedy(貪婪模式):預設情況下數量表示符採用貪婪模式,該方式會一直匹配下去直到無法匹配為止。

  Reluctant(勉強模式):用問號尾碼(?)表示。它只會匹配最少的字元。

  Possessive(佔有模式):用加號尾碼(+)表示,一般較少使用。

  eg:

public class RegExp{    public static void main(String[] args)    {        Pattern pat1=Pattern.compile("\\w.*ab");        Pattern pat2=Pattern.compile("\\w.*?ab");        Matcher mat1=pat1.matcher("bbbbab aaab jjjjj is");        Matcher mat2=pat2.matcher("bbbbab aaab jjjjj is");        System.out.println("-----貪婪模式-------");        while(mat1.find())        {            System.out.println(mat1.group());  //貪婪模式下會一直匹配,輸出"bbbbab aaab"        }        System.out.println("-----勉強模式-------");        while(mat2.find())        {            System.out.println(mat2.group()); //勉強模式下會最小匹配,輸出"bbbbab '換行'  aaab"        }    }}

  輸出結果:

  

回到頂部三、使用Regex

  Pattern類沒有定義建構函式,是在調用compile()方法時建立模式。

  Matcher類也沒有建構函式,而是調用Pattern定義的matches方法時建立一個Matcher,只要建立了Mather就可以使用它的方法執行各種模式比對操作。

  • matches 方法嘗試將整個輸入序列與該模式比對。

  • lookingAt 嘗試將輸入序列從頭開始與該模式比對。

  • find 方法掃描輸入序列以尋找與該模式比對的下一個子序列。

  每個方法都返回一個表示成功或者失敗的布爾值。通過查詢匹配器的狀態可以擷取

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.