Javaの正規表現(RegEx)で入力の末尾を一致させる方法
Javaの正規表現では、メタ文字「\z」を使用することで、入力の末尾(終わり)を一致させることができます。
「\z」は入力全体の最後を表すアンカーであり、パターンが文字列の末尾でマッチするかどうかを判定する際に便利です。例えば、入力された文字列が数字で終わっているかどうかを確認したい場合などに活用できます。
サンプルコード
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String args[]) {
// ユーザーから文字列を読み込む
System.out.println("文字列を入力してください");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
// 入力の末尾が数字であることを表す正規表現
String regex = "[0-9]\\z";
// 正規表現をコンパイル
Pattern pattern = Pattern.compile(regex);
// Matcherオブジェクトを取得
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
System.out.println("一致が見つかりました");
} else {
System.out.println("一致は見つかりませんでした");
}
}
}
実行結果1(数字以外で終わる場合)
文字列を入力してください sample text 一致は見つかりませんでした
この場合、入力「sample text」はアルファベットで終わっているため、「[0-9]\z」のパターンには一致しません。
実行結果2(数字で終わる場合)
文字列を入力してください sample text 23 一致が見つかりました
この場合、入力「sample text 23」は数字「3」で終わっているため、パターンに一致します。
ポイント解説
- 「\z」と「$」の違い: 「
$」は行末に一致するのに対し、「\z」は入力全体の本当の末尾にのみ一致します。複数行モードでも挙動が変わらないため、厳密に入力の終わりを判定したい場合は「\z」が適しています。 - 類似のメタ文字: Javaには「
\Z」(末尾、ただし最後が改行の場合はその前にも一致)や「\A」(入力の先頭)といったアンカーもあります。用途に応じて使い分けましょう。
-
Java正規表現(Regex)で固定文字セットにマッチさせる方法
Javaの正規表現における文字クラスを使うと、あらかじめ定義しておいた固定の文字集合の中から「任意の1文字」にマッチさせることができます。たとえば、次のように記述します。 [tmp]:t、m、p のいずれか1文字にマッチします。 [^tp]:t と p 以外の任意の1文字にマッチします(先頭に ^ を付けると否定を意味します)。 角括弧 [ ] 内に候補となる文字を列挙すると、入力文字列の各位置についてその中のどれか1つが存在すればマッチが成立します。この仕組みを利用すると、「特定の文字が文字列内に何回出現するか」を簡単に数えることができます。 例1:指定した文字の出現回数をカウントする
-
Java正規表現(RegEx)で任意の文字にマッチさせる方法
Javaの正規表現におけるメタ文字「.」(ドット)は、任意の1文字にマッチします。マッチ対象はアルファベットでも数字でも、記号などの特殊文字でも構いません。メタ文字「.」の基本「.」は改行文字以外のあらゆる単一文字と一致するため、パターンの柔軟性を高めたい場面で非常に便利です。なお、ドットそのもの(リテラルの「.」)にマッチさせたい場合は、バックスラッシュでエスケープして「\.」と記述します。例1:任意の1文字とのマッチ次のプログラムでは、ユーザーから入力された文字列に対して正規表現「.」を適用し、文字数をカウントしています。import java.util.Scanner; import j