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

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

Javaの正規表現におけるメタ文字(サブ式)「\z」は、文字列の末尾にマッチします。行単位ではなく、入力全体の最後尾だけが対象となるため、文字列が特定のパターンで終わっているかどうかを判定したい場合に非常に便利です。

なお、似た働きをする構文として「\Z」や「$」があります。「\Z」は末尾に改行がある場合にその直前にもマッチできる点、「$」はデフォルトでは行末にマッチする点で「\z」と挙動が異なります。厳密に入力全体の終端だけを判定したい場合は「\z」を使うのが確実です。

例1:文字列の末尾に特定の語句があるか確認する

次のサンプルコードでは、入力文字列が「Tutorialspoint」という語句で終わっているかどうかを「\z」を使ってチェックしています。

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

public class RegexExample {
    public static void main(String args[]) {
        String regex = "Tutorialspoint\\z";
        String input = "Hi how are you welcome to Tutorialspoint";

        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(input);

        int count = 0;
        while (m.find()) {
            count++;
        }
        System.out.println("Number of matches: " + count);
    }
}

実行結果

Number of matches: 1

この例では、パターン「Tutorialspoint\z」が入力文字列の末尾と一致したため、マッチ数として「1」が出力されます。もし末尾以外に同じ語句があっても、「\z」によって末尾以外はマッチ対象から除外される点に注目してください。

例2:入力テキストが数字で終わっているか検証する

次のJavaプログラムは、与えられた入力テキストが数字で終わっているかどうかを判定します。文字クラス「[0-9]」と「\z」を組み合わせることで、「末尾が数字であること」を簡潔に表現できます。

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

public class Data {
    public static void main(String args[]) {
        String regex = "[0-9]\\z";
        String input = "Hi how are you \n this is sample text \n this is third line 554";

        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(input);

        if (m.find()) {
            System.out.println("Given input ends with a digit");
        } else {
            System.out.println("Given input doesn't end with a digit");
        }
    }
}

実行結果

Given input ends with a digit

入力文字列の最終行が「554」で終わっているため、パターン「[0-9]\z」は末尾の数字「4」にマッチし、「数字で終わっています」というメッセージが表示されます。仮に末尾が英字や記号であれば、else側の処理が実行されます。

まとめ

  • 「\z」は入力文字列の最後尾のみにマッチするメタ文字。
  • 複数行モード(MULTILINE)を有効にしても「\z」は常に文字列全体の終端を指す。
  • 末尾の改行を許容したい場合は「\Z」、行末判定が必要な場合は「$」を使い分けるとよい。
  • ファイルの拡張子チェックやログの末尾検証など、文字列の終端バリデーションに活用できる。
  1. Javaの正規表現「re*」メタ文字とは?使い方とサンプルコード解説

    Javaの正規表現におけるメタ文字「re*」(量指定子 *)は、直前の表現・部分式の0回以上の繰り返しにマッチします。つまり、直前の要素が1回も出現しない場合でもマッチ対象となる点が特徴です。 re*の基本的な動作 例えば、正規表現 aabc* の場合は、「aab」の後に「c」が0回以上続く文字列にマッチします。したがって、「aab」「aabc」「aabcc」など、いずれもマッチ対象になります。 例1:パターンに一致する件数を数える import java.util.regex.Matcher; import java.util.regex.Pattern; public class Re

  2. Java正規表現のメタ文字「.(ドット)」の使い方を徹底解説

    Javaの正規表現におけるメタ文字「.(ドット)」は、改行文字を除く任意の1文字にマッチする特殊な記号です。この記事では、ドットメタ文字の基本的な動作と、実際のコード例を使った具体的な使い方をわかりやすく解説します。 ドット(.)メタ文字の基本 正規表現のサブ式である「.」は、改行(\n)以外のあらゆる単一文字に一致します。英字・数字・記号・空白など、種類を問わず1文字としてカウントされるため、パターンの柔軟な指定に非常に便利です。 例1:任意の1文字とのマッチ数を数える 次のJavaプログラムでは、パターン「.」を使って入力文字列内の各文字がいくつマッチするかをカウントしています。空白も1文