请教个关于php正则表达式的问题。。。

有点特殊需求,需要一条表达式取出html中N个字段数据
比如

<div class="test">
    <p class="title">xxx</p>
    <p class="xas"></p><pclass="asd"></p>
    <p class="pic">xxx</p>
</div>
<div class="test">
    <p class="title">xxx</p>
    <p class="xas"></p><pclass="asd"></p>
    <p class="pic">xxx</p>
</div>

需要在html中取出title以及pic的数据 正则该怎么写呢?
中间的 <p class="xas"></p><pclass="asd"></p> 为不同的内容 但是这些内容没什么用 没必要抓取
刚入门 请教一下 谢谢

阅读 2.5k
4 个回答

不一定要用正则,有个东西叫做phpquery

let str = `
    <div class="test">
        <p class="title">xxx</p>
        <p class="xas"></p><pclass="asd"></p>
        <p class="pic">xxx</p>
    </div>
    <div class="test">
        <p class="title">xxx</p>
        <p class="xas"></p><pclass="asd"></p>
        <p class="pic">xxx</p>
    </div>
`

let results = str.match(/(title|pic)">.*?</g).map(e=>e.replace('">', ':')).map(e=>e.replace('<', ''))

结果是:

// results:
[ 'title:xxx', 'pic:xxx', 'title:xxx', 'pic:xxx' ]

补充:
没看清题目说PHP,不太懂PHP,用js写的,你可以只拿正则那块。

直接上代码了

$re = '/(title|pic).*?>([^<]+)/';
$str = '<div class="test">
    <p class="title">xxx</p>
    <p class="xas"></p><pclass="asd"></p>
    <p class="pic">xxx</p>
</div>
<div class="test">
    <p class="title">xxx</p>
    <p class="xas"></p><pclass="asd"></p>
    <p class="pic">xxx</p>
</div>';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

//演示输出的结果,你可以根据你的需求,从$matches中拿到你想要的xxx部分。
var_dump($matches);

这种性能很差的-.-.还是前台用js获取的靠谱。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏