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

2022-07-28Groovy

今まで無駄な正規表現処理をコーディングしていたことに気づきました。

学習前の正規表現

以下のような文字列から、数字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 限定の正規表現なのかは分かりませんが、いずれにしても強力。勉強になりました。

2022-07-28Groovy