使用正则表达式选择不包含单词的字符串模式

时间:2013-09-12 15:56:52

标签: php html regex

如何从3个图像标记组成的字符串中选择不包含的字符串?

 id="img_menu":

的字符串:

 <img class="alignnone " blabla />
  <img class="dddd " blabla />
 <img  style="blalbla"  id="img_menu"/>

这个正则表达式选择所有标记:

    /<img*[^>]*[^>]./

但我没有设法添加正确的代码来选择第3个img!请帮忙。

2 个答案:

答案 0 :(得分:2)

在while / global循环中使用multi-line / not-dot-all模式。

 ^(?!.*id=\"img_menu\").*$

你可以这样做,因为它只是一个字符串,而不是html。

答案 1 :(得分:1)

这对我有用,虽然看起来不是我的强项,所以可能有一种更有效的方法:

<强> JS

var str = '<img class="alignnone " blabla />\n\
<img class="dddd " blabla />\n\
<img  style="blalbla"  id="img_menu"/>';
str.match(/(?!<img.+?id="img_menu".*?\/>)<img.+?\/>/g);
//["<img class="alignnone " blabla />", "<img class="dddd " blabla />"]

Fiddle

<强> PHP

<?php
$code = '<img class="alignnone " blabla />
<img class="dddd " blabla />
<img  style="blalbla"  id="img_menu"/>';
$newStr = preg_replace('/(?!<img.+?id="img_menu".*?\/>)<img.+?\/>/','[matched_img]',$code);
var_dump(htmlentities($newStr));
?>

输出:

string(92) "[matched_img] [matched_img] <img style="blalbla" id="img_menu"/>"