如何获得最近的结束标记

时间:2014-01-20 16:23:36

标签: html regex

我有一个字符串:

<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>

2 个答案:

答案 0 :(得分:1)

.*贪婪,尽可能匹配。

.*?很懒,会尽可能少地匹配。

tl; dr:改为使用.*?

也就是说,正则表达式不是HTML解析器,而是we've been through this many times before

答案 1 :(得分:1)

您有两个问题:

  1. 您的表达不保证class="marked"与表达式开头的<td相同的标记相关联。
  2. 最后的.*<\/td>是贪婪的,并且会一直匹配到最后一次结束</td>
  3. 这种模式将解决这两个问题:

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