Groovy(java?)の正規表現が便利(カネムーメモ: 正規表現、先読みと後読み より)

Groovy

こういうのを見ると、無駄な正規表現処理をコーディングしていたんだなぁと感じる。

カネムーメモ: 正規表現、先読みと後読み

以下のような文字列から、数字2桁の文字を置換する場合について。

あいうえお012かきく34けこなに56ぬね789の

いつも以下のようなソースを書いていました。

def text = "あいうえお012かきく34けこなに56ぬね789の"
text = text.replaceAll(/([^d])(dd)([^d])/, '$1$3')
println text

結果は「あいうえお012かきくけこなにぬね789の」。

どうしても前方の数値でない部分と、後方の数値でない部分が置換対象に入り込んでしまうので、しょうがなく置換後文字列を"$1$3"として処理していました。

どうやら以下のようにしたら、この問題が解決する模様。

def text = "あいうえお012かきく34けこなに56ぬね789の"
text = text.replaceAll(/(?<=[^d])(dd)(?=[^d])/, '')
println text

結果は同様に「あいうえお012かきくけこなにぬね789の」。

いや、知らなかった…Javaの正規表現なのかGroovy限定の正規表現なのかは分かりませんが、いずれにしても強力。勉強になったー。

Groovy