我有页面image.php
图像保存在容器中,如下所示: - 注意:容器div外还有其他图像..我只想要容器div中的图像。
<!DOCTYPE html>
<head>
<title>Image Holder</title>
</head>
<body>
<header>
<a href="#"><img src="http://examepl.com/logo.png"></a>
<div id="side">
<div id="facebook"><img src="http://examepl.com/fb.png"></div>
<div id="twiiter"><img src="http://examepl.com/t.png"></div>
<div id="gplus"><img src="http://examepl.com/gp.png"></div>
</div>
</header>
<div class="container">
<p>SOme Post</p>
<img src="http://examepl.com/some.png" title="some image" />
<p>SOme Post</p>
<img src="http://examepl.com/some.png" title="some image" />
<p>SOme Post</p>
<img src="http://examepl.com/some.png" title="some image" />
</div>
<footer>
<div id="foot">
copyright © 2013
</div>
</footer>
</body>
</html>
我想用preg_match_all从我的image.php文件中获取图像,但它返回boolean(false):(
我的PHP代码: -
<?php
$file = file_get_contents("image.php");
preg_match_all("/<div class=\"container\">(.*?)</div>/", $file, $match);
preg_match_all("/<img src=\"(.*?)\">/", $match, $images);
var_dump($images);
?>
这两个文件都在根文件夹中,现在我得到空白页:(
任何帮助都会很棒
由于
答案 0 :(得分:1)
最好不要为此目的使用正则表达式。 PHP为此提供了很好的DOM api。考虑如下代码:
$html = <<< EOF
<div class="container">
<p>SOme Post</p>
<img src="http://examepl.com/some1.png" title="some image" />
<p>SOme Post</p>
<img src="http://examepl.com/some2.png" title="some image" />
<p>SOme Post</p>
<img src="http://examepl.com/some3.png" title="some image" />
</div>
EOF;
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html); // loads your html
$xpath = new DOMXPath($doc);
$nodelist = $xpath->query("//div[@class='container']/img");
$img = array();
for($i=0; $i < $nodelist->length; $i++) {
$node = $nodelist->item($i);
$img[] = $node->getAttribute('src');
}
print_r($img);
<强>输出:强>
Array
(
[0] => http://examepl.com/some1.png
[1] => http://examepl.com/some2.png
[2] => http://examepl.com/some3.png
)
答案 1 :(得分:1)
我认为这适用于您尝试以下链接来测试您的正则表达式
preg_match_all("/<div class=\"container\">(.*?)<\/div>/", $file, $match);
preg_match_all("/<img .*?(?=src)src=\"([^\"]+)\"/", $match[1][0], $images);
答案 2 :(得分:0)
preg_match_all("/<img src=\"(.*?)\">/", $match, $images);
替换为
preg_match_all("/<img src=\"(.*?)\"/", $match, $images); // stripped ">" char
答案 3 :(得分:0)
您可以使用XPath查询轻松获得所需内容:
$url = 'http://examepl.com/image.php';
$doc = new DOMDocument();
@$doc->loadHTMLFile($url);
$xpath = new DOMXPath($doc);
$srcs = $xpath->query("//div[@class='container']//img/attribute::src");
foreach ($srcs as $src) {
echo '<br/>' . $src->value;
}