0

我有页面 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 &copy; 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);
?>

这两个文件都在根文件夹中,现在我得到空白页:(

任何帮助都会很棒

谢谢

4

4 回答 4

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
)

现场演示:http: //ideone.com/iBhVMF

于 2013-07-17T14:14:28.987 回答
1

我认为这对你有用,试试下面的链接来测试你的正则表达式

preg_match_all("/<div class=\"container\">(.*?)<\/div>/", $file, $match);
preg_match_all("/<img .*?(?=src)src=\"([^\"]+)\"/", $match[1][0], $images);

http://www.phpliveregex.com

于 2013-07-17T14:16:47.127 回答
0
preg_match_all("/<img src=\"(.*?)\">/", $match, $images);

用。。。来代替

preg_match_all("/<img src=\"(.*?)\"/", $match, $images); // stripped ">" char
于 2013-07-17T14:05:51.657 回答
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; 
}
于 2013-07-17T14:29:47.010 回答