A Day in the Life

正規表現の先読みの使い道

どんぞこ日誌のsplitに(?=regexp)を渡すを読んで。
うわー、先読みにそんな使い方があったのか…。もちろん知ってもいなかったし全然思いもつかなかったなぁ…。いままで自分が"bbdd\n"を分割しろつわれたらRubyなら間違いなく

"<aa>bb<cc>dd\n<ee>".scan(/<[^<]*/)
 #=> ["<aa>bb", "<cc>dd\n", "<ee>"]

ってやってるな…。他の言語ならもっとキタナイ正規表現書いていただろうなー。
んでこの先読みを使った正規表現、

'onon'.gsub(/(?=on)/,'k')
 #=> "konkon"

とかできてわーらくちん。いままでなら

'onon'.scan('on').map{|s| 'k' + s}.join
 #=> "konkon"

とやってた所だな…。これよりスマートな方法結構ありそうだけど。ってここまで書いて、普通に

'onon'.gsub('on','kon')
 => "konkon"

ってやれよ!と思った(毎度おなじみおちなし)

記事の一覧 >