匹配除给定字符串之外的所

时间:2010-11-07 22:05:31

标签: php regex

好的,我尝试了2个小时。现在是时候在stackoverflow上询问某人了。

我有这个来源html:

<div class="post_main">
Post Content (has HTML)
</div><div class="post_email">[...]
Other Stuff
<div class="post_main">
Post Content (has HTML)
</div><div class="post_email">[...]
Other Stuff
<div class="post_main">
Post Content (has HTML)
</div><div class="post_email">[...]

等等。 我希望在每个帖子内容之前添加“Something”。

要这样做我正在使用preg_replace,但它不起作用。因为我实际上正在使用

'|<div class="post_main">(.*)</div><div class="post_email">|s

作为正则表达式,

"</div><div class="post_email">"

从(。*)吃掉,我只有一次替换而不是3次。

现在,我怎么能得到这个preg匹配:

匹配everthing包含换行符,但排除给定字符串(在这种情况下:

"</div><div class="post_email">")

非常感谢你。

2 个答案:

答案 0 :(得分:2)

function addSomething($str,$add) {
  $find = '/(<div class=\"post_main\">)/';
  $replace = '$1' . $add;
  return preg_replace($find, $replace, $str);
}

答案 1 :(得分:2)

来自mistabell的回答非常适合您的情况。 如果你仍然想按照自己的方式去做 - 只需加一点'?'在'*'后面。 我的意思是这样的:

'|<div class="post_main">(.*?)</div><div class="post_email">|s

它调用延迟量词,它使你的正则表达式不那么贪心。