【问题标题】:Match string between “img” tag and “alt” tag and line numbers匹配“img”标签和“alt”标签和行号之间的字符串
【发布时间】:2013-02-06 19:59:59
【问题描述】:
<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 = '你好我来自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(来自上面的代码)时,它不会给我任何东西。 谁能帮帮我吗。我真的需要完成这项工作。谢谢

【问题讨论】:

    标签: php regex dom


    【解决方案1】:

    试试看

    $str = '<a href="products.html><img src="image.jpg"  alt="alt value">hello i am from after img tag</a>';
    preg_match_all('#<a[^>]+>(.*)</a>#isU', $str, $match);
    $result = array_map('strip_tags', $match[1]);
    print_r($result);
    

    【讨论】:

    • 谢谢,但我认为它非常适合您在那里提到的单个字符串。它不适用于变量 $line($line 变量来自我放在顶部的示例)
    • 但是你可以在没有 DOMdocument 的情况下做到这一点,像这样 preg_match_all('#]+>(.*)#isU', file_get_contents('google.com'), $匹配); $matches = array_map('strip_tags', $matches[1]); print_r($matches[1]);
    【解决方案2】:

    在您的情况下使用 Regexp 不是一个好主意,但如果您真的想使用它,那么您需要更改您的 foreach 循环。这是代码。

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

    现在您可以应用 regExp 来查找您想要的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-24
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 2012-01-29
      • 2016-09-11
      相关资源
      最近更新 更多