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

Java正規表現のサブ表現(?:re)とは?非キャプチャグループの基本とサンプルコード

Javaの正規表現におけるサブ表現(メタ文字)「(?: re)」は、正規表現をグループ化するための構文です。通常のグループ「(re)」と異なり、マッチしたテキストを記憶(キャプチャ)しないため、「非キャプチャグループ」と呼ばれます。

(?:re) の特徴

「(?:re)」を使うと、複数の要素をひとつのまとまりとして扱えますが、後方参照や group() メソッドでの取得対象にはなりません。マッチの判定だけが必要で、キャプチャした文字列を後から利用しない場合に、メモリの無駄を省き、パターンをすっきり記述できるのがメリットです。

サンプルコード

以下は、ユーザーから入力された文字列に対して「(?:[0-9])」というパターンでマッチするかどうかを確認するJavaプログラムの例です。

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("Enter a String");
        Scanner sc = new Scanner(System.in);
        String input = sc.next();

        // 非キャプチャグループを使用した正規表現
        String regex = "(?:[0-9])";

        // 正規表現をコンパイルしてPatternオブジェクトを生成
        Pattern pattern = Pattern.compile(regex);

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

        // マッチが存在するかどうかを検証
        boolean bool = matcher.find();
        if(bool) {
            System.out.print("Match found");
        } else {
            System.out.print("Match not found");
        }
    }
}

実行結果

数字を含む文字列「9848022338」を入力すると、パターン「(?:[0-9])」(0〜9のいずれか1文字)と一致するため、「Match found」が出力されます。

Enter a String
9848022338
Match found

キャプチャグループ (re) との違い

「([0-9])」のように通常の括弧を使った場合はマッチした部分が記憶され、matcher.group(1) などで取り出せます。一方「(?:[0-9])」ではグループ化のみ行われ、記憶はされません。単純にマッチの有無を確認したい場合や、グループ番号をずらしたくない場合には、非キャプチャグループ「(?:re)」の使用が推奨されます。

  1. Javaで正規表現を使って文字列の先頭ゼロを削除する方法

    JavaのStringクラスが提供するreplaceAll()メソッドは、「正規表現パターン」と「置換後の文字列」の2つの引数を受け取り、パターンにマッチした部分をすべて指定した文字列に置き換えます。 文字列の先頭にあるゼロ(先行ゼロ)にマッチさせるための正規表現は、次のとおりです。 ^0+(?!$) このパターンの意味は以下のとおりです。 ^0+:文字列の先頭から始まる1個以上の「0」にマッチします。 (?!$):否定先読みと呼ばれる構文で、文字列の末尾ではない位置であることを保証します。これにより、「0000」のようにすべてがゼロの文字列の場合でも、最後の1個のゼロが残り、空文字列にな

  2. Javaの正規表現で文字列から数値を抽出する方法

    Javaの正規表現(Regular Expression)を使えば、文字列の中から数値だけを簡単に取り出すことができます。この記事では、実際のコード例とともに、さまざまなパターンでの数値抽出の方法を解説します。文字列を解析し、必要な情報を抜き出すスキルは、テスターにとって欠かせない能力の一つです。特にAPIテストでは、JSONやXML形式のレスポンスを解析する場面が多く、正規表現の知識が大いに役立ちます。以下では、Javaの正規表現を使って文字列から数字・数値を抽出する具体的な例を紹介します。文字列からすべての数値を抽出するimport java.util.regex.Matcher; imp