0

我正在尝试从某些网页的标记中抓取图像。这些网页都有幻灯片。它们的来源包含在页面上的 javascript 对象中。我在想我需要 get_file_contents("http://www.example.com/page/1"); 然后有一个 preg_match_all() 函数,我可以输入一个短语(即 "\"LargeUrl\":\"" 或 "\"Description\":\"")并获取字符串直到它命中它找到的下一个引号。

var photos = {}; 
photos['photo-391094'] = {"LargeUrl": "http://www.example.org/images/1.png","Description":"blah blah balh"};
photos['photo-391095'] = {"LargeUrl": "http://www.example.org/images/2.png","Description":"blah blah balh"};
photos['photo-391096'] = {"LargeUrl": "http://www.example.org/images/3.png","Description":"blah blah balh"};

我有这个函数,但它在输入短语之后返回整行。我如何修改它以查找输入短语之后的任何内容,直到它找到找到的下一个引号?还是我做错了,有更好的方法吗?

$page = file_get_contents("http://www.example.org/page/1");
$word = "\"LargeUrl\":\"";

if(preg_match_all("/(?<=$word)\S+/i", $page, $matches))
{
    echo "<pre>";
    print_r($matches);
    echo "</pre>";
} 

理想情况下,如果我输入 "\"LargeUrl\":\"",该函数将返回如下所示的数组

$matches[0] = "http://www.example.org/images/1.png";
$matches[1] = "http://www.example.org/images/2.png";
$matches[2] = "http://www.example.org/images/3.png";
4

3 回答 3

0

您可以使用括号来捕获您感兴趣的部分。一个简单的正则表达式是

$word = '"LargeUrl":';
$pattern = "$word" . '\s+"([^"]+)"';

preg_match_all("/$pattern/", $page, $matches);

print_r($matches[1]);
于 2012-07-18T03:39:12.233 回答
0

肯定有一个正则表达式可以匹配每个图像 URL,但是如果您更容易,您也可以匹配整个对象,然后 json_decode() 匹配的字符串

于 2012-07-18T03:39:22.187 回答
0

我为您提供了完美的解决方案....使用以下代码,您将获得所需的结果。

preg_match_all('/{"LargeUrl":(.*?)"(.*?)"/', $page, $result, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($result[0]); $i++) {
        echo "<pre>";
        echo $result[2][$i];
        echo "</pre>";

}

谢谢......p2c

于 2012-07-23T10:40:07.987 回答