【问题标题】:preg_match: get div-s which don't contain div(s)preg_match: 获取不包含 div(s) 的 div-s
【发布时间】:2011-11-03 08:36:52
【问题描述】:

我不知道如何只获取那些不包含其他 div 的“div”(带有内容)。

例如:

<div id='first'>
    ...
    <div id='second'> 
        ...
    </div> 
</div> 
<div id='third'> 
    ...
</div>

而且我只需要“第二个”和“第三个”div 的内容、开始和结束标记,因为它们不包含其他 div。

我试过这个模式:~(&lt;div id='[a-z].+')(.*?)(&lt;/div&gt;)~s 但是这样不行。

我希望我很清楚......提前谢谢你!

【问题讨论】:

  • 另一个用正则表达式解析html

标签: php regex


【解决方案1】:

虽然我不是使用 rexex 提取 HTML 的纳粹分子,但使用 xpath 和 DOM 解决这个问题要容易得多。

$dom = new DomDocument();
$dom->loadHTML($html);

$xpath = new DOMXPath($dom);
$divs = $xpath->query("//div[not(div)]");

我没有测试该代码。但关键部分是查找所有没有 div 子节点的 div 的 not 运算符。

【讨论】:

  • 感谢您的回答!是的,使用 xpath 一定更容易,但如果可能的话,我真的很想知道如何使用正则表达式。
  • 我不确定这是否可能。也许吧,但它会非常复杂。 xpath 有什么问题,它们在 PHP 中很容易使用,只需在 SO 周围搜索您需要的所有信息。
  • 没有错,我只是对是否可以使用正则表达式感兴趣。所以再次感谢你。我正在使用 xpath!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-16
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多