2014-01-20 149 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