2013-07-08 44 views
1

我需要用正則表達式捕獲標記(HTML)在紅寶石(是的,我知道這是不好的,但我還沒有找到任何替代品,因爲原始標記是非常糟糕的格式)。 所以我有一個原文件看起來像這樣:在HTML評論與正則表達式捕獲內容

<h3 class="grey" style="font-size:18pt;"><!-- #BeginEditable "Title" -->Sample Title 
<!-- #EndEditable --></h3> 



<!-- #BeginEditable "Text" --><p>Foo bar </p> 
<p> 
</p><ul> 
<li>Sample li</li> 
<p></p> 
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px"> 
<p>Foo bar<span class="blue">Lorem ipsum dolor</span></p></blockquote> 
<!-- #EndEditable --> 

正如我不能改變原有的標記(!而且沒有意義的類的話),我決定嘗試一些正則表達式魔術。

我試圖捕捉評論中的內容,象這樣一個正則表達式:

<!-- #BeginEditable "(Title|Text|Foo)" -->\s*([^!]+)\s*<!-- #EndEditable --> 

顯然,當有標記內!,但使用.*捕捉到裏面的內容總是在失敗有失敗是html標記(純文本被捕獲)。我在這裏想念什麼嗎? (?即帶負先行版)

+0

使用'nokogiri'。這是完美的寶石。 –

+0

我懷疑nokogiri會有幫助,因爲我沒有任何容器可以匹配,只有標記中的容器註釋。傑瑞的回答雖然做到了! – Figedi

回答

0

我想你可以使用一個正向前查找的:

<!-- #BeginEditable "(Title|Text|Foo)" -->(.*?)(?=<!-- #EndEditable -->) 

這裏有rubular演示。

注意我使用了m修飾符使點與換行匹配。點將因此匹配每個字符,直到找到前面的<!-- #EndEditable -->

+0

真棒,那就是訣竅! – Figedi

+0

@FelixK。很高興聽到! :) – Jerry