Java正則表達式中group()、group(i)、groupCount()

要弄清這三個方法,首先要弄清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

相關文章
相關標籤/搜索