2014-01-20 189 views
0

我有這樣的字符串:如何獲得最近關閉標籤

<tr><td>abc</td><td style="any" class="marked">dfg</td><td>hij</td></tr> 

,我試圖通過這樣的正則表達式來獲得標誌着TD標籤:

/<td.*class="marked.*<\/td>/si 

,但得到這樣的:

<td>abc</td><td style="any" class="marked">dfg</td><td>hij</td> 

我應該如何更改我的正則表達式來獲得這樣的字符串?

<td style="any" class="marked">dfg</td> 
+1

您應該看到[這個答案](http://stackoverflow.com/a/1732454/1864610) – 2014-01-20 16:26:37

回答

1

你有兩個問題:

  1. 你表達不保證class="marked"是同一個標籤爲<td在相關表達的開始。
  2. .*<\/td>最後是貪婪的,並且會一直匹配到最後一次關閉</td>

這種模式將解決這兩個問題:

/<td[^>]+class="marked">.*?<\/td>/si 
+0

正如提到的@ h2ooooooo他回答,用正則表達式解析HTML通常是一個壞主意。只有在您可以對標記進行某些保證時纔可以接受。例如,如果HTML與您的示例中的HTML不是非常相似,則此模式將失敗,並且會標記爲'class =「foo標記爲」',或出於其他原因。 – jmar777

+0

jmar777:是的,我知道正則表達式對html任務不太好。感謝你的回答 – Vito