Java
 Computer >> コンピューター >  >> プログラミング >> Java

【Java】正規表現でキャプチャグループの数をカウントする方法(groupCountメソッド)


キャプチャグループとは

Javaの正規表現では、複数の文字を括弧 () で囲むことで「キャプチャグループ」として扱うことができます。これにより、複数の文字をひとつの単位として抽出・操作できるようになります。

マッチ結果に含まれるキャプチャグループの数を調べるには、MatcherクラスgroupCount()メソッドを使用します。このメソッドは、現在のマッチにおけるキャプチャグループの総数を計算し、その値を返します。

ポイント: group(0) はパターン全体のマッチ結果を表すため、groupCount() の戻り値には含まれません。括弧で囲まれた部分だけがカウント対象となります。

サンプルコード

次の例では、「t」で始まり「t」で終わる単語にマッチする正規表現 (t(\S+)t)(\s) を使用しています。このパターンには3つのキャプチャグループが含まれています。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    public static void main(String[] args) {
        String str = "the words tit tat tweet tostff tact that tilt text. start and end with the letter t";
        // 「t」で始まり「t」で終わる語句に続く空白にマッチする正規表現
        String regex = "(t(\\S+)t)(\\s)";

        // Patternオブジェクトを生成
        Pattern pattern = Pattern.compile(regex);

        // 文字列に対してコンパイル済みパターンのマッチングを実行
        Matcher matcher = pattern.matcher(str);

        while (matcher.find()) {
            System.out.println(matcher.group(0));
        }
        System.out.println("キャプチャグループの総数: " + matcher.groupCount());
    }
}

実行結果

tit
tat
tweet
tact
that
tilt
text
tart
キャプチャグループの総数: 3

解説

この正規表現 (t(\S+)t)(\s) には、以下の3つのキャプチャグループが含まれています。

  • グループ1: (t(\S+)t) … 「t」で始まり「t」で終わる語句全体
  • グループ2: (\S+) … 語句の途中の文字列部分
  • グループ3: (\s) … 語句に続く空白文字

このように、groupCount() メソッドを使えば、パターン内に定義されたキャプチャグループの数を簡単に確認できます。複雑な正規表現をデバッグする際や、動的に生成したパターンを検証する際に非常に便利です。

  1. Javaの正規表現におけるサブ式(グループ化)の使い方

    Javaの正規表現において、サブ式(メタ文字)( )は、複数の正規表現をひとつのグループにまとめ、マッチしたテキストを記憶する働きを持ちます。グループ化を活用すると、選択(|)の適用範囲を限定したり、マッチした一部分の文字列を後から取り出したりできるようになります。 例1:基本的なグループ化 import java.util.regex.Matcher; import java.util.regex.Pattern; public class Example { public static void main(String args[]) { String input =

  2. Pythonの正規表現でキャプチャグループの数を取得する方法

    Pythonでキャプチャグループの数を取得するには Pythonのreモジュールで正規表現によるマッチングを行った際、パターン内に含まれるキャプチャグループの数を取得したい場合は、マッチオブジェクトのgroups()メソッドを使用します。groups()メソッドは、各キャプチャグループにマッチした文字列をタプルとして返すため、len()関数でその要素数を調べることで、グループの総数を簡単に確認できます。 コード例 以下の例では、3桁の数字をそれぞれ個別のキャプチャグループで捉える正規表現パターン(\d)(\d)(\d)を使用し、キャプチャグループの数を出力しています。 import re