20

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

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

<h1>.+</h1>

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

我的意思是

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

它工作正常。

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

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

有人可以帮我语法吗?

4

2 回答 2

47

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

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

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

但是,您会看到它不起作用,因为量词的默认行为是贪婪的(在本例中为+),这意味着它将尝试使用尽可能多的字符。您需要通过在量词之后添加 extra 来使其变得懒惰(使用尽可能少的字符):?+?

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

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

于 2013-01-25T15:54:36.077 回答
25

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

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

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

于 2013-05-13T13:38:54.050 回答