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

Javaの正規表現「\Z」メタ文字の使い方|文字列の末尾にマッチさせる方法

正規表現メタ文字「\Z」とは

Javaの正規表現におけるメタ文字「\Z」は、入力文字列全体の末尾にマッチするアンカーです。ただし、文字列の最後に改行などの行末記号が付いている場合は、その行末記号の直前の位置にマッチする点が特徴です。

よく似たメタ文字に「\z」があります。こちらは行末記号の有無にかかわらず、入力文字列の厳密な末尾にのみマッチします。

\Z と \z の違い

  • \Z … 入力の末尾にマッチする。ただし最終行末記号が存在する場合は、その直前の位置にマッチする。
  • \z … 行末記号の有無に関係なく、入力の厳密な末尾にのみマッチする。

サンプルコード1:文字列の末尾を検索する

次の例では、パターン「Tutorialspoint\z」を使用し、入力文字列が「Tutorialspoint」という文字列で終わっているかどうかを確認しています。

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

入力文字列「Hi how are you welcome to Tutorialspoint」は「Tutorialspoint」で終わっているため、1件のマッチが検出されます。

サンプルコード2:文字列が数字で終わるか判定する

次のJavaプログラムは、指定した入力テキストが数字で終わっているかどうかを検証します。パターン「[0-9]\z」によって、末尾が0〜9のいずれかの数字であるかをチェックできます。

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」で終わっているため、「入力は数字で終わっている」という判定結果が出力されます。

まとめ

「\Z」「\z」は、文字列の終端を確認したいときに便利なアンカーメタ文字です。拡張子のチェックやログの最終行の検証など、さまざまな場面で活用できます。改行を含む文字列を扱う場合は、両者の挙動の違いを理解した上で適切に使い分けることが重要です。

  1. Javaの正規表現における$(ドル)メタ文字の使い方

    正規表現におけるサブ表現(メタ文字)「$」は、行の末尾に一致します。パターンの最後に「$」を置くことで、指定した文字列で終わるテキストだけをマッチさせることができます。なお、デフォルトでは「$」は入力全体の末尾に一致しますが、Pattern.MULTILINEフラグを有効にすると、行区切り文字(改行など)の直前にも一致するようになります。例1:行末の一致を確認する次のJavaプログラムでは、「Tutorialspoint」という文字列で終わる入力に対して、正規表現「Tutorialspoint$」が何回一致するかを数えています。import java.util.regex.Matcher; i

  2. Java正規表現のメタ文字「^(キャレット)」の使い方を解説

    正規表現におけるサブ式(メタ文字)「^」は、行の先頭にマッチします。この記号を正規表現の中で使用すると、入力文字列の中でその後に続くパターンが行頭から始まる場合に一致とみなされます。 例1:行頭のパターンにマッチするか確認する 次のサンプルコードでは、入力文字列が「Hi how are you」というフレーズで始まっているかどうかを「^」を使って判定しています。 import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexExample { public static void m