Index > 正規表現でテキスト置きかえ処理, 複数行にマッチさせる方法
Sat, January 16, 2010

正規表現でテキスト置きかえ処理, 複数行にマッチさせる方法

正規表現で、.(dot)は改行にはマッチしない。これがポイントだった。

そこで、Pattern.DOTALL オプションをつけて、regex をcompileしてやれば、 .(dot)は改行にもマッチする。

したがって、以下のような Testクラスがあった場合に、 改行含んだ状態のStringをコンストラクタに与えると、見事に複数行に渡っていても処理できる。

処理クラス

public class Test{
    public Test(String str){

        String regex="(<!DOCTYPE.*?>)";

        //Pattern pat=Pattern.compile(regex,Pattern.MULTILINE);
        Pattern pat=Pattern.compile(regex,Pattern.DOTALL);

        Matcher m=pat.matcher(str);

        if( m.find() ){
            System.out.println( m.group(1) );
        }
    }
}

Pattern.MULTILINEでなく、DOTALLを使うのがポイント

ただし、改行にマッチさせる正規表現を書けば、MULTILINEオプションを使っても同じことができるような気がするが、テストしていない。

サンプルデータ

public class Test2{
    public static void main(String[] args){
        String teststr="<!DOCTYPE book "
            +System.getProperty("line.separator")
            +" PUBLIC \"-//ObjectDesign//DTD sample//EN\" \"\">";
        new Test(teststr);
    }
}
 Twitter
follow me on Twitter
 Categories