【问题标题】:preg_match_all for this pattern此模式的 preg_match_all
【发布时间】:2014-04-09 04:24:35
【问题描述】:

我有这个模式,我想用它来提取 /image/ 字段之后的数字,我已经尝试过这个模式,我已经在http://www.functions-online.com/preg_match_all.html 在线检查,它为第一个链接提供了所需的输出,但对于其他链接没有提供所需的输出 这是我的模式

  /\sample.com\/image\/(.*)\//

这是我的字符串

     Mario Ermito photos by sample.com Mario Ermito Latest News, Photos, Biography, Videos and Wallpapers [img]http://xyz.sample.com/image/4205476/600full-mario-ermito.jpg[/img][img]http://xyz.sample.com/image/4453948/600full-my-profile.jpg[/img][img]http://xyz.sample.com/image/427185/600full-eagle-eye-poster.jpg[/img][img]http://xyz.sample.com/image/1323868/600full-alexis-bledel.jpg[/img][img]http://xyz.sample.com/image/2505314/600full-monroe-lee.jpg[/img][img]http://xyz.sample.com/image/3300481/600full-cindy-crawford.jpg[/img][img]http://xyz.sample.com/image/1046646/600full-pitura-freska.jpg[/img][img]http://xyz.sample.com/image/4322305/600full-kristin-kreuk.jpg[/img][img]http://xyz.sample.com/image/4261476/600full-kang-so--ra.jpg[/img][img]http://xyz.sample.com/image/3386911/600full-summer-brielle.jpg[/img][img]http://xyz.sample.com/image/4663949/600full-the-closer-artwork.jpg[/img]

例如

我只想在 /image/ 字段之后提取数字我不想要图像名称我想要的输出是

     4205476
     4453948
      427185

等所有字符串中的数字

【问题讨论】:

    标签: php preg-match preg-match-all


    【解决方案1】:

    使用这个正则表达式~\/\image\/(.*?)\/~

    <?php
    $str='     Mario Ermito photos by sample.com Mario Ermito Latest News, Photos, Biography, Videos and Wallpapers [img]http://xyz.sample.com/image/4205476/600full-mario-ermito.jpg[/img][img]http://xyz.sample.com/image/4453948/600full-my-profile.jpg[/img][img]http://xyz.sample.com/image/427185/600full-eagle-eye-poster.jpg[/img][img]http://xyz.sample.com/image/1323868/600full-alexis-bledel.jpg[/img][img]http://xyz.sample.com/image/2505314/600full-monroe-lee.jpg[/img][img]http://xyz.sample.com/image/3300481/600full-cindy-crawford.jpg[/img][img]http://xyz.sample.com/image/1046646/600full-pitura-freska.jpg[/img][img]http://xyz.sample.com/image/4322305/600full-kristin-kreuk.jpg[/img][img]http://xyz.sample.com/image/4261476/600full-kang-so--ra.jpg[/img][img]http://xyz.sample.com/image/3386911/600full-summer-brielle.jpg[/img][img]http://xyz.sample.com/image/4663949/600full-the-closer-artwork.jpg[/img]';
    preg_match_all('~\/\image\/(.*?)\/~', $str, $matches);
    print_r($matches[1]);
    

    OUTPUT :

    Array
    (
        [0] => 4205476
        [1] => 4453948
        [2] => 427185
        [3] => 1323868
        [4] => 2505314
        [5] => 3300481
        [6] => 1046646
        [7] => 4322305
        [8] => 4261476
        [9] => 3386911
        [10] => 4663949
    )
    

    【讨论】:

    • 你能告诉我这〜会做什么。我试过类似的,但我的没有用,你的工作很好
    • ~ 是正则表达式的分隔符。你甚至可以使用@
    • @sachin,你没有在.com 之前用反斜杠转义,那是你的问题。这也是一个正确的。 ~sample\.com\/image\/(.*?)\/~
    • 我已经接受了答案。我还没有为你的答案做任何投票等。谢谢
    • 我不是说你,投票需要 125 声望,所以不是你 :)
    【解决方案2】:

    你需要调整你的正则表达式:

    $regex = '@sample\.com/image/([0-9]+)/@'
    
    preg_match_all('@sample\.com/image/([0-9]+)/@', $str, $m);
    print_r($m);
    

    预期输出:

    Array
    (
        [0] => Array
            (
                [0] => sample.com/image/4205476/
                [1] => sample.com/image/4453948/
                [2] => sample.com/image/427185/
                [3] => sample.com/image/1323868/
                [4] => sample.com/image/2505314/
                [5] => sample.com/image/3300481/
                [6] => sample.com/image/1046646/
                [7] => sample.com/image/4322305/
                [8] => sample.com/image/4261476/
                [9] => sample.com/image/3386911/
                [10] => sample.com/image/4663949/
            )
    
        [1] => Array
            (
                [0] => 4205476
                [1] => 4453948
                [2] => 427185
                [3] => 1323868
                [4] => 2505314
                [5] => 3300481
                [6] => 1046646
                [7] => 4322305
                [8] => 4261476
                [9] => 3386911
                [10] => 4663949
            )
    
    )
    

    现在您需要记住,PHP 将返回它匹配的所有内容,包括正则表达式字符串中不需要的部分。

    来自 PHP 手册: http://www.php.net/manual/en/function.preg-match-all.php

    排序结果使得 $matches[0] 是一个完整模式的数组 匹配,$matches[1] 是第一个匹配的字符串数组 带括号的子模式,等等。

    【讨论】:

      【解决方案3】:

      试试这个:

      /.*sample\.com\/image\/(\d+)\/.*/
      

      Debuggex Demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-01
        相关资源
        最近更新 更多