Visual Studio中的多行正则表达式

Pau*_*ter 80 regex visual-studio

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

Gil*_*rts 69

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

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

StartOfExpression.*\r?\n.*EndOfExpression


woo*_*hoo 22

今天在Visual Studio 2012中有效:

fooPatternToStart.*(.*\n)+?.*barPatternToEnd
Run Code Online (Sandbox Code Playgroud)

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

例如找到这里.

简单有效:)

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

  • note visual studio 2012在代码中使用相同的正则表达式引擎进行查找/替换,因此上面变为:fooPatternToStart.*(.*\n)*?.*barPatternToEnd (4认同)

Fre*_*örk 19

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

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

/\*+ Object\::b:b~(StoredProcedure)(.*\n)#GO\n
Run Code Online (Sandbox Code Playgroud)

  • 注意二:确保你没有同时勾选"匹配整个单词",否则这不起作用! (2认同)

Ste*_*amm 17

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

(?s)start.*end
Run Code Online (Sandbox Code Playgroud)

认定

start
two
three
end
Run Code Online (Sandbox Code Playgroud)

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

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

start(.*\n)*.*end
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,您都可以通过插入替换多行的结果\n.

  • 贪婪版本在`start`和`end`之间匹配尽可能多的字符。如果你想找到下一个 `end`,请使用非贪婪版本:`(?s)start.*?end` 或 `start(.*\n)*?.*?end`。 (5认同)