【问题标题】:Regular Expression in PHP to Match HTML '<p>' that are AFTER the first '<H1>' tag [duplicate]PHP中的正则表达式匹配第一个'<H1>'标签之后的HTML'<p>'[重复]
【发布时间】:2016-10-12 21:24:05
【问题描述】:

如何在 PHP 中编写正则表达式以匹配位于第一个 &lt;H1&gt; 标记之后的 HTML &lt;p&gt;

例如下面的状态如果不等于表达式

if(!preg_match_all('#<p(.*?)<\/p>#', $page_content, $matches)

【问题讨论】:

标签: php html regex


【解决方案1】:

在正确编写的 HTML 中(即并非旨在通过 abusing the loopholes in SGML specification 破坏各种解析器的 HTML),所有 &lt;h1&gt;s 都将具有相应的结束标记。这意味着您可以简单地查找前面带有 &lt;/h1&gt;&lt;p&gt;

<\/h1>[\s\S]*?<p>([\s\S]*?)<\/p>

上面的正则表达式是这样工作的,a proof of concept:

  • &lt;\/h1&gt; 匹配 &lt;/h1&gt; 字面意思
  • [\s\S]*? 匹配所有字符,直到下一个 &lt;p&gt;
  • &lt;p&gt; 匹配 &lt;p&gt; 字面意思
  • ([\s\S]*?) 匹配所有字符,直到下一个 &lt;/p&gt;(注意捕获组 - 此组包含您想要的内容
  • &lt;\/p&gt; 匹配 &lt;/p&gt; 字面意思

【讨论】:

    猜你喜欢
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    相关资源
    最近更新 更多