PHP preg_match函数存在问题

PHP preg_match函数存在问题,php,Php,我正在尝试使用preg_match函数从一个简单的HTML代码中获取所有图像路径,但我没有正确获得它。这是我的密码: $meta='<img src=\"imgdir/4fd60181316c0cb257628528adb1c342.gif\"><br><img src=\"imgdir/e2326f439cc5f8c201b411bd66eaf9a0.gif\"><br>'; $pattern = "/^imgdir\/[a-zA-Z0-9].*

我正在尝试使用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);
$meta='

'; $pattern=“/^imgdir\/[a-zA-Z0-9].*(png | jpg | gif)/i”; 预匹配($pattern,$meta,$result); 打印(结果);
请帮助我获取所有图像路径。示例:
imgdir/4fd60181316c0cb257628528adb1c342.gif

$pattern = "/^imgdir\/[a-zA-Z0-9].*(png|jpg|gif)/i";
这将只匹配一个字母数字字符,因为您有。和*转换。尝试交换它们。你可能还得避开这个点,我不确定


这将只匹配一个字母数字字符,因为您有。和*转换。尝试交换它们。您可能还必须避开圆点,对此我不确定。

^

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

^表示字符串的开头,因此不起作用,请尝试以下操作:

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

regex有几个问题:

  • 您不应该锚定在字符串的开头(删除
    ^
  • *
    量词应放在组
    []
  • 应正确转义
    ,使其与文字句点匹配
  • 最后一个不是错误,但由于您使用的是不区分大小写的修饰符
    /i
    ,因此无需同时指定
    a-z
    a-z
  • 正确答案是:

    $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);
    
    $meta='

    '; $pattern=“/imgdir\\/[a-z0-9]*\\(png|jpg|gif)/i”; 预匹配($pattern,$meta,$result); 打印(结果);

    正则表达式有几个问题:

  • 您不应该锚定在字符串的开头(删除
    ^
  • *
    量词应放在组
    []
  • 应正确转义
    ,使其与文字句点匹配
  • 最后一个不是错误,但由于您使用的是不区分大小写的修饰符
    /i
    ,因此无需同时指定
    a-z
    a-z
  • 正确答案是:

    $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);
    
    $meta='

    '; $pattern=“/imgdir\\/[a-z0-9]*\\(png|jpg|gif)/i”; 预匹配($pattern,$meta,$result); 打印(结果);

    你会想逃离这个世界<代码>\\.以便它只匹配一个文字句点。您还需要避免反斜杠,因为您使用的是双引号。您将希望避开<代码>\\.以便它只匹配一个文字句点。由于使用双引号,您还需要避开反斜杠。