2013-08-28 86 views
1

我有一些可能或不可能有換行符的單個字符串中的html。它可能是這個樣子:正則表達式獲取標籤前一個和下一個

<table><tr><th>blah1</th></tr><tr><input class="inputClass"><span>open&lt;pfelclose/>pfelsingle'pfeldouble"pfel</span></input></tr></table> 

很好的格式化的:

<table> 
    <tr> 
    <th>blah1</th> 
    </tr> 
    <tr> 
    <input class="inputClass"> 
     <span>open&lt;pfelclose/>pfelsingle'pfeldouble"pfel</span> 
    </input> 
    </tr> 
</table> 

我想搜索這個字符串

(open<pfel|close/>pfel|single'pfel|double"pfel) 

而且還得到兩個開放標籤前後兩個親密之後的標籤。所以我想獲得這樣的:

<input class="inputClass"><span>open&lt;pfelclose/>pfelsingle'pfeldouble"pfel</span></input> 

我不能假設輸入或跨度會在那裏,我也不能假設有一定之前兩個​​標籤或後兩個標籤。

我的嘗試似乎總是拉弦的整個啓動:

.*[<]{0,2}?(open<pfel|close/>pfel|single'pfel|double"pfel)[/>]{0,2}? 
+6

永遠不要用正則表達式解析html。改用HTML解析器。 – alecxe

+0

我很喜歡,但是我使用的所有html解析器都是單引號,雙引號和lt gt符號。 – tophersmith116

+1

You _want_' "'成爲''',對嗎?如果沒有,只需在事後用'"'替換'''。 – Taymon

回答

2

與你的情況的問題在於,要找到匹配的標籤(在打開和關閉標籤之前,文本你」後,重新搜索)。正則表達式不能這樣做。它不能解析像HTML這樣的嵌套結構。正則表達式解析常規語言,HTML不是其中之一。先進的正則表達式引擎有時可能被強迫做差不多你在這裏要做的事情,但它通常比它的價值更麻煩。

您在評論中的解決方案可能是正確的。使用正則表達式查找您要查找的內容,然後使用HTML解析器來獲取所需內容。

相關問題