我们假设我们有这样的字符串:
Its really great to <img src="image2.png" /> hear from you "Today is good <img src="http://www.google.com/picture2.png" /> day" Let's listen song together! ---------<img src="images/profile.png" />\\\\\\
这是整个字符串。我们里面有3个img。
我们希望从此字符串中生成变量,如
output[0] = 'image2.png';
output[1] = 'http://www.google.com/picture2.png';
output[2] = 'images/profile.png';
我的意思是,我们有这个字符串,以及如何处理他以提取所有&#34; src&#34;来自img标签并将其收集在一个新的数组变量中。
怎么做?我们如何才能实现这一目标?
另外我使用CodeIgniter框架。也许只有这个框架的方法可以做到,但我认为不可能。
答案 0 :(得分:1)
在整个页面的源上使用preg_match_all ( string $pattern , string $subject [, array &$matches
来选择src =值。像这样:
$src = array (); // array for src's
preg_match_all ( '/src="([^"]+)"/', $page_source, $src );
$just_urls = $src [1];
$page_source
是您的输入,$src
是src=
值的结果数组,而$just_urls
是一个仅包含引号内部的数组。
模式/src="([^"]+)"/
将仅返回引号内的内容。
请参阅: https://secure.php.net/manual/en/function.preg-match-all.php
答案 1 :(得分:1)
$src = <<<EOL
Its really great to <img src="image2.png" /> hear from you "Today is good
<img src="http://www.google.com/picture2.png" /> day" Let's listen song
together! ---------<img src="images/profile.png" />\\\\\\
EOL;
preg_match_all('~src="([^"]+)~', $src, $matches);
var_export($matches[1]);
// output ->
// array (
// 0 => 'image2.png',
// 1 => 'http://www.google.com/picture2.png',
// 2 => 'images/profile.png',
// )
直播demo
更新:您可以在正则表达式模式中使用\K
来获得$matches
所需的内容:
preg_match_all('~src="\K[^"]+~', $src, $matches);
var_export($matches);
// output ->
// array (
// 0 =>
// array (
// 0 => 'image2.png',
// 1 => 'http://www.google.com/picture2.png',
// 2 => 'images/profile.png',
// ),
// )
有关参考,请参阅Escape sequences
答案 2 :(得分:0)
您需要使用PHP DOM Extension。 DOM扩展允许您通过带有PHP的DOM API操作XML文档。
您也可以查看以下代码:
function fetchImages($content) {
$doc = new DOMDocument();
$doc->loadHTML($content);
$imgElements = $doc->getElementsByTagName('img');
$images = array();
for($i = 0; $i < $imgElements->length; $i++) {
$images[] = $imgElements->item($i)->getAttribute('src');
}
return $images;
}
$content = file_get_contents('http://www.example.com/');
$images = fetchImages($content);
print_r($images);