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

JavaのPatternクラスflags()メソッドとは?使い方をサンプルコード付きで解説

Patternクラスとは

java.util.regexパッケージのPatternクラスは、正規表現をコンパイルした結果を表すクラスです。あらかじめ正規表現をオブジェクトとして保持しておくことで、繰り返しのマッチング処理を高速かつ効率的に行えるようになります。

compile()メソッドのシグネチャ

このクラスのcompile()メソッドは、正規表現を表す文字列を受け取り、Patternオブジェクトを返します。基本的なシグネチャは以下のとおりです。

static Pattern compile(String regex)

また、このメソッドにはマッチングの動作を制御するための「フラグ」をint値として指定できるオーバーロード版も用意されています。

static Pattern compile(String regex, int flags)

Patternクラスが提供する主なフラグ一覧

No.フィールド名と説明
1CANON_EQ
正準等価(canonical equivalence)が成立する2文字のみを一致とみなします。アクセント記号などの表記の違いを吸収してマッチングできます。
2CASE_INSENSITIVE
大文字・小文字を区別せずにマッチングを行います。
3COMMENTS
パターン内に空白文字やコメント(#以降の記述)を含められるようになります。複雑な正規表現を読みやすく整理したい場合に便利です。
4DOTALL
DOTALLモードを有効にします。「.」というメタ文字が、改行文字を含むすべての文字に一致するようになります。
5LITERAL
パターンのリテラル解析を有効にします。入力シーケンス中のメタ文字やエスケープシーケンスがすべて通常の文字として扱われます。
6MULTILINE
マルチラインモードを有効にします。「^」と「$」がそれぞれ行頭・行末にも一致するようになり、入力全体を複数行のテキストとして扱えます。
7UNICODE_CASE
Unicode対応の大文字・小文字の折りたたみ(case folding)を有効にします。CASE_INSENSITIVEと組み合わせて使用すると、Unicode文字の大文字・小文字の両方にマッチします。
8UNICODE_CHARACTER_CLASS
定義済み文字クラスおよびPOSIX文字クラスのUnicode版を有効にします。
9UNIX_LINES
Unixラインモードを有効にします。改行文字としては「\n」のみが認識されます。

flags()メソッドとは

flags()メソッドは、現在のPatternオブジェクトに設定されているフラグをint値として返します。どのフラグが有効になっているかを実行時に確認したい場合に役立ちます。

flags()メソッドの使用例

以下の例では、COMMENTSフラグを使ってコメント付きの正規表現をコンパイルし、生年月日(MM/DD/YYYY形式)の妥当性を検証しています。最後にflags()メソッドで設定済みのフラグを出力します。

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

public class COMMENTS_Example {
   public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter your name: ");
      String name = sc.nextLine();
      System.out.println("Enter your Date of birth: ");
      String dob = sc.nextLine();
      // MM/DD/YYYY形式の日付を受け付ける正規表現
      String regex = "^(1[0-2]|0[1-9])/ # For Month\n"
           + "(3[01]|[12][0-9]|0[1-9])/ # For Date\n"
           + "[0-9]{4}$ # For Year";
      // Patternオブジェクトの生成(COMMENTSフラグを指定)
      Pattern pattern = Pattern.compile(regex, Pattern.COMMENTS);
      // Matcherオブジェクトの生成
      Matcher matcher = pattern.matcher(dob);
      boolean result = matcher.matches();
      if(result) {
         System.out.println("Given date of birth is valid");
      } else {
         System.out.println("Given date of birth is not valid");
      }
      System.out.println("Flag used: "+ pattern.flags());
   }
}

実行結果

Enter your name:
Krishna
Enter your Date of birth:
09/26/1989
Given date of birth is valid
Flag used: 4

まとめ

実行結果の「Flag used: 4」は、COMMENTSフラグ(値は4)がパターンに設定されていることを示しています。このようにflags()メソッドを使えば、Patternオブジェクトに適用されたフラグを簡単に確認できます。複数のフラグを組み合わせる場合はビットごとのOR演算子(|)で指定でき、戻り値と照合することで有効なフラグを判定することも可能です。

  1. 【Java】Pattern.compile()メソッドの使い方を具体例でわかりやすく解説

    java.util.regex パッケージに含まれる Pattern クラスは、正規表現をコンパイルした結果を表すクラスです。このクラスが持つ compile() メソッドは、正規表現を表す文字列を受け取り、その正規表現をコンパイルした Pattern オブジェクトを返します。 基本的な構文 compile() メソッドの最もシンプルな形式は、引数として正規表現の文字列を1つ受け取ります。 Pattern pattern = Pattern.compile(regex); コンパイル済みの Pattern オブジェクトから matcher() メソッドを呼び出すことで Matcher オブジェ

  2. JavaのMatcher.matches()メソッドとは?使い方をサンプルコード付きで解説

    java.util.regex.Matcherクラスは、正規表現を用いたさまざまなマッチ操作を実行するエンジンを表すクラスです。このクラスにはコンストラクタが用意されておらず、java.util.regex.Patternクラスのmatcher()メソッドを使ってオブジェクトを取得します。 matches()メソッドは、対象の文字列全体が、Patternオブジェクトの作成時に指定された正規表現パターンと一致するかどうかを判定します。一致する場合はtrueを返し、一致しない場合はfalseを返します。重要なポイントとして、このメソッドがtrueを返すためには、検索対象の領域全体がパターンに一致し