0

我有一个要在我的项目中使用的网页源代码。我想在此代码中使用图像链接。所以,我想在 PHP 中使用正则表达式来访问这个链接。

而已:

img src="http://imagelinkhere.com" class="image"

像这样的只有一行。我的逻辑是获取之间的字符串

="

"类="图像"

人物。

我怎样才能用 REGEX 做到这一点?非常感谢。

4

6 回答 6

3

不要Regex用于 HTML .. 尝试DomDocument

$html = '<html><img src="http://imagelinkhere.com" class="image" /></html>';

$dom = new DOMDocument();
$dom->loadHTML($html);
$img = $dom->getElementsByTagName("img");

foreach ( $img as $v ) {
    if ($v->getAttribute("class") == "image")
        print($v->getAttribute("src"));
}

输出

http://imagelinkhere.com
于 2012-12-13T09:19:16.193 回答
1

使用

.*="(.*)?" .*

with preg replace 只为您提供第一个正则表达式组 (\1) 中的 url。

如此完整,它看起来像

$str='img src="http://imagelinkhere.com" class="image"';
$str=preg_replace('.*="(.*)?" .*','$1',$str);
echo $str;

-->

http://imagelinkhere.com

编辑:或者只是按照 Baba 的建议使用 DOM Parser。我会记住,当用它解析 html 时,正则表达式会让你头疼。

于 2012-12-13T09:16:21.390 回答
1
preg_match("/(http://+.*?")/",$text,$matches);
var_dump($matches);

该链接将在 $matches 中。

于 2012-12-13T09:16:21.723 回答
0

有几种方法可以做到这一点:

1.你可以使用 SimpleHTML Dom Parser,我更喜欢简单的 HTML

2.你也可以使用preg_match

$foo = '<img class="foo bar test" title="test image" src="http://example.com/img/image.jpg" alt="test image" class="image" />';
$array = array();
preg_match( '/src="([^"]*)"/i', $foo, $array ) ;

看到这个线程

于 2012-12-13T09:16:06.557 回答
0

我能听到马蹄声,所以我使用 DOM 解析而不是正则表达式。

$dom = new DOMDocument();
$dom->loadHTMLFile('path/to/your/file.html');
foreach ($dom->getElementsByTagName('img') as $img)
{
    if ($img->hasAttribute('class') && $img->getAttribute('class') == 'image')
    {
        echo $img->getAttribute('src');
    }
}

这将只回显 img 标签的 src 属性,并带有class="image"

于 2012-12-13T09:27:43.997 回答
-1

尝试使用 preg_match_all,如下所示:

preg_match_all('/img src="([^"]*)"/', $source, $images);

这应该将图像的所有 URL 放入$images变量中。正则表达式所做的是查找img src代码中的所有位并匹配引号之间的位。

于 2012-12-13T09:13:55.110 回答