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

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

正規表現におけるサブ表現(メタ文字)「$」は、行の末尾に一致します。パターンの最後に「$」を置くことで、指定した文字列で終わるテキストだけをマッチさせることができます。

なお、デフォルトでは「$」は入力全体の末尾に一致しますが、Pattern.MULTILINEフラグを有効にすると、行区切り文字(改行など)の直前にも一致するようになります。

例1:行末の一致を確認する

次のJavaプログラムでは、「Tutorialspoint」という文字列で終わる入力に対して、正規表現「Tutorialspoint$」が何回一致するかを数えています。

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

public class EndWith {
    public static void main(String args[]) {
        String regex = "Tutorialspoint$";
        String input = "Hi how are you welcome to Tutorialspoint";
        // Patternオブジェクトを作成
        Pattern p = Pattern.compile(regex);
        // Matcherオブジェクトを作成
        Matcher m = p.matcher(input);
        int count = 0;
        while (m.find()) {
            count++;
            System.out.println("一致数: " + count);
        }
    }
}

出力結果

一致数: 1

入力文字列が「Tutorialspoint」で終わっているため、1回一致したことがわかります。もし文字列の途中に「Tutorialspoint」があっても、末尾になければ一致しません。

例2:数字で終わる文字列を抽出する

次のJavaプログラムは、ユーザーから5つの文字列を受け取り、そのうち数字で終わる文字列だけを出力します。正規表現「^.*[0-9]$」は、「任意の文字の並びの後に数字が続き、そこで行が終わる」というパターンを表しています。

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

public class EndingwithDigit {
    public static void main(String args[]) {
        String regex = "^.*[0-9]$";
        Scanner sc = new Scanner(System.in);
        System.out.println("5つの入力文字列を入力してください:");
        String input[] = new String[5];
        for (int i = 0; i < 5; i++) {
            input[i] = sc.nextLine();
        }
        // Patternオブジェクトを作成
        Pattern p = Pattern.compile(regex);
        System.out.println("数字で終わる文字列:");
        for (int i = 0; i < 5; i++) {
            // Matcherオブジェクトを作成
            Matcher m = p.matcher(input[i]);
            if (m.matches()) {
                System.out.println(m.group());
            }
        }
    }
}

出力結果

5つの入力文字列を入力してください:
sample string 1
sample string 2
test data
hello
3264533 3546373 7653
数字で終わる文字列:
sample string 1
sample string 2
3264533 3546373 7653

この実行例では、「test data」と「hello」は末尾が数字ではないため出力されず、残りの3つの文字列だけが表示されています。

まとめ

  • メタ文字「$」は行(または入力)の末尾に一致する。
  • 「^」(行頭)と組み合わせることで、文字列全体の形式を厳密に検証できる。
  • MULTILINEモードを使うと、複数行テキストの各行末に対して一致判定が可能になる。
  1. Java正規表現のメタ文字「.(ドット)」の使い方を徹底解説

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

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

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