使用Visual Studio正则表达式搜索来查找空的Try / Catch块

Fro*_*840 4 regex vb.net visual-studio

我已经找到了与此问题相关的C#版本,但是我没有将其转换为搜索VB.net的语法,而regexes并不是我的强项,所以我将发布得到,然后把自己放在栈的摆布上。

我设法把正则表达式放在一起:

Catch+\s+\b(_\w+|[\w-[0-9_]]\w*)\b+\s+As+\s+Exception+[\S|\r?\n]
Run Code Online (Sandbox Code Playgroud)

Catches未指定的异常匹配(加上换行符,因为这是我正在努力的一部分)。我希望将其扩展为寻找空的Try / Catches,但显然我缺少了一些东西。

我要*+(Catch|End|Finally)在以前的正则表达式中添加以下内容:

Catch+\s+\b(_\w+|[\w-[0-9_]]\w*)\b+\s+As+\s+Exception+[\S|\r?\n]*+(Catch|End|Finally)
Run Code Online (Sandbox Code Playgroud)

据我所知,它应该与任何空白/换行符匹配,然后与有效的End-of-Catch关键字匹配,但是我此时停止获取结果。

我在这里搞砸了吗?

Gus*_*dor 5

尝试这个:

(Catch(\s?.+As.+)?(\r?\n|\s)*)+(Finally)?(\r?\n|\s)*End Try
Run Code Online (Sandbox Code Playgroud)

花了我很长时间才能锻炼。有时,Visual Studio确实很痛苦:D的秘密是换行符的正确匹配。我重复(\r?\n|\s)*很多次。这符合\r\n\n\s零或多次。

你搞砸了什么?

通常,在正则表达式和编程中,简单性是关键。您试图匹配完整的VB.net异常处理语法,并在某个地方犯了一个小错误。有时,如果您真的不在乎内容,则匹配每个字符(。*)就可以了(您想跳过区域,例如这里我们不在乎实际的异常类型,即使它在那里也是如此!)。可以肯定,Visual Studio使用延迟迭代作为标准。