我正在尝试匹配
<!-- Start Comment
content spanning several lines here
End Comment -->
我认为这样的事情可以解决问题:
(<!-- Start Comment).*(End Comment -->)
但.
与新行不匹配。如何让它识别我的整个块,其中包含许多不同的字符,包括换行符?
答案 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 -->)