0

エビのメソッドを使用して、正規表現で HTML タグを取得してフォーマットしようとしています。私はこれまでのところこれを持っています:

def format(pdf, string)
  regex_string = "\n|" +
                 "<b>(.*)<\/b>|" +
                 "<h3>(.*)<\/h3>|" +
                 "<strong>(.*)<\/strong>|" +
                 "[^<\n]+"
  regex = Regexp.new(regex_string, Regexp::MULTILINE)
  tokens = string.gsub("\n", " ").gsub(/<br\s*\/?>/, "\n").scan(regex)
  tokens.each do |breaker|
    case breaker
    when "<b>(.*)<\/b>", "<strong>(.*)<\/strong>"
      pdf.text breaker.to_s, :size => 10
    when "<h3>(.*)<\/h3>"
      pdf.text breaker.to_s, :size => 16
    else
      pdf.text breaker.to_s, :size => 10, :leading => 1
    end
  end
end

私の正規表現は間違っていると思いますが、それがどうあるべきかわかりません。その方法でかなり奇妙な配列の出力が得られます。どんな助けでもいいです!

アップデート

(.*)Rubular で適切なタグを取得するように変更し(.*?)ましたが、上記の HTML タグ以外のすべての出力が3 つになって[nil, nil, nil]います。

4

1 に答える 1

1

実際に自分でテストしないと、空の配列要素を操作している可能性があります。次のようなものを試してください:

tokens = string.gsub("\n", " ").gsub(/<br\s*\/?>/, "\n").scan(regex).compact

一般的な HTML 解析では、Nokogiri がおそらく最良のオプションです (Rails の場合)。

于 2013-09-24T07:08:38.613 に答える