正则表达式匹配<h1>标记</h1>之间的所有字符

时间:2013-01-25 15:52:31

标签: regex sublimetext3 sublimetext2

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

截至目前我正在使用这样的

<h1>.+</h1>

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

我的意思是

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

工作正常。

但如果标签看起来像这样

,它就无法正常工作
<h1>
   Hello this is a hedaer
</h1>

有人可以帮我解释语法吗?

2 个答案:

答案 0 :(得分:44)

默认情况下,.匹配除新换行符之外的所有字符。

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

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

但是,你会发现它不起作用,因为量词的默认行为是贪心(在这种情况下是+),这意味着它会尝试消耗尽可能多的角色。您需要在量词?之后添加额外的+?,使其 lazy (消耗尽可能少的字符):

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

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

答案 1 :(得分:25)

由于这个问题是搜索正则表达式的顶级Google搜索结果,试图在 h1标记之间找到所有字符,我想我也会给出答案。因为那是我想要的。

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

如果在<h1>A title</h1> <p>Some content</p> <h1>Another title</h1>等示例文本上使用该正则表达式,则只会返回A title