rubyでhtmlのタグを取り除くプログラムを再発明してみた(ネストしたタグもそれなりに対応)
えーっと。未来の自分への贈り物です
同じようなコードは3度ぐらい書いた記憶があります。。。
こうすればもっと奇麗だよ!!!はありがたいのですがノーサンキューです(あまり興味がない)
こうすればもっと効率的 or 速いよ!! ってかバグあるじゃん!!!ってか正規表現でもかけちゃうぜ!!!はウェルカムです
erace_all を trueにすると中身も消しちゃいます
def remove_html_tag(html,tag,erace_all = false) poss = [] last_hit = 0 next_check_start = 0 str = html.clone strori = str.clone loop do pos,size=nil,nil if pos = str =~ /(<#{tag}.*?>)/ size = $1.size else break end last_hit = next_check_start + pos next_check_start = last_hit + size poss << last_hit str = str[pos+size..-1] end poss.reverse! str = strori poss.each do |pos| str1 = str[0..pos-1] str2 = str[pos..-1] str1 = '' if pos == 0 if erace_all str2.sub!(/<#{tag}.*?>(.*?)<\/#{tag}>/mi){''} else str2.sub!(/<#{tag}.*?>(.*?)<\/#{tag}>/mi){$1} end str = str1 + str2 end return str end