Visual Studio中的多行正则表达式

时间:2010-10-25 17:38:59

标签: regex visual-studio

有没有办法让Visual Studio跨多行执行正则表达式替换(让匹配跨线边界)?我知道我可以使用很多编辑器,但是这个功能在Visual Studio中被遗漏似乎很奇怪。我错过了什么吗?

7 个答案:

答案 0 :(得分:64)

Visual Studio 2013 中的正则表达式已更改。 https://msdn.microsoft.com/en-us/library/2k3te2cs(v=vs.120).aspx

要将表达式与两行匹配,代码现在为:

StartOfExpression.*\r?\n.*EndOfExpression

答案 1 :(得分:21)

今天在Visual Studio 2012中有效:

fooPatternToStart.*(.*\n)+?.*barPatternToEnd

了解(.*\n)+?部分如何跨多行进行匹配,非贪婪 fooPatternToStart在您的起始行上是一些正则表达式模式,而barPatternToEnd是您在下面另一行上找到的模式,可能在下面有很多行......

找到示例here

简单有效:)

注意:之前 VS2012,有效的模式是:fooPatternToStart.(.\n)+@.*barPatternToEnd

答案 2 :(得分:19)

注意:此答案使用的是Visual Studio中使用的正则表达式语法,包括VS 2012.在VS 2013及更高版本中,正则表达式语法已更改。

您可以在表达式中加入\n。作为一个例子,这里是一个正则表达式,我用来“清理”任何非存储过程的自动生成的SQL脚本(它将匹配以包含“Object:”的行开头的文本块,后跟不是“StoredProcedure”,然后将以下行匹配到一行包含单词“GO”):

/\*+ Object\::b:b~(StoredProcedure)(.*\n)#GO\n

答案 3 :(得分:13)

使用“替换文件”对话框 Ctrl - Shift - H 和单行选项(?s)

(?s)start.*end

发现

start
two
three
end

单行表示:每个文件都被视为单行,点.与换行符\n相匹配。缺点:您必须使用全部查找并替换所有或手动替换。查找下一个不起作用。

对于非模式对话框 Ctrl - H 并查找下一个,请使用(.*\n)*来匹配任意数量的行:

start(.*\n)*.*end

无论哪种方式,您都可以通过插入\n来用多行替换您的发现。

答案 4 :(得分:2)

您可能需要在表达式的末尾使用\ r \ n。

答案 5 :(得分:1)

非贪婪多行任意字符捕获,Visual Studio 2013 +:

.*?\r?\n.*?

吉尔斯·罗伯茨的答案中的贪婪版本。

答案 6 :(得分:0)

对于在搜索VS代码时来到这里的每个人,我使用它来匹配script到任何带有2个换行符的地方(不包括换行符):

script(.|\n)+?(?=\n\n)

替换script\n\n以匹配它们之间的所有内容。