首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 正則表達式 groupCount() 誤區:它回傳的是捕獲組數而非匹配次數

     編輯:程式設計綜合問答

常見誤解

Pattern p = Pattern.compile("<char>(.*?)</char>");
Matcher m = p.matcher(input);
String[] arr = new String[m.groupCount()]; // 錯誤:groupCount() 回傳 1

groupCount() 返回**正則模式中捕獲組(括號對)的數量**,上例只有 (.*?) 一組,故回傳 1,與實際匹配到幾個 <char>...</char> 無關。

正確取得所有匹配內容

List results = new ArrayList<>();
while (m.find()) {
    results.add(m.group(1)); // group(1) 取第一個捕獲組內容
}
String[] arr = results.toArray(new String[0]);
  • m.find() 逐個尋找下一個匹配。
  • m.group(0) 為整個匹配字串(含 <char> 標籤),m.group(1) 為第一個括號內內容。

補充:非捕獲組與替換

  • 若不需捕獲,用 (?:...) 非捕獲組,groupCount() 不會計入。
  • replaceAll 可直接替換所有匹配,無需手動迭代。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved