我正在使用sublime text 2编辑器。我想使用正则表达式匹配所有h1
标记之间的所有字符。
截至目前我正在使用这样的
<h1>.+</h1>
如果h1标签没有中断,它的工作正常。
我的意思是
<h1>Hello this is a hedaer</h1>
工作正常。
但如果标签看起来像这样
,它就无法正常工作<h1>
Hello this is a hedaer
</h1>
有人可以帮我解释语法吗?
答案 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
。