2016-06-10 64 views
-2

我想創建以下與字符串一個簡單的正則表達式的問題

<tr> 
     <td colspan=2> 
     <p><b> 
     CITY Head: 
     <span > 
     <span >##CITY##</span> 
     <o:p></o:p> 
     </span> 
     </b> 
     </p> 
     </td> 
     <td colspan=1> 

我想找到有城頭上在它整個TD塊正則表達式。我可以使用以下正則表達式。

<td(.*)[\s](.*)[\s]+CITY Head+(.*)[\s](.*)[\s](.*)[\s](.*)[\s](.*)[\s](.*)[\s](.*)[\s]+<\/td> 

基本上我不得不寫(.*)[\s]爲上方和下方的CITY頭的所有行。但在不同的情況下,這可能會有所不同。

因此,我正在尋找一種將所有(.*)[\s]合併爲獨立於行數的一般方法。

+2

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – HRgiger

+1

但是,正如bobince所說:*「那麼繼續,解析HTML與正則表達式,如果你必須的,它只是破碎的代碼,而不是生命和死亡。「* –

+0

是的,遵循bobince的建議,最終可以研究脾氣暴躁的代幣。然後,在性能方面存在問題,繼續研究展開循環技術。最後,只要意識到一個DOM解析器就更容易了。 –

回答

0

[\s\S]*?將匹配空白(\s)或非空白(\S)的最小可能數(* = 0以上,? = ungreedy)(即任何)字符。

<td((?!<\/?td)[\s\S])*?CITY Head[\s\S]*?<\/td> 

斷言(?!<\/?td)確保CITY Head前的部分不跨越多個表格單元格。

但是使用正則表達式不是解析HTML的可靠方法。特別是,如果HTML包含語法錯誤,則此正則表達式可能會導致錯誤的結果。

+0

上述正則表達式將採用所有在「CITY Head」之前出現的所有TD。正則表達式的設計必須在CITY Head進入解析之前只有第一個TD。 – Invisible

+0

確實,應該測試過。我添加了一個負面的斷言來解決它。這就是爲什麼我通常回答這些問題的原因:「你不能用正則表達式解析HTML」;) –

+0

完美。非常感謝。 :-) – Invisible