sessanの日記

主に開発技術関連でお勉強したことをまとめていくサイトです。

正規表現で最短一致を扱う

(((あああ)))いいい(((ううう)))

のような文字列で(((と)))に囲まれている部分を全部空白文字に変換したい場合、単純に次のようにやってしまうと、残って欲しい「いいい」の部分もきえてしまう。

test = "(((あああ)))いいい(((ううう)))"

puts test.gsub(/\(\(\(.+\)\)\)/, '')

実行結果

       

空白になり、「いいい」が消えてしまう。これは、外側の(((と)))に「いいい」が囲まれているため。

これを防ぐためには、(((と)))に囲まれている最短の中身だけをマッチングさせる必要があり、それには正規表現の?をつかう。

test = "(((あああ)))いいい(((ううう)))"

puts test.gsub(/\(\(\(.+?\)\)\)/, '')

実行結果

いいい