一个php的正则表达式匹配,结果感觉不太对?
PHP中文网
PHP中文网 2017-04-10 15:33:58
[PHP讨论组]

$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-&gt;session-&gt;get(&#39;auth&#39;); $baa_id=(int)$_POST[&#39;baa_id&#39;]; $time = date(&#39;Y-m-d H:i:s&#39;); </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等其他标签的内容不能被匹配呢?

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(2)
大家讲道理

已更新,preg_match_all('#<p(\s*|\s[^>]*)>([\s\S]*?)</p>#',$content,$matches);
这是完整的写法,你的问题在于你错误的以为[^(?:</?p>)]代表的是除<p>或者</p>标签以外的匹配。实际上[^(?:</?p>)]等同于[^?:</?p>]这样看就明白了吧

黄舟

不用正则,xpath搞定

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号