V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lissome
V2EX  ›  PHP

请教 preg_replace() 过滤 html 标签

  •  
  •   lissome · 2016-09-19 10:32:26 +08:00 · 2249 次点击
    这是一个创建于 2778 天前的主题,其中的信息可能已经有所发展或是发生改变。

    文章正文中有大量 html 标签,类似这样的:

    <h1>标题</h1>
    <p>文字文字</p>
    <img xxxx />
    

    需要从文章正文提取摘要,现在用的办法是先过滤掉 html 标签,然后截取前 n 个字

    $patterns = ['/<.+>/', '/&nbsp;/'];
    $replacements = ['', ''];
    
    $text = preg_replace($patterns, $replacements, $html);
    

    但是替换结果是一个空字符串,是匹配了第一个 < 和最后一个 > ?

    请问正则应该怎么写?

    或者有没有其它方法从正文提取摘要?

    4 条回复    2016-09-20 23:53:16 +08:00
    fahai
        1
    fahai  
       2016-09-19 10:42:25 +08:00   ❤️ 1
    可以把<.+>改成<.*?>或者使用 strip_tags
    lissome
        2
    lissome  
    OP
       2016-09-19 10:43:10 +08:00
    strip_tags
    http://php.net/manual/en/function.strip-tags.php

    刚刚我也查到了,谢谢!
    @fahai
    Herobs
        3
    Herobs  
       2016-09-19 10:46:17 +08:00
    - 取消贪婪匹配。
    - 替换 &nbsp; 不要用正则表达式。
    - 直接用现成的 strip_tags 。
    gouchaoer
        4
    gouchaoer  
       2016-09-20 23:53:16 +08:00 via Android
    用 dom 库做这个啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3549 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:59 · PVG 12:59 · LAX 21:59 · JFK 00:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.