【发布时间】: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