我已经找到了这个问题的相关C#版本,但是我没有将其转换为搜索VB.net的语法,并且正则表达式不是我的强项第一个地方,所以我会发布我所得到的东西,然后把自己扔到堆栈的摆布上。
我设法将正则表达式组合在一起:
Catch+\s+\b(_\w+|[\w-[0-9_]]\w*)\b+\s+As+\s+Exception+[\S|\r?\n]
与未指明的例外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)
据我所知,应该匹配任何空格/换行符,然后是一个有效的Catch结尾关键字,但我不会在那时得到结果。
我搞砸了什么,这里?
答案 0 :(得分:5)
试试这个:
(Catch(\s?.+As.+)?(\r?\n|\s)*)+(Finally)?(\r?\n|\s)*End Try
我花了很多时间锻炼身体。视觉工作室有时是一种真正的痛苦:D秘诀是正确匹配换行符。我重复了(\r?\n|\s)*
。这匹配\r\n
或\n
或\s
零次或多次。
你搞砸了什么?
通常在正则表达式和编程中,简单性是关键。您试图匹配完整的VB.net异常处理语法并在某处犯一个小错误。有时候,匹配每个字符(。*)如果你真的不关心内容(你想跳过区域,就像这里我们不关心实际的异常类型,如果它甚至在那里!)。我是非常肯定visual studio使用惰性迭代作为标准。