$content = '
<p>
这里是帖子的内容。
</p>
<p>
<img src="/upload/image/20150429/1430288803746265.gif" title="1430288803746265.gif" alt="gif-0009.gif"/>
</p>
<p>
<span>这里是帖子的其他内容</span>
</p>
<pre class="brush:cf;toolbar:false">$user = $this->session->get('auth');
$baa_id=(int)$_POST['baa_id'];
$time = date('Y-m-d H:i:s');
</pre>
<p>
<span style="color: rgb(128, 128, 128); line-height: 16px;">这里是帖子的其他内容</span>
</p>
';
preg_match_all('#<p[^>]*>([^(?:</?p>)]*)</p>#',$content,$matches);
print_r($matches);
匹配的结果:
Array( [0] => Array ( [0] => <p> 这里是帖子的内容。 </p> ) [1] => Array ( [0] => 这里是帖子的内容。 ) )
为什么p标签之间有img span等其他标签的内容不能被匹配呢?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
已更新,
preg_match_all('#<p(\s*|\s[^>]*)>([\s\S]*?)</p>#',$content,$matches);这是完整的写法,你的问题在于你错误的以为
[^(?:</?p>)]代表的是除<p>或者</p>标签以外的匹配。实际上[^(?:</?p>)]等同于[^?:</?p>]这样看就明白了吧不用正则,
xpath搞定