我有一个要在我的项目中使用的网页源代码。我想在此代码中使用图像链接。所以,我想在 PHP 中使用正则表达式来访问这个链接。
而已:
img src="http://imagelinkhere.com" class="image"
像这样的只有一行。我的逻辑是获取之间的字符串
="
和
"类="图像"
人物。
我怎样才能用 REGEX 做到这一点?非常感谢。
不要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
使用
.*="(.*)?" .*
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 时,正则表达式会让你头疼。
preg_match("/(http://+.*?")/",$text,$matches);
var_dump($matches);
该链接将在 $matches 中。
有几种方法可以做到这一点:
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 ) ;
看到这个线程
我能听到马蹄声,所以我使用 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"
尝试使用 preg_match_all,如下所示:
preg_match_all('/img src="([^"]*)"/', $source, $images);
这应该将图像的所有 URL 放入$images
变量中。正则表达式所做的是查找img src
代码中的所有位并匹配引号之间的位。