- Home ›
- Java正規表現の使い方 ›
- オプション修飾子 ›
- HERE
修飾子の種類と指定方法
修飾子を指定することで正規表現の基本動作を変更することができます。まずは修飾子の指定方法から確認していきます。
compileメソッドの引数に指定
1つ目の方法はパターンオブジェクトを作成する時に、compileメソッドの引数に指定することです。
compile public static Pattern compile(String regex, int flags)
指定されたフラグを使用して、指定された正規表現をパターンにコンパイルします。 パラメータ: regex - コンパイルされる表現 flags - マッチフラグ。CASE_INSENSITIVE、MULTILINE、DOTALL、UNICODE_CASE、CANON_EQ、 UNIX_LINES、LITERAL、および COMMENTS を含めることのできるビットマスク 例外: IllegalArgumentException - 定義済みマッチフラグに対応するビット値以外の値が flags に設 定されている場合 PatternSyntaxException - 表現の構文が無効である場合
2番目の引数に修飾子を指定します。指定可能な値は次の通りです。
Pattern.CASE_INSENSITIVE 大文字と小文字を区別しないマッチングを有効にする Pattern.MULTILINE 複数行モードを有効にする Pattern.DOTALL DOTALL モードを有効にする Pattern.UNICODE_CASE Unicode に準拠した大文字と小文字を区別しないマッチングを有効にする Pattern.CANON_EQ 正規等価を有効にする Pattern.UNIX_LINES Unix ラインモードを有効にする Pattern.LITERAL パターンのリテラル構文解析を有効にする Pattern.COMMENTS パターン内で空白とコメントを使用できるようにする
例えばPattern.CASE_INSENSITIVEを指定すると、大文字小文字を区別しないようになります。具体的には次のように記述します。
String regex = "good"; Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
各修飾子は同時に指定することが可能です。複数の修飾子を指定する場合は"|"で区切り続けて指定して下さい。具体的には次のように記述します。
String regex = "good"; Pattern p = Pattern.compile(regex, Pattern.MULTILINE | Pattern.DOTALL | Pattern.UNIX_LINES);
埋め込みフラグで指定
2つ目の方法はパターンの中で埋め込みフラグを使用する方法です。埋め込みフラグは(?X)の形式で次のようなものが用意されています。
(?i) Pattern.CASE_INSENSITIVE (?m) Pattern.MULTILINE (?s) Pattern.DOTALL (?u) Pattern.UNICODE_CASE (?d) Pattern.UNIX_LINES (?x) Pattern.COMMENTS
例えば(?i)はcompileメソッドの引数でPattern.CASE_INSENSITIVEを指定したのと同じ意味を持ちます。
埋め込みフラグはパターンの中に記述します。例として次のように記述します。
"(?i)hello" "he(?i)llo"
埋め込みフラグは記述された以降のパターンに効果が出ます。"(?i)hello"の場合はパターンの先頭に"(?i)"が記述されていますのでそれ以降の全てにおいて"(?i)"が有効です。よって次のような文字列にマッチします。
"hello" "Hello" "heLLo" "HELLO"
それに対して"he(?i)llo"はパターンの途中に"(?i)"が記述されています。その為、このフラグが有効になるのは"llo"の部分だけです。よって次のような文字列にマッチします。
"hello" "heLLo" "hellO"
また途中で埋め込みフラグの効果を無効にしたい場合は(?X)に対して(?-X)を記述します。例えば"(?i)"であれば"(?-i)"を使います。
"(?i)he(?-i)llo"
この場合、"(?i)"から"(?-i)"までの部分に埋め込みフラグが有効となります。よって次のような文字列にマッチします。
"hello" "Hello" "HEllo"
2つの方法のいずれかを使用することで正規表現の基本的な動作を変更することが可能です。では次のページ以降で各修飾子の使い方について確認していきます。
( Written by Tatsuo Ikura )