javaの正規表現を無効化して文字列検索をする方法

java

javaで文字列検索をする場合、文字列.matches("検索文字列")を使って検索することができます。
文字列.matches("正規表現")のような感じで正規表現を使って、検索することも可能です。

^*のような正規表現文字を検索する場合は、上記の方法ではできません。
今回は、^*のような正規表現文字を検索する方法を紹介します。

[スポンサーリンク]

正規表現で検索する方法については以前アップしました。
こちらを参照して下さい。文字列を正規表現で検索する

この章でやること

正規表現を無効化する方法を紹介します。

自正規表現を無効化して文字列検索をする

    /**
     * 正規表現を無効化する。
     */
    public static void main(String arg[]) {
        // 正規表現文字列
        String str = "^[a-z]*";
        String quote = Pattern.quote( "^[a-z]*" );

        // 正規表現で検索する。
        System.out.println( "正規表現で検索   : " + "test".matches( str ) );
        System.out.println( "正規表現で検索   : " + "^[a-z]*".matches( str ) );

        // 正規表現を無効にして検索する。
        System.out.println( "正規表現を無効にして検索   : " + "test".matches( quote ) );
        System.out.println( "正規表現を無効にして検索   : " + "^[a-z]*".matches( quote ) );
    }

実行結果

>実行結果
正規表現で検索 : true
正規表現で検索 : false
正規表現を無効にして検索 : false
正規表現を無効にして検索 : true

解説

7行目を見てください。Pattern.quoteで正規表現を無効化しています。
無効化しているため、本来ならtrueになりそうな、14行目はfalseとなります。
15行目はtrueとなります。

正規表現を有効にして検索した結果(10・11行目)では、全く逆の結果になります。

最後に

^*のような正規表現文字を検索する場面に出会うことは少ないと思います。
が、もしそのような場面に出会ったら、自前で無効化せずに、Pattern.quoteを使って無効化していきましょう!
それでは!