欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

一个php的正则表达式匹配,结果感觉不太对?

程序员文章站 2022-03-19 11:06:19
...

$content = '

这里是帖子的内容。

一个php的正则表达式匹配,结果感觉不太对?

这里是帖子的其他内容

$user = $this->session->get('auth');
                $baa_id=(int)$_POST['baa_id'];
                $time = date('Y-m-d H:i:s');
                

这里是帖子的其他内容

'; preg_match_all('#

]*>([^(?:?p>)]*)

#',$content,$matches); print_r($matches);

匹配的结果:

Array(
    [0] => Array
        (
            [0] => 

这里是帖子的内容。

) [1] => Array ( [0] => 这里是帖子的内容。 ) )

为什么p标签之间有img span等其他标签的内容不能被匹配呢?

回复内容:


$content = '

这里是帖子的内容。

一个php的正则表达式匹配,结果感觉不太对?

这里是帖子的其他内容

$user = $this->session->get('auth');
                $baa_id=(int)$_POST['baa_id'];
                $time = date('Y-m-d H:i:s');
                

这里是帖子的其他内容

'; preg_match_all('#

]*>([^(?:?p>)]*)

#',$content,$matches); print_r($matches);

匹配的结果:

Array(
    [0] => Array
        (
            [0] => 

这里是帖子的内容。

) [1] => Array ( [0] => 这里是帖子的内容。 ) )

为什么p标签之间有img span等其他标签的内容不能被匹配呢?

已更新,preg_match_all('#

]*)>([\s\S]*?)

#',$content,$matches);
这是完整的写法,你的问题在于你错误的以为[^(?:?p>)]代表的是除

>或者

标签以外的匹配。实际上[^(?:?p>)]等同于[^?:?p>]这样看就明白了吧

不用正则,xpath搞定

相关标签: php