Javaの正規表現で入力の先頭に一致させる方法(\Aメタ文字の使い方)
入力の先頭に一致させる方法
Javaの正規表現では、メタ文字 「\A」 を使用することで、入力(文字列)の先頭に一致させることができます。「\A」は、入力の開始位置にのみ一致する境界正規表現構成要素です。
\A と ^ の違い
同じように先頭を表す記号として「^」がありますが、両者には以下のような違いがあります。
- \A:MULTILINEフラグの有無にかかわらず、常に文字列全体の先頭にのみ一致します。
- ^:通常は文字列の先頭に一致しますが、MULTILINEモードを有効にすると各行の先頭にも一致します。
サンプルコード
次の例では、ユーザーが入力した文字列が数字で始まっているかどうかを、\A を使った正規表現で判定しています。
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 = "\\A[0-9]";
// 正規表現をコンパイル
Pattern pattern = Pattern.compile(regex);
// Matcherオブジェクトを取得
Matcher matcher = pattern.matcher(input);
if(matcher.find()) {
System.out.println("一致が見つかりました");
} else {
System.out.println("一致は見つかりませんでした");
}
}
}コードのポイント
Scannerを使って、ユーザーから1行分の文字列を読み込みます。Pattern.compile()で、正規表現「\A[0-9]」(=先頭が0〜9のいずれかの数字であることを意味する)をコンパイルします。matcher()メソッドで、対象文字列に対するMatcherオブジェクトを取得します。find()メソッドで、一致する箇所が存在するかどうかを判定します。
実行結果1(数字で始まる文字列の場合)
文字列を入力してください 12 sample text 一致が見つかりました
実行結果2(数字以外で始まる文字列の場合)
文字列を入力してください sample text 一致は見つかりませんでした
このように、「12 sample text」のように先頭が数字の文字列に対しては一致が見つかり、「sample text」のように先頭が数字以外の場合には一致しないことが確認できます。
-
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