2013-09-24 42 views
0

我試圖用正則表達式來抓取HTML標籤來使用蝦的方法來格式化。我有這個到目前爲止:Rails和蝦:使用正則表達式來格式化

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 

我認爲我的正則表達式是錯誤的,但我無法弄清楚它應該是什麼。用這種方法我得到了一個很奇怪的數組打印輸出。任何幫助都很棒!

UPDATE

更改(.*)(.*?)得到了正確的標籤Rubular,但上面除了那些在HTML標籤的所有輸出都三五成羣[nil, nil, nil]

回答

1

沒有實際測試它自己,它可能在空數組元素上操作。嘗試是這樣的:

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

對於一般的HTML解析,引入nokogiri可能是最好的選擇,在那裏(Rails的):

+0

感謝您的建議。原來Nokogiri在我想要的方面更好。 –

+0

拍攝,如果我知道你對此開放,我會建議!在rails中解析HTML並不會好得多。我會更新我的答案以反映這一點。 – tyler