使用preg_match_all函数匹配此模式

3
我有这个模式,想要用它来提取/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

从字符串中提取所有数字等。
3个回答

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 :" 的英文意思是 "输出:",保留 HTML 标记不做解释。
Array
(
    [0] => 4205476
    [1] => 4453948
    [2] => 427185
    [3] => 1323868
    [4] => 2505314
    [5] => 3300481
    [6] => 1046646
    [7] => 4322305
    [8] => 4261476
    [9] => 3386911
    [10] => 4663949
)

enter image description here


1
请问这个 ~ 会做什么?我尝试了类似的操作,但我的没有成功,而你的却完美运行。 - sachin
~是正则表达式的分隔符。你甚至可以使用@ - Shankar Narayana Damodaran
@sachin,你在.com之前没有使用反斜杠进行转义,这就是你的问题。这也是正确的表达式:~sample\.com\/image\/(.*?)\/~ - Shankar Narayana Damodaran
我已经接受了答案,就这样了。我没有进行任何投票等操作。谢谢你的回答。 - sachin
我不是指你,投票需要 125 的声望值,所以不是你 :) - Shankar Narayana Damodaran
谢谢,我不知道连点号也需要转义,现在我的代码也可以工作了,谢谢 :) - sachin

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

$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] 是由第一个括号子模式匹配的字符串数组,以此类推。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接