有什么方法可以使Visual Studio在多行之间执行正则表达式替换(让匹配的跨行边界)?我知道我可以使用很多编辑器,但是对于Visual Studio却没有此功能,这似乎很奇怪。我想念什么吗?
Answers:
使用中的文件对话框中的替换Ctrl- Shift-H和单行选项(?s)
:
(?s)start.*end
发现
start
two
three
end
单行表示:将每个文件视为单行,点.
匹配换行符\n
。缺点:您必须使用“查找全部”并替换全部,或手动替换。查找下一个不起作用。
对于非模式对话框Ctrl-H并查找下一个,用于(.*\n)*
匹配任意数量的行:
start(.*\n)*.*end
无论哪种方式,您都可以通过插入来用多行替换您的发现\n
。
start
和之间匹配尽可能多的字符end
。如果要查找下一个,请end
使用非贪婪版本:(?s)start.*?end
或start(.*\n)*?.*?end
。
(?s)
吗?
正则表达式已在Visual Studio 2013中更改。 https://msdn.microsoft.com/zh-CN/library/2k3te2cs(v=vs.120).aspx
为了匹配两行以上的表达式,代码现在为:
StartOfExpression.*\r?\n.*EndOfExpression
</label>.*\r?\n.*<div
这里\r?\n
是明显的carriage_return-NEW_LINE和.*
匹配可能的选项卡/空格
现在可以在Visual Studio 2012中使用:
fooPatternToStart.*(.*\n)+?.*barPatternToEnd
查看(.*\n)+?
零件如何跨多行(非贪婪)进行匹配。
fooPatternToStart
是您的开始行上的一些正则表达式模式,而barPatternToEnd
您的模式是在下面的另一行上找到的,可能是下面的许多行...
在这里找到示例。
简单有效:)
注意:在VS2012之前,有效的模式是:fooPatternToStart.(.\n)+@.*barPatternToEnd
sprintf.*(.*\n)+?.*log.*(.*\n)+?.*__func__
可log
在sprintf
和之间搜索__func__
,谢谢!Tho ..它似乎正在寻求无限的可能性..如果只有一种方法来限制行数
注意:此答案使用的是Visual Studio VS 2012及更高版本中使用的regex语法。在VS 2013及更高版本中,regex语法已更改。
您可以\n
在表达式中包括。举例来说,这是一个正则表达式,我可以使用它来从所有非存储过程中“清除”自动生成的SQL脚本(它将匹配以“ Object:”开头的文本块,然后是不包含该内容的文本块) “ StoredProcedure”,然后将以下各行匹配到由单词“ GO”组成的一行):
/\*+ Object\::b:b~(StoredProcedure)(.*\n)#GO\n
end
),所以它不会贪心。即:start(.*\n)*.*?end