我有一个字符串:
<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>
答案 0 :(得分:1)
.*
贪婪,尽可能匹配。
.*?
很懒,会尽可能少地匹配。
tl; dr:改为使用.*?
。
也就是说,正则表达式不是HTML解析器,而是we've been through this many times before
答案 1 :(得分:1)
您有两个问题:
class="marked"
与表达式开头的<td
相同的标记相关联。.*<\/td>
是贪婪的,并且会一直匹配到最后一次结束</td>
。这种模式将解决这两个问题:
/<td[^>]+class="marked">.*?<\/td>/si