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

Javaの正規表現:\Aメタ文字で文字列の先頭に一致させる方法


Javaの正規表現におけるメタ文字「\A」は、入力文字列全体の先頭に一致します。「^」と似た働きをしますが、「^」はMULTILINEモード時に各行の先頭にも一致するのに対し、「\A」は常に文字列全体の先頭のみに一致するという違いがあります。

例1:\Aを使った基本的なマッチング

次のJavaプログラムでは、パターン「\AHi」を使って、入力文字列が「Hi」という文字列で始まっているかどうかを確認しています。

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

public class RegexExample {
   public static void main(String args[]) {
      String regex = "\\AHi";
      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...」は「Hi」で始まっているため、1件の一致が検出されました。もし「Hi」が文字列の途中にしか存在しない場合、\Aは先頭にしか一致しないため、一致件数は0になります。

例2:入力文字列に非ASCII文字が含まれているかを判定する

次のJavaプログラムは、ユーザーから文字列を入力として受け取り、その文字列に非ASCII文字が含まれているかどうかを検証します。

ここでは、パターン「\A\p{ASCII}*\z」を使用しています。これは「文字列の先頭(\A)から末尾(\z)まで、すべての文字がASCII文字(\p{ASCII})であること」を意味します。もし非ASCII文字が1つでも含まれていれば、このパターンには一致しません。

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

public class StartingOfInput {
   public static void main(String args[]) {
      String regex = "\\A\\p{ASCII}*\\z";
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter the input string: ");
      String input = sc.nextLine();
      // Patternオブジェクトの作成
      Pattern p = Pattern.compile(regex);
      // Matcherオブジェクトの作成
      Matcher m = p.matcher(input);
      if(m.find()) {
         System.out.println("Given input contains only ASCII characters");
      } else {
         System.out.println("Given input contains non-ASCII characters");
      }
   }
}

出力1(ASCII文字のみの場合)

Enter the input string:
What is your name
Given input contains only ASCII characters

入力された「What is your name」はすべてASCII文字で構成されているため、パターンに一致し、「ASCII文字のみを含む」という結果が出力されます。

出力2(非ASCII文字を含む場合)

Enter the input string:
whÿ do we fall
Given input contains non-ASCII characters

この例では、入力文字列に「ÿ」(ラテン文字の拡張記号)が含まれています。ÿはASCII範囲外の文字のため、パターン「\A\p{ASCII}*\z」には一致せず、「非ASCII文字を含む」という結果が出力されます。

ポイントまとめ

  • \A:文字列全体の先頭に一致するメタ文字
  • \z:文字列全体の末尾に一致するメタ文字
  • \p{ASCII}:ASCII文字に一致する文字クラス
  • これらを組み合わせることで、入力値のバリデーション(文字種チェックなど)を簡潔に実装できます
  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