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

Regex 使用Visual Studio正则表达式搜索查找空的Try/Catch块,regex,vb.net,visual-studio,Regex,Vb.net,Visual Studio,我已经找到了这个问题的相关C#版本,但我没能将其转换为搜索VB.net的语法,而且正则表达式一开始不是我的强项,所以我会发布我得到的,然后任由堆栈摆布 我成功地将正则表达式组合在一起: Catch+\s+\b(_\w+|[\w-[0-9_]]\w*)\b+\s+As+\s+Exception+[\S|\r?\n] 它与匹配,捕获未指定异常的(加上换行符,因为这是我工作的一部分)。我希望扩展它以查找空的Try/catch,但显然我遗漏了一些东西 我在前面的正则表达式中添加了*+(Catch |

我已经找到了这个问题的相关C#版本,但我没能将其转换为搜索VB.net的语法,而且正则表达式一开始不是我的强项,所以我会发布我得到的,然后任由堆栈摆布

我成功地将正则表达式组合在一起:

Catch+\s+\b(_\w+|[\w-[0-9_]]\w*)\b+\s+As+\s+Exception+[\S|\r?\n]
它与
匹配,捕获未指定异常的
(加上换行符,因为这是我工作的一部分)。我希望扩展它以查找空的Try/catch,但显然我遗漏了一些东西

我在前面的正则表达式中添加了
*+(Catch | End | Finally)
,以给出:

Catch+\s+\b(_\w+|[\w-[0-9_]]\w*)\b+\s+As+\s+Exception+[\S|\r?\n]*+(Catch|End|Finally)
据我所知,它应该与任何数量的空格/换行符匹配,然后是一个有效的Catch结束关键字,但我在这一点上不再得到结果

我搞砸了什么?试试这个:

(Catch(\s?.+As.+)?(\r?\n|\s)*)+(Finally)?(\r?\n|\s)*End Try
我花了很长时间锻炼。VisualStudio有时真的很痛苦:D秘诀是换行符的正确匹配。我重复了很多次。这与
\r\n
\n
\s
零次或多次匹配

你搞砸了什么?


通常在正则表达式和编程中,简单性是关键。您试图匹配完整的VB.net异常处理语法,但在某些地方犯了一个小错误。有时,如果您真的不关心内容(您想跳过区域,就像这里我们不关心实际的异常类型,如果它存在的话!),那么匹配每个字符(.*)就行了。我非常确定visual studio使用惰性迭代作为标准。

也可能值得捕获注释!在这个正则表达式中有几件事情是完全错误的。1) 例如,您将字符类
[]
与分组括号
()
混合在一起。2)
\b+
毫无意义,应该会抛出一个错误3)让我们看看
[\w-[0-9\]]
\w
意味着匹配数字、字母和下划线,现在考虑到整个字符类,
[\w-[0-9\]
意味着再次匹配数字、字母、下划线、连字符、括号和0-9。4)
Catch+
我刚才在这里读了什么?匹配
Catc
和一个或多个
h
。基本上这是一个混乱,我建议你学习正则表达式。学习,或者只是阅读你最喜欢的语言手册,大多数时候它包括一个章节,涵盖正则表达式。有些工具可能很方便:,或者访问以获取其他1337工具和技巧:)@HamZa基础知识相对简单,因为当您出错时,它会崩溃并向您发出错误消息,您可以解决这些问题并从中学习。VisualStudio的“查找并替换自定义正则表达式”恐怖节目几乎没有文档记录,它只是默默地失败了,让您转向StackOverflow寻求帮助。@Frosty840“自定义正则表达式恐怖节目”。在这个万圣节来到你附近的剧院。战栗。它匹配catch块,但遗憾的是,它并不排除包含代码的块。它返回的搜索结果也很奇怪,但我认为这更多地与VisualStudio有关,而不是其他任何东西…@Frosty840它是否仅在代码存在时才匹配结束尝试行?我现在已经修好了。