正規表現をエスケープする
Pattern#quote()で、文字列中の「正規表現で有意な文字」を、全て無効化した正規表現文字列を生成できます。
String regex = "^[a-z]+$"; // 正規表現文字列 String escaped = Pattern.quote( regex ); // 正規表現をエスケープ // エスケープした文字列を正規表現とした場合、 // もとの「正規表現を示す文字列」そのものにマッチする。 // 「+」や「^」など有意な文字列は全て無効。 for ( String pattern : new String[] { regex, escaped } ) { System.out.println( "pattern : " + pattern ); System.out.println( " abc : " + "abc".matches( pattern ) ); System.out.println( " ^[a-z]+$ : " + "^[a-z]+$".matches( pattern ) ); System.out.println( ); }
実行結果です。
pattern : ^[a-z]+$ abc : true ^[a-z]+$ : false pattern : \Q^[a-z]+$\E abc : false ^[a-z]+$ : true
なんだ、"\Q"と"\E"で囲むだけなのか。"\"でエスケープしまくるのかと期待してたのに。まぁいいけど。