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

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

Javaの正規表現において、サブ式(メタ文字)"( )"は、複数の正規表現をひとつのグループにまとめ、マッチしたテキストを記憶する働きを持ちます。グループ化を活用すると、選択(|)の適用範囲を限定したり、マッチした一部分の文字列を後から取り出したりできるようになります。

例1:基本的なグループ化

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

public class Example {
   public static void main(String args[]) {
      String input = "Hello how are you welcome to Tutorialspoint";
      String regex = "H(ell|ow)";

      // 正規表現をコンパイル
      Pattern pattern = Pattern.compile(regex);

      // Matcherオブジェクトを取得
      Matcher matcher = pattern.matcher(input);

      if (matcher.find()) {
         System.out.println("マッチが見つかりました");
      } else {
         System.out.println("マッチは見つかりませんでした");
      }
   }
}

出力結果

マッチが見つかりました

この例では、正規表現 H(ell|ow) の中でグループ (ell|ow) を使用しています。これにより、「Hell」または「How」という文字列にマッチするパターンを簡潔に表現できます。

例2:数字を含む文とのマッチング

次の例では、ユーザーが入力した文字列の中に数字が含まれているかどうかを判定しています。正規表現内でグループを組み合わせ、文字列全体の構造を定義しています。

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

public class PatternExample {
   public static void main(String[] args) {
      System.out.println("入力文字列を入力してください:");
      Scanner sc = new Scanner(System.in);
      String input = sc.nextLine();

      // グループを使用した正規表現
      String regex = "(?:.*)(\\d+)(.*)";

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

      // Matcherオブジェクトを作成
      Matcher matcher = pattern.matcher(input);

      boolean bool = matcher.matches();
      if (bool) {
         System.out.println("マッチが見つかりました");
      } else {
         System.out.println("マッチは見つかりませんでした");
      }
   }
}

出力結果

入力文字列を入力してください:
This is a 5363 test string
マッチが見つかりました

補足:キャプチャグループと非キャプチャグループ

例2で使用している (?:.*) は「非キャプチャグループ」と呼ばれる書き方です。グループ化の機能は持っていますが、マッチしたテキストを記憶しません。単にまとまりとして扱いたいだけであれば、非キャプチャグループを使うことで不要な記憶領域の消費を抑えられます。

一方、通常の ( ) で囲んだグループは「キャプチャグループ」となり、matcher.group(1) のようにインデックスを指定することで、マッチした部分文字列を後から取得できます。グループには左から順に1、2、3…と番号が割り当てられます。

  1. Javaの正規表現「\d」とは?数字マッチングの基本と実用例をわかりやすく解説

    Javaの正規表現における部分式(メタ文字)「\d」は、半角数字(0〜9)1文字にマッチするためのパターンです。「d」は「digit(数字)」を意味しており、文字列の中から数値を検索・抽出・検証したい場合に非常に便利な構文です。 なお、「\d」は文字クラス「[0-9]」と同じ意味を持ちます。Javaの文字列リテラル内で正規表現を記述する際は、バックスラッシュ自体がエスケープ文字として扱われるため、コード中では「\\d」のように2重にエスケープして記述する点に注意しましょう。 例1:文字列から数字パターンを検索する 次の例では、入力文字列の中から「数字 + 半角スペース + 24」というパターン

  2. Javaの正規表現「\S」メタ文字の使い方を徹底解説

    Javaの正規表現におけるサブ式(メタ文字)「\S」は、空白以外の文字にマッチします。つまり、スペース・タブ・改行などの空白文字を除いた、すべての文字と一致します。このメタ文字を使うことで、「文字列から空白を除外した文字数をカウントする」「空白を含まないトークンを抽出する」といった処理を簡単に実装できます。例1:\Sにマッチする文字数をカウントする次のサンプルコードでは、入力文字列の中で「\S」にマッチした回数(=空白以外の文字数)をカウントしています。import java.util.regex.Matcher; import java.util.regex.Pattern; public