正则表达式否定那些具有class =“image”的div

时间:2013-06-12 07:32:04

标签: php regex html-parsing regex-negation

我有一个字符串,其中我只想获得那些没有类image的DIV标签的内容。

我正在使用这个正则表达式:

#<\s*?div\b[^>]*class="[^image]">(.*?)</div\b[^>]*>#s

但它会转义所有DIV标记,而不仅仅是那些具有类image

的标记

2 个答案:

答案 0 :(得分:1)

使用DOM parser可能会更好。

无论如何,这是一个正如你所追求的正则表达式:

<div[^>]+class="(?!(?:.+ )?image(?: .+)?")([^"]+)"

演示:http://rubular.com/r/eekxdFdmFR

答案 1 :(得分:0)

表达式[^image]只会找到那些不包含im等字母的类。也许negative lookahead可以做到这一点:

#<\s*?div\b[^>]class=\"(?:(?!image).)*\">(.?)*>#s

它也将忽略class="images"等,但我希望这是一个良好的开端。 :)

PS:我不知道最后]是否有必要,但我的正则表达式中缺少它。