正則表達式括號的使用
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
}
喜歡這樣文章的能夠關注我,我會持續更新,大家的關注是我更新的動力!須要更多java學習資料的也能夠私信我!java