java正則表達式括號的使用


正則表達式括號的使用

1 分組

上一章提到過的量詞只針對緊鄰的字符(組)起作用,例如HTML語言中的標簽<table></table>匹配:

<table[\s>][\s\S]+?</table>

其中忽略優先量詞+?,只對緊鄰的字符組[\s\S]起作用,如果需要對之前所有的部分起作用就需要用到圓括號(),寫成:

(<table[\s>][\s\S])+?</table>

起到了將<table[\s>][\s\S]看做一個整體的作用,即分組。

2 多選結構

括號的第二個作用就是制造出一個多選結構,兩個或以上個表達式中都是合法匹配的表達式(適用多種情況時),多選結構的形式是(...|...),用豎線|分割子表達式,這些子表達式也叫多選分支,多選分支可以有好多個,只要有1個分支匹配成功即宣告匹配成功,否則匹配失敗,可以類比C語言中的switch-case結構,失敗就走default下的代碼。

3 Pattern

Pattern對應正則表達式對象,如何把一個字符串變成程序可以識別的正則表達式?這就需要用到Pattern的方法compile():

Pattern pattern = Pattern.compile(String regex);

regex 是提前編輯好的正則表達式字符串。這樣編譯好的正則表達式可以為接下來的切分或者匹配操作鋪墊。

4 Matcher

Matcher可以理解為“某次匹配的結果對象”。就是把編譯過的Pattern對象應用到某個String對象(下面的例子使用text表示),產生的Matcher對象結果。例如:

Pattern pattern = Pattern.compile(String regex);

Matcher matcher = pattern.matcher(String text);

那么如何獲取到匹配成功的結果呢?Matcher對象調用方法find(),返回true就表示找到一個匹配,反之false就是沒找到。進一步地如果想要得到匹配的內容呢?

為了解決這個問題,就先切到括號的下一個使用方法。

5 引用分組

在使用括號之后,正則表達式會保存每個分組真正匹配的字符串。這種功能叫做捕獲分組,括號叫做捕獲型括號。那么如何根據個人的意願選擇輸出某一個分組,或者某幾個分組?

答案是,使用編號,從表達式最左邊的左括號編號記為1,這一對左右括號之間的部分為分組1,例如:

表達式:((\d{1})-(\d{2})-(\d{3}))

1號分組:(\d{1})-(\d{2})-(\d{3})

2號分組:\d{1}

3號分組:\d{2}

4號分組:\d{3}

Matcher對象可以調用group(int i)方法,獲取相應的分組,其中i是分組編號,0號分組是表示整個表達式所捕獲的分組:

while(matcher.find()){

   System.out.println(matcher.group());

   //不加參數i相當於i=0

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM