需要正则表达式匹配包含"http://"的字符串,并以数组的文件扩展名结束

use*_*467 5 php regex

寻找一个能找到匹配表达式的php解决方案:

  1. URL包含"http://"(不一定以http://开头)AND
  2. URL以数组的文件扩展名结尾.

文件扩展名数组的示例

$filetypes = array(
jpg,
gif,
png,
js,
tif,
pdf,
doc,
xls,
xlsx,
etc);
Run Code Online (Sandbox Code Playgroud)

以下是我希望根据上述要求更新的工作代码:

现在,这段代码可以工作,只返回包含"http://"的URL,但我也希望包含第二个要求.

$i = 0;
$matches = false;
foreach($all_urls as $index => $value) {
    if (preg_match('/http:/', $value)) {
        $i++;
        echo "[{$i}] {$value}<br>";
        $matches = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

Riz*_*123 5

您可以in_array()在if语句中进行调用,在此语句中检查pathinfo()扩展是否在$filetypes数组中.

$i = 0;
$matches = false;
foreach($all_urls as $index => $value) {
    if (preg_match('/http:/', $value) && in_array(pathinfo($value, PATHINFO_EXTENSION ), $filetypes)) {
        $i++;
        echo "[{$i}] {$value}<br>";
        $matches = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

正如你在评论中所说,一些url包含单引号,你可以使用它来摆脱它们,因为@Ghost在评论中显示了它:

trim($value, "'")
Run Code Online (Sandbox Code Playgroud)

然后在in_array()调用中使用它,如下所示:

in_array(pathinfo(trim($value, "'"), PATHINFO_EXTENSION ), $filetypes)
                //^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

  • @ Rizier123,你真是太棒了!快速彻底地向你致敬!感谢Ghost也提供了帮助 (2认同)