読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

正規表現をエスケープする

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"で囲むだけなのか。"\"でエスケープしまくるのかと期待してたのに。まぁいいけど。