我试图从下面的行中获取“img”标签结尾和关闭“a”标签(你好,我来自 img 标签之后)之间的字符串。
<a href="products.html><img src="image.jpg" alt="alt value">hello i am from after img tag</a>
然后检查它们是否匹配。同时我想找出那条线的编号。我尝试了以下代码,它给了我网页的行号和行。
$dom = new domDocument;
$dom->loadHTMLFile('http://www.google.com');
$dom->preserveWhiteSpace = true;
$dom->formatOutput = true;
$new = htmlspecialchars($dom->saveHTML(), ENT_QUOTES);
$lines = preg_split('/\r\n|\r|\n/', $new);
foreach ($lines as $lineNumber => $line) {
echo $lineNumber . \r\r. $line;
}
以下代码为我提供了图像源和 alt 标签。我无法获取行号或“img”标签末尾和关闭“a”标签之间的文本(你好,我来自 img 标签之后)。
$alts = array();
$tags = $dom->getElementsByTagName('img');
foreach($tags as $tag) {
$alts[$tag->attributes->getNamedItem('src')->nodeValue]
= $tag->attributes->getNamedItem('alt')->nodeValue;
}
foreach($alts as $key => $alt) {
echo "{$key} => {$alt}<br/>";
}
我知道 regexp 不适用于 html 解析,但我也尝试过,看看它是否适用于以下行。$alt = 'hello i am from after img tag' 我拥有的正则表达式是,//alt 中的任何内容
preg_match_all('|\s*alt[^>]*=[\'"](.*?)[\'"]|i', $alt, $altTag);
//“img”标签结束和“a”标签结束之间的任何内容。
preg_match_all("#<\s*a[^>]*><\s*img[^>]*>(.*?)<\s*/\s*a>#s", $alt, $foo);
它以这种方式完美运行,但是当尝试在变量 $line 上使用相同的 regExp(来自上面的代码)时,它不会给我任何东西。谁能帮帮我吗。我真的需要完成这项工作。谢谢