【问题标题】:RegEx: h1 followed by h2 without p in between正则表达式:h1 后跟 h2,中间没有 p
【发布时间】:2011-02-24 06:05:37
【问题描述】:

我需要一个正则表达式来确定 h1 标签后面是否跟着 h2 标签,中间没有任何段落元素。我尝试使用负前瞻,但它不起作用:

<h1(.+?)</h1>(\s|(?!<p))*<h2(.+?)</h2>

【问题讨论】:

  • 您可能会发现通过 HTML 解析器运行它并遍历 DOM 会更容易。
  • Why using regex to parse HTML is evil 更好的匹配方法是使用允许您使用 XPath 的适当 HTML 解析器。
  • &lt;h1&gt;&lt;/h1&gt;&lt;!--&lt;p&gt;&lt;/p&gt;--&gt;&lt;h2&gt;&lt;/h2&gt;, &lt;h1&gt;&lt;/h1&gt;&lt;script&gt;0&lt;p&gt;1&lt;/p&gt;/&lt;/script&gt;&lt;h2&gt;&lt;/h2&gt;

标签: html regex html-parsing negative-lookahead


【解决方案1】:
<h1((?!</h1).)*</h1>((?!<p).)*<h2

应该可以。

它只匹配一个h1 标签,然后匹配任意数量的字符直到下一个h2 标签,但前提是一路上没有找到p 标签。

由于在这种情况下嵌套标签不太可能发生,这应该是相当可靠的,即使使用正则表达式。

您需要激活工具/语言选项,点才能匹配换行符。用(?s) 作为正则表达式的前缀可能就足够了。

【讨论】:

    猜你喜欢
    • 2012-10-28
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多