要弄清這三個方法,首先要弄清Java正則表達式中的捕獲組的概念。捕獲組也就是Pattern中以括號對「()」分割出的子Pattern。至於爲何要用捕獲組呢,主要是爲了能找出在一次匹配中你更關心的部分。
捕獲組能夠經過從左到右計算其開括號來編號。例如,在表達式 "(x)(y\\w*)(z)" 中,存在三個這樣的組:
1. x
2. y\\w*
3. z
組零始終表明整個表達式。
之因此這樣命名捕獲組是由於在匹配中,保存了與這些組匹配的輸入序列的每一個子序列。捕獲的子序列稍後能夠經過 Back 引用在表達式中使用,也能夠在匹配操做完成後從匹配器獲取。
以 (?) 開頭的組是純的非捕獲 組,它不捕獲文本,也不針對組合計進行計數。
Example:
package pattern;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class testRegex {
public static void main(String[] args) {
String regex = "(x)(y\\w*)(z)";
String input = "exy123z,xy456z";
Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(input);
while (m.find()) {
System.out.println(m.group(2));
}
}
}
運行結果:
y123
y456java