2012-10-14 68 views
6

我想抓取<tag></tag>標記對之間的任意值的內容。使用正則表達式匹配多個組的懶惰(未經審查)

<tag> 
This is one block of text 
</tag> 

<tag> 
This is another one 
</tag> 

正則表達式我想出了是

/<tag>(.*)</tag>/m

雖然,這似乎是貪婪的,並捕獲封閉括號內的一切,直到最後</tag>。我希望它儘可能地慢,這樣每當它看到一個結束標記時,它就會將它視爲一個匹配組並重新開始。

如何編寫正則表達式,以便能夠在給定場景中獲得多個匹配項?

我已經包括了什麼,我在下面的鏈接我描述

http://rubular.com/r/JW5M3rnqIE

注樣本:這不是XML,也不是真正基於任何現有的標準格式。我不需要任何複雜的東西,像一個完善的庫,它有一個很好的解析器。

+1

一個更重要的是,通過使用regexen XML的,[你在玩Ctulthu(http://stackoverflow.com/questions/1732348)。後來,不要說你沒有受到警告。 –

+0

@BorisStitnicky,這裏不需要貨物崇拜。正則表達式不是遞歸的,就是這樣。 – nalply

+2

...每當你試圖用正則表達式解析HTML時,邪惡的孩子會哭泣處女的血液,俄羅斯黑客就會打開你的網絡應用程序......重新演繹分析的歌曲將消耗mor的聲音從這裏我可以看到它可以看到talî̩t͎̩͔̋它是美麗的最後吸鼻的男人的謊言所有我愛你所有我失去了 –

回答

11

轉到與正則表達式模式:

/<tag>(.*?)<\/tag>/im 

懶惰(非貪婪)是.*?,不.*

要找到多個匹配,使用:

讓你知道
string.scan(/<tag>(.*?)<\/tag>/im) 
+0

也請看看http:// www。 regular-expressions.info/ruby.html –

+0

謝謝!我沒有想過嘗試使用正則表達式的紅寶石 – MxyL

+0

@Keikoku - 不客氣。祝你好運! –