【问题标题】:Regular expression to match all characters between <h1> tag正则表达式匹配 <h1> 标签之间的所有字符
【发布时间】:2013-01-09 14:56:06
【问题描述】:

我正在使用 sublime text 2 编辑器。我想使用正则表达式来匹配所有h1 标签之间的所有字符。

目前我是这样使用的

<h1>.+</h1>

如果 h1 标签没有中断,它可以正常工作。

我的意思是

<h1>Hello this is a hedaer</h1>

它工作正常。

但如果标签看起来像这样,它就不起作用

<h1>
   Hello this is a hedaer
</h1>

有人可以帮我语法吗?

【问题讨论】:

    标签: regex sublimetext3 sublimetext2


    【解决方案1】:

    默认. 匹配除换行符以外的所有字符。

    在这种情况下,您将需要 DOTALL 选项,这将使. 匹配任何字符,包括换行符。 DOTALL 选项可以内联指定为(?s)。例如:

    (?s)<h1>.+</h1>
    

    但是,您会发现它不起作用,因为量词的默认行为是 greedy(在本例中为 +),这意味着它将尝试消耗尽可能多的字符尽可能。您需要通过在量词 +? 之后添加额外的 ? 来使其 惰性(使用尽可能少的字符):

    (?s)<h1>.+?</h1>
    

    或者,正则表达式可以是&lt;h1&gt;[^&lt;&gt;]*&lt;/h1&gt;。在这种情况下,您无需指定任何选项。

    【讨论】:

    • 使用 OP 的正则表达式,仅指定这些选项是不够的。
    • @Some1.Kill.The.DJ 我试过你的代码。但是当标签包含break时它仍然不匹配
    • 如果 h1 中有任何嵌套标签,第三个正则表达式不会中断吗?像跨度或链接或其他任何东西......我刚刚尝试了“(?s)”并且它在崇高的情况下工作,这很酷。
    • 我从不知道您可以在崇高的正则表达式搜索中指定标志 - 感谢@Some1.Kill.The.DJ 提供的信息
    • 不知道你们是怎么解决这个问题的。像这样的正则表达式搜索的文档在哪里?
    【解决方案2】:

    因为这个问题是搜索一个正则表达式的顶级谷歌搜索结果,它试图找到一个 h1 标签之间的所有字符,我想我也会给出这个答案。因为那是我一直在寻找的。

    (?s)(?<=<h1>)(.+?)(?=</h1>)
    

    如果在 &lt;h1&gt;A title&lt;/h1&gt; &lt;p&gt;Some content&lt;/p&gt; &lt;h1&gt;Another title&lt;/h1&gt; 之类的示例文本上使用该正则表达式,则只会返回 A title

    【讨论】:

    • 这也适用于清除连续标签之间的字符,如 (?s)(?)(.+?)(?=

      )

    猜你喜欢
    • 2015-07-17
    • 2013-10-31
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    相关资源
    最近更新 更多