正则表达式不匹配Notepad ++中的换行符

时间:2010-09-24 21:45:26

标签: regex notepad++

我正在尝试匹配

<!-- Start Comment

content spanning several lines here

End Comment -->

我认为这样的事情可以解决问题:

(<!-- Start Comment).*(End Comment -->)

.与新行不匹配。如何让它识别我的整个块,其中包含许多不同的字符,包括换行符?

4 个答案:

答案 0 :(得分:2)

请参阅Finding line beginning using regular expression

显然,Notepad ++正则表达式是基于行的。它们不能跨越线条。

答案 1 :(得分:1)

实际上我已经设法使用这样的东西来完成这项工作:

(?s)BEGINNING-TEXT(.*)FINAL-TEXT

这适用于Notepad ++和Sublime Text。

答案 2 :(得分:0)

Notepad ++似乎并不能很好地处理新行。不过,此页面包含一些创意解决方法:

http://www.powercram.com/2009/08/notepad-guide-to-using-regular.html

答案 3 :(得分:0)

简单方法

在搜索之前,只需在Notepad ++中选中“。匹配换行符”即可。就是这样。

注意:在一个更复杂的示例中,如果您的正则表达式中有 other 个点,而您不是想要匹配换行符,您可以将其替换为[^ \ r \ n],表示“匹配所有不是 换行符的内容”。

复杂的方式

您可能不想使用“。匹配换行符”设置。也许这不是你的事。在这种情况下,还有另一种方法,但这有点hacky。继续阅读。

现在,Notepad ++具有OR运算符,我们可以使用它来搜索任何字符,包括换行符,并且在同一个正则表达式中可互换地也具有与非换行符匹配的点。这也意味着我们也不必选中“。match newline”复选框。这样做是使用以下正则表达式而不是.

(?:\s|.)*

这是“匹配点或任何空白字符,包括换行符”。括号内的?:告诉Notepad ++不要捕获该组。

因此对于上面的示例,我们可以通过以下方式找到它:

(<!-- Start Comment)(?:\s|.)*(End Comment -->)

如果要捕获中间空格(包括空格),请添加一对额外的括号,如下所示:

(<!-- Start Comment)((?:\s|.)*)(End Comment -->)