hpricot:Hpricot::Elements#wrap
>> require "hpricot" => true >> doc = Hpricot('<a href="http://www.foo.org/">foo</a><a href="http://www.bar.org/">bar</a><p>hoge</p>') => #<Hpricot::Doc {elem <a href="http://www.foo.org/"> "foo" </a>} {elem <a href="http://www.bar.org/"> "bar" </a>} {elem <p> "hoge" </p>}> >> doc.search("a[@href]").wrap(%{<div class="link"><div class="link_inner"></div></div>}) => #<Hpricot::Elements[{elem <a href="http://www.foo.org/"> "foo" </a>}, {elem <a href="http://www.bar.org/"> "bar" </a>}]> >> doc.to_html => "<div class=\"link\"><div class=\"link_inner\"><a href=\"http://www.foo.org/\">foo</a></div></div><div class=\"link\"><div class=\"link_inner\"><a href=\"http://www.bar.org/\">bar</a></div></div><p>hoge</p>"
なぜ wrap なのかと思ったが、マッチするものの前後を変更するからかな?