如何从字符串中获取所有图像路径? 注意我只想要包含单词“media”的路径。
例如,给定此字符串(DOM的一部分)
<div class="my-class">
<img src="http://my-website.com/cache/media/2017/10/img67.jpeg" class="" alt="test" width="120" height="100">
<img src="http://my-website.com/cache/2017/10/img68.png" class="" alt="test" width="120" height="100">
<img src="http://my-website.com/cache/media/2017/10/img69.jpg" class="" alt="test" width="120" height="100">
<h2 class="uk-margin-top-remove">About us</h2>
</div>
我想要一个包含类似结果的数组:
array(
[0] => "http://my-website.com/cache/media/2017/10/img67.png"
[1] => "http://my-website.com/cache/media/2017/10/img69.png"
);
我不想要第二个img,因为src属性不包含单词“media”。
答案 0 :(得分:2)
您可以使用preg_match_all()
来获取网址,但使用DOM阅读器会更好。
$str = '<div class="my-class">
<img src="http://my-website.com/cache/media/2017/10/img67.jpeg" class="" alt="test" width="120" height="100">
<img src="http://my-website.com/cache/2017/10/img68.png" class="" alt="test" width="120" height="100">
<img src="http://my-website.com/cache/media/2017/10/img69.jpg" class="" alt="test" width="120" height="100">
<h2 class="uk-margin-top-remove">About us</h2>
</div>' ;
$matches = [] ;
preg_match_all('~(http\://my-website\.com/cache/media/(.*?))"~i', $str, $matches) ;
var_dump($matches[1]);
将返回:
array(2) {
[0]=>
string(52) "http://my-website.com/cache/media/2017/10/img67.jpeg"
[1]=>
string(51) "http://my-website.com/cache/media/2017/10/img69.jpg"
}
答案 1 :(得分:1)
一些样板代码可以帮助您入门:
<?php
$data = <<<DATA
<div class="my-class">
<img src="http://my-website.com/cache/media/2017/10/img67.jpeg" class="" alt="test" width="120" height="100">
<img src="http://my-website.com/cache/2017/10/img68.png" class="" alt="test" width="120" height="100">
<img src="http://my-website.com/cache/media/2017/10/img69.jpg" class="" alt="test" width="120" height="100">
<h2 class="uk-margin-top-remove">About us</h2>
</div>
DATA;
# set up the dom
$dom = new DOMDocument();
$dom->loadHTML($data, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);# | LIBXML_COMPACT | LIBXML_NOENT );
# set up the xpath
$xpath = new DOMXPath($dom);
foreach ($xpath->query("//img[contains(@src, '/media/')]/@src") as $image) {
echo $image->nodeValue . "\n";
}
哪个收益
http://my-website.com/cache/media/2017/10/img67.jpeg
http://my-website.com/cache/media/2017/10/img69.jpg
<小时/> 这会加载
DOM
并对我们之后循环的每个图片使用xpath
查询。
如果由于某些原因(为什么?)您无法使用DOM
解析器,您可以使用第二个选项:
<img
(?s:(?!>).)+?
src=(['"])
(?P<src>(?:(?!\1).)+?/media/.*?\1)
使用src
群组,请参阅a demo on regex101.com。