php正则表达式子模式

时间:2011-03-15 19:53:46

标签: php regex

在php上使用子模式创建正则表达式时遇到一些问题。需要一些帮助。

我有这样的HTML代码:

<div class="result-item *sr "> 
 <a href="/watch?v=_CvG8Eu0nSY" class="ux-thumb-wrap result-item-thumb"><span class="video-thumb ux-thumb-128 "><span class="clip"><img onload="tn_load(1)" alt="Thumbnail" src="//i4.ytimg.com/vi/_CvG8Eu0nSY/default.jpg" ></span></a></div>

所以我想要$ matches [0] - “/ watch?v = _CvG8Eu0nSY”和$ matches [1] - “i4.ytimg.com/vi/_CvG8Eu0nSY/default.jpg".

感谢您的回答!

2 个答案:

答案 0 :(得分:2)

使用DOMDocument。下面是一个例子:

$html = '<div class="result-item *sr "> 
<a href="/watch?v=gbF_fwTfZ9U" class="ux-thumb-wrap result-item-thumb"><span class="video-thumb ux-thumb-128 "><span class="clip"><img onload="tn_load(10)" alt="Thumbnail" data-thumb="//i4.ytimg.com/vi/gbF_fwTfZ9U/default.jpg" src="//s.ytimg.com/yt/img/pixel-vfl3z5WfW.gif" ></span></a> 
</div>';

$d = new DOMDocument();

$d->loadHTML($html);

$a = $d->getElementsByTagName("a");

foreach($a as $foo) {
        print $foo->getAttributeNode("href")->nodeValue."\n";

        $imgs = $foo->getElementsByTagName("img");
        foreach($imgs as $img) {
                print $img->getAttributeNode("data-thumb")->nodeValue."\n";
        }
}

答案 1 :(得分:0)

以下内容应该有效:

preg_match("/a href=\"(\/watch\?v=.*)\".*data-thumb=\"\/\/(.*)\"/U", $html, $matches);

可能有更优雅的方式将其拉下来,但这是第一种想到的方式。