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

Gir*_*iri 17 regex sublimetext2 sublimetext3

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

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

<h1>.+</h1>
Run Code Online (Sandbox Code Playgroud)

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

我的意思是

<h1>Hello this is a hedaer</h1>
Run Code Online (Sandbox Code Playgroud)

它的工作正常.

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

<h1>
   Hello this is a hedaer
</h1>
Run Code Online (Sandbox Code Playgroud)

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

Ani*_*dha 44

默认情况下,.匹配除新行字符之外的每个字符

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

(?s)<h1>.+</h1>
Run Code Online (Sandbox Code Playgroud)

但是,你会发现它不起作用,因为量词的默认行为是贪婪的(在这种情况下是它+),这意味着它会尝试消耗尽可能多的字符.你需要通过在量词之后添加额外来使它变得懒惰(消耗尽可能少的字符):?+?

(?s)<h1>.+?</h1>
Run Code Online (Sandbox Code Playgroud)

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


ayc*_*dee 25

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

(?s)(?<=<h1>)(.+?)(?=</h1>)
Run Code Online (Sandbox Code Playgroud)

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