【问题标题】:Extract image URLs with a specific pattern with PHP preg_match_all使用 PHP preg_match_all 提取具有特定模式的图像 URL
【发布时间】:2017-11-21 17:39:21
【问题描述】:

我正在尝试使用 PHP preg_match_all 列出字符串的所有图像 URL。

图像模式如下:

1. //c1.site.com/5/2421/38306891313_ce7844189b_n.jpg
2. \/\/c2.site.com\/2421\/24574382628_9a2af39e82_h.jpg

我最多可以提取以下结果:

m/5/2421/38306891313_ce7844189b_n.jpg // 'm' seems to be the end of .com?

但是我不确定如何包含子域、域和 .com:

preg_match_all('/([-a-z0-9_\/:.])\/([-a-z0-9_\/:.])\/([-a-z0-9_\/:.]+\.(jpg))/i', $data, $matches);
foreach($matches[0] as $image){
echo $image.'<br/>';
}

preg_match_all('/([-a-z0-9_\/:.])\\/([-a-z0-9_\/:.])\\/([-a-z0-9_\/:.]+\.(jpg))/i', $data, $matches);
foreach($matches[0] as $image){
echo $image.'<br/>';
}

【问题讨论】:

  • 最好改用parse_url
  • 您只匹配正则表达式开头的一个字符:preg_match_all('/([-a-z0-9_\/:.])\/...。您需要+,如preg_match_all('/([-a-z0-9_\/:.]+)\/...
  • 您的项目实际需要多强的验证? regex101.com/r/xS1V2e/1 或修剪前导斜杠:regex101.com/r/xS1V2e/2 始终尽量减少模式中的捕获组。我想我想在问题中看到您的预期结果。

标签: php regex preg-match-all


【解决方案1】:

您可以改用parse_url

<?php

$string = "//c1.site.com/5/2421/38306891313_ce7844189b_n.jpg";

print_r(parse_url($string));
?>

产量

Array
(
    [host] => c1.site.com
    [path] => /5/2421/38306891313_ce7844189b_n.jpg
)

【讨论】:

  • 这只有在我已经提取了所有可能的图片 URL 时才有效,但我需要先找到它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多