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

每个文章可匹配的结果都不一样的情况下,preg_match_all 如何返回最后一个匹配结果,或者有没有办法从最后开始匹配?

  •  
  •   ab · 2015-05-03 00:31:52 +08:00 · 2610 次点击
    这是一个创建于 3522 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如要正则处理每个文章,使其返回最后一个img标签. 但是每个文章的img标签数量又都不一致
    6 条回复    2015-05-03 15:46:10 +08:00
    Septembers
        1
    Septembers  
       2015-05-03 00:37:13 +08:00 via Android
    shiny
        2
    shiny  
       2015-05-03 00:48:29 +08:00
    这个不应该用 DOM 处理嘛
    Septembers
        3
    Septembers  
       2015-05-03 01:25:12 +08:00
    @shiny 注意题者的环境是PHP解析DOM再操作的代价。。。。。。。。。。。。
    feiyuanqiu
        4
    feiyuanqiu  
       2015-05-03 05:26:56 +08:00
    你看一下 preg_match_all 的文档,它会返回匹配的次数,你直接用这个次数就可以获取到最后一个匹配:

    <?php
    $article = <<<EOT
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>test</title>
    </head>
    <body>
    <img src="//cdn.v2ex.co/avatar/2cd8/7697/76017_large.png?m=1412760421" class="avatar" border="0" align="default">
    <img src="//cdn.v2ex.co/avatar/2cd8/7697/76017_large.png?m=1412760422" class="avatar" border="0" align="default">
    <img src="//cdn.v2ex.co/avatar/2cd8/7697/76017_large.png?m=1412760423" class="avatar" border="0" align="default">
    <img src="//cdn.v2ex.co/avatar/2cd8/7697/76017_large.png?m=1412760424" class="avatar" border="0" align="default">
    </div>
    </body>
    </html>
    EOT;

    $pattern = '/<img[^>]+src\\s*=\\s*[\'\"]([^\'\"]+)[\'\"][^>]*>/im';

    // 设置 flag 为 PREG_SET_ORDER
    if ($match = preg_match_all($pattern, $article, $matches, PREG_SET_ORDER)) {
    var_dump($matches[--$match]);
    }

    // 不设置 PREG_SET_ORDER
    if ($match = preg_match_all($pattern, $article, $matches)) {
    var_dump($matches[0][--$match]);
    }
    feiyuanqiu
        5
    feiyuanqiu  
       2015-05-03 05:29:37 +08:00
    或者不需要 preg_match_all 的返回值:

    if (preg_match_all($pattern, $article, $matches, PREG_SET_ORDER)) {
    $last = array_pop($matches);
    var_dump($last);
    }
    ab
        6
    ab  
    OP
       2015-05-03 15:46:10 +08:00
    @feiyuanqiu 非常感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3880 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 10:23 · PVG 18:23 · LAX 02:23 · JFK 05:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.