- Home ›
- Java正規表現の使い方 ›
- オプション修飾子 ›
- HERE
DOTALLモード
広告
compileメソッドの引数としてPattern.DOTALLを指定するか、埋め込みフラグで(?s)を使用するとメタ文字の"."が行末記号にもマッチするようになります。
DOTALL public static final int DOTALL
DOTALL モードを有効にします。 DOTALL モードでは、表現 . は行末記号を含む任意の文字にマッチします。デフォルトでは、この表 現は行末記号にマッチしません。 DOTALL モードは、埋め込みフラグ表現 (?s) を使用して有効にすることもできます。(s は 「single-line (単一行)」モードのニーモニック。Perl ではこう呼ばれている。)
次のように記述します。
String regex = "pattern"; Pattern p = Pattern.compile(regex, Pattern.DOTALL);
埋め込みフラグ表現 (?s)を使って次のようにパターン内に記述することもできます。
String regex = "(?s)pattern";
具体的な例で考えてみます。次のようなパターンを定義しました。
"width.height"
ターゲット文字列毎に上記のパターンにマッチするかどうかの一覧が下記となります。
○ width height × width¥nheight
では先ほどのパターンに"(?s)"を付けます。
"(?s)width.height"
"(?s)"が付けられるとメタ文字の"."が行末記号にもマッチするようになります。ターゲット文字列毎に上記のパターンにマッチするかどうかの一覧が下記となります。
○ width height ○ width¥nheight
サンプルプログラム
では実際に試してみます。
import java.util.regex.Pattern;
import java.util.regex.Matcher;
class JSample4_1{
public static void main(String args[]){
String str1 = "width height";
String str2 = "width¥nheight";
String regex1 = "width.height";
Pattern p1 = Pattern.compile(regex1);
String regex2 = "(?s)width.height";
Pattern p2 = Pattern.compile(regex2);
String regex3 = "width.height";
Pattern p3 = Pattern.compile(regex3, Pattern.DOTALL);
System.out.println("パターン : " + regex1);
check(p1, str1);
check(p1, str2);
System.out.println("パターン : " + regex2);
check(p2, str1);
check(p2, str2);
System.out.println("¥nPattern.compile(regex, Pattern.DOTALL)");
System.out.println("パターン : " + regex3);
check(p3, str1);
check(p3, str2);
}
private static void check(Pattern p, String target){
Matcher m = p.matcher(target);
if (m.find()){
System.out.println("○ " + target);
}else{
System.out.println("× " + target);
}
}
}
ではコンパイルを行った上で実行してみます。
( Written by Tatsuo Ikura )
JavaDrive