【问题标题】:Find specific HTML tag combination with preg_match使用 preg_match 查找特定的 HTML 标记组合
【发布时间】:2015-03-28 09:12:09
【问题描述】:

我正在尝试创建一个 preg_match,它可以在 HTML 文档中找到一系列标签。

示例 HTML:

<div class="importantclass">
  <p>some thing</p>
  <p>some more things</p>
</div>
<div class="importantclass">
  <b>some text</b>
  <p>NEEDLE</p>
</div>

我需要找到带有 div class="importantclass" 的标签的组合以及随后带有特定 NEEDLE-Text 的 p-tag。

然后我需要返回开始 div 类的位置。 注意:我不想因为重要类 div 的第一次出现而得到匹配。

是否有可能在不使用 DOM 而只使用正则表达式的情况下做到这一点?

感谢您的提示!

【问题讨论】:

  • 当你知道有 DOM 是查找节点的更合适的工具时,为什么还要使用正则表达式呢?你能澄清一下实际的用例吗,例如一旦有了偏移量,您打算如何处理?
  • 我知道这个答案现在是如何变得如此流行的......你不应该用正则表达式解析 HTML,正如 Gordon 所说,你有一个非常好的 DOM 和 getElementsByTagName() 方法,你可以迭代通过。
  • 您能否发布所需输出的样本?

标签: php html regex preg-match


【解决方案1】:

这对你有用吗?

<?php
    $html = <<< LOB
<div class="importantclass">
  <p>some thing</p>
  <p>some more things</p>
</div>
<div class="importantclass">
  <b>some text</b>
  <p>FIND ME</p>
</div>
LOB;

    $needle = "FIND ME";
    preg_match_all('%(<div.*?class="importantclass">.*?</div>)%sim', $html, $matches, PREG_PATTERN_ORDER);
    for ($i = 0; $i < count($matches[1]); $i++) {
        if (preg_match("%<p>$needle</p>%im", $matches[1][$i])) {
            echo "MATCH FOUND!<br>";
            echo "POSITION $i<br>";
            echo htmlentities( $matches[1][$i]);
        }
}

DEMO

【讨论】:

    猜你喜欢
    • 2012-04-11
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多