PHP preg_match函数的问题

时间:2011-09-19 20:19:14

标签: php

我正在尝试使用preg_match函数从简单的HTML代码获取所有图像路径,但我没有把它弄好。这是我的代码:

$meta='<img src=\"imgdir/4fd60181316c0cb257628528adb1c342.gif\"><br><img src=\"imgdir/e2326f439cc5f8c201b411bd66eaf9a0.gif\"><br>';
$pattern = "/^imgdir\/[a-zA-Z0-9].*(png|jpg|gif)/i";
preg_match($pattern, $meta, $result);

print_r($result);

请帮助我获取所有图像路径。例如:imgdir/4fd60181316c0cb257628528adb1c342.gif

3 个答案:

答案 0 :(得分:3)

正则表达式存在一些问题:

  1. 您不应该锚定在字符串的开头(删除^
  2. *量词应放在群组[]
  3. 之后
  4. .应正确转义,以便与文字句点匹配
  5. 最后一个不是错误,但由于您使用不区分大小写的修饰符/i,因此无需同时指定a-zA-Z
  6. 正确的是:

    $meta='<img src=\"imgdir/4fd60181316c0cb257628528adb1c342.gif\"><br><img src=\"imgdir/e2326f439cc5f8c201b411bd66eaf9a0.gif\"><br>';
    $pattern = "/imgdir\\/[a-z0-9]*\\.(png|jpg|gif)/i";
    preg_match($pattern, $meta, $result);
    
    print_r($result);
    

    <强> See it in action

答案 1 :(得分:1)

^表示字符串的开头,以便不起作用,请尝试:

$pattern = "/imgdir\/[a-zA-Z0-9]*\.(png|jpg|gif)/i";

答案 2 :(得分:0)

$pattern = "/^imgdir\/[a-zA-Z0-9].*(png|jpg|gif)/i";

这只会匹配一个字母数字字符,因为你有。和*转置。尝试交换它们。你可能也不得不逃避这一点,我不确定。