php - 匹配 “img” 标签和 “alt” 标签和行号之间的字符串

标签 php regex dom

我试图从下面的行中获取“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 = '你好我来自 after img 标签' 我的正则表达式是 //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 不是一个好主意,但如果你真的想使用它,那么你需要更改你的 foreach 循环。这是代码。

foreach ($lines as $lineNumber => $l){ 
$line= html_entity_decode($l);
}

现在您可以应用正则表达式来查找您想要的内容。

关于php - 匹配 “img” 标签和 “alt” 标签和行号之间的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15003214/

相关文章:

php - cURL 不加载样式/css

php - 我如何从信息框中获取指向维基百科图像的链接?

regex - spring 安全过滤器链正则表达式模式

JavaScript 正则表达式不匹配 [

javascript - CSS nth-child 不适用于动态隐藏的元素 [AngularJS]

html - 如何制作结构指令来包装我的 DOM 的一部分?

php - MySQL 服务器已经消失

php - 模拟数据库查询 laravel mock

正则表达式帮助,如何使表达式的顺序无关紧要?

javascript - Polymer dom-repeat 中的 SVG <use> 标签