原來,group是針對()來說的,group(0)就是指的整個串,group(1) 指的是第一個括號裏的東西,group(2)指的第二個括號裏的東西。
最近學習正則表達式,發現Java中的一些術語與其他地方描述的有所差異。比如Java正則表達式中的“組”概念與《正則表達式必知必會》一書中講述的“子表達式”其實是一樣的,只是表述不同而已。由此也引發了使用JavaAPI時對group(int group)、start(int group)、end(int group)不是太理解。
package com.enation.newtest; import java.io.*; import java.util.regex.*; import java.net.*; public class MailTest{ public static void main(String[] args) throws Exception{ String regEx = "count(\\d+)(df)"; String s = "count000dfdfsdffaaaa1"; Pattern pat = Pattern.compile(regEx); Matcher mat = pat.matcher(s); if(mat.find()){ System.out.println(mat.group(2)); } } }
輸出結果
mat.group() 輸出爲 count000df
mat.group(1) 輸出爲 000
mat.group(2) 輸出爲 df
如果沒有括號會有異常。這就是() 的作用。
如何沒有() 可以這樣寫:
public static void main(String []args){ String regEx = "count\\d+"; String s = "count000dfdfsdff1"; Pattern pat = Pattern.compile(regEx); Matcher mat = pat.matcher(s); if(mat.find()){ System.out.println(mat.group()); } }
但 輸出 會按照 “count\\d+”; 正則輸出.
結果是:count000