有没有办法让Visual Studio跨多行执行正则表达式替换(让匹配跨线边界)?我知道我可以使用很多编辑器,但是这个功能在Visual Studio中被遗漏似乎很奇怪。我错过了什么吗?
答案 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
以匹配它们之间的所有内容。