【问题标题】:PHP preg_match_all of parent with class namePHP preg_match_all 具有类名的父级
【发布时间】:2019-02-22 19:55:45
【问题描述】:

使用preg_match_all 是否可以匹配具有特定类名的父级中的元素?

例如我有这个 HTML 标记:

<div class="red lorem-ipsum>
  <a href="#">Some link</a>
</div>

<div class="red>
  <a href="#">Some link</a>
</div>

<div class="something red lorem-ipsum>
  <a href="#">Some link</a>
</div>

我可以匹配父级中的每个&lt;a&gt; 类名称为red 吗?

我试过了,但它不起作用:

~(?:<div class="red">|\G)\s*<a [^>]+>~i

【问题讨论】:

标签: php regex preg-match-all


【解决方案1】:

DOMDocumentDOMXPath 结合使用。这里的 HTML 在 $html 变量中:

$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$matches = $xpath->query("//div[contains(concat(' ', @class, ' '), ' red ')]/a");
foreach($matches as $a) {
    echo $a->textContent;
}

【讨论】:

  • 感谢您的代码!我之前没有尝试过DOMXPath。我在哪里选择&lt;a&gt;?最后是/a吗?
  • 是的,确实:/ 表示“孩子”(// 是“后代”),而“a”是标签名称。更复杂的部分是匹配一个类。有关该部分的更多信息here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
相关资源
最近更新 更多