すがブロ

sugamasaoのhatenablogだよ

正規表現で間の文字列を抜き出したい

例えばタグの値とか

<p>test</p>

test部分だけを抜き出したい!><
そういうときってどんな風に正規表現を書けば良いだろう。とりあえずこんな風に書いたんだけど、なんかダサい。

>> str = "<p>test</p>"
=> "<p>test</p>"
>> str =~ /<p>/
=> 0
>> $' =~ /<\/p>/
=> 4
>> puts $`
test

と、ここまで書いてからリファレンスをまじまじと見ていたら以下のような記述を発見。

$+
現在のスコープで最後に成功した正規表現のパターンマッチでマッチした中で最後の括弧に対応する部分文字列です。最後のマッチが失敗していた場合には nil。いくつかある選択型のパターンのどれがマッチしたのか分からない時に便利 (覚え方: be positive and forward looking.)

ふむふむ。最後の括弧とはいわゆるグルーピングのことではないか?
というわけで、以下のようにしてみた。

>> str = "<p>test</p>"
=> "<p>test</p>"
>> str =~ /<p>(.+)<\/p>/
=> 0
>> puts $+
test

おおぉ!とれた!
なるほど、こうやるとかっこ良く値を取得できるのかー!