2011-11-25 53 views
0

我想獲取兩個標記之間的文本。ruby​​正則表達式掃描多個匹配

<b> foo</b>bar<br/> =>bar

我嘗試使用'<b>asdasd</b>qwe<br/>'.scan(/<b>[a-zA-Z0-9]*<\/b>(.*)<br\/>/),它給了我正確的結果。

但是當我試試這個:

'<b>exclude</b>op1<br/>exclude 2<b>exclude</b>op2<br/>exclude 2<b>exclude</b>op3<br/>exclude 2'.scan(/<b>[a-zA-Z0-9]*<\/b>(.*)<br\/>/) { |ele| 
puts ele 
} 

它的第一<b>標籤和最後<br/>標籤相匹配,並返回整個字符串我期待的比賽

+1

相關問題:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self- contained-tags –

回答

8

變化(.*)的數組(.*?)使它ungreedy

/<b>[a-zA-Z0-9]*<\/b>(.*?)<br\/>/ 

測試

[2] pry(main)> '<b>exclude</b>op1<br/>exclude 2<b>exclude</b>op2<br/>exclude 2<b>exclude</b>op3<br/>exclude 2'.scan(/<b>[a-zA-Z0-9]*<\/b>(.*?)<br\/>/) { |ele| 
[2] pry(main)* puts ele 
[2] pry(main)* } 
op1 
op2 
op3 
+2

你不能用正則表達式解析HTML。 – Reactormonk

9

而不是使用上的HTML使用正則表達式引入nokogiri的:

Nokogiri::HTML.fragment(str).css('b').each do |b| 
    puts b.next.text 
end