0

我正在尝试使用 prawn 的方法获取带有正则表达式的 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 标签中的输出之外的所有输出都是三个[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 回答