Php 匹配除给定字符串以外的所有内容

Php 匹配除给定字符串以外的所有内容,php,regex,Php,Regex,好的,我试了两个小时。是时候问问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_em

好的,我试了两个小时。是时候问问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">[...]

帖子内容(包含HTML)
[...]
其他东西
帖子内容(包含HTML)
[...]
其他东西
帖子内容(包含HTML)
[...]
等等。 我想在每个帖子内容之前加上“东西”

为此,我使用preg_replace,但它不起作用。因为我用的是

'|<div class="post_main">(.*)</div><div class="post_email">|s
”|(.*)|s
作为正则表达式

"</div><div class="post_email">"
“”
是从(*)吃的,我只有一个替代品,而不是3个

现在,我如何获得这场预赛:

匹配包含换行符的所有内容,但排除给定字符串(在本例中:

"</div><div class="post_email">")
“”)
?

非常感谢。

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

mistabell的回答完全适合您的情况。 如果你还想按自己的方式做,只需在“*”符号后加上一个小“?”。 我的意思是:

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

它调用惰性量词,使您的regexp不那么贪婪。

来自mistabell的答案完全适合您的情况。 如果你还想按自己的方式做,只需在“*”符号后加上一个小“?”。 我的意思是:

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

它称为懒惰量词,使您的regexp不那么贪婪。

非常感谢,我刚刚遇到了一个类似的问题,我用那个惊人的“?”;)解决了它。)非常感谢,我刚刚遇到了一个类似的问题,我用那个惊人的“?”;)解决了它