您好我正在尝试创建一个应用程序来帮助我切换我的 Catch-Block 的测试内容并将它们替换为生产内容。我能够阅读我的文件并解析内容,但是在创建正则表达式(我仍然是全新的)来识别 try-catch 块时遇到问题,因此我可以选择删除或更改内容捕捉块。请问谁能帮我解决这个问题??
到目前为止,我有下面的表达式(根本不起作用)
try{*}catch(*){*)
提前致谢。
您不能编写执行此操作的正则表达式,因为正则表达式不能用于匹配嵌套模式。这意味着它将无法识别您的右大括号何时出现与代码中的其他嵌套大括号。您将需要一个解析器生成器,例如 ANTLR,就像链接的答案建议的那样来完成此操作。
我建议看一下正在开发的微软Roslyn 编译器。它的 API 应该可以让你完成你想做的任何事情。它目前处于预览阶段。
我认为这会促使您找到解决方案:
try\s*\{[^{}]*([^{}]*\{[^{}]*\}[^{}]*)*[^{}]*\}\s*catch\s*\([^()]*(\([^()]*\))*\)\s*\{[^{}]*([^{}]*\{[^{}]*\}[^{}]*)*[^{}]*\}
try\s*
匹配 try 后跟零个或多个空格。
\{[^{}]*([^{}]*\{[^{}]*\}[^{}]*)*[^{}]*\}
匹配一个块({
后跟零个或多个字符,除了 { 和 } 后跟零个或多个块,每个块之前和之后都有任意数量的字符)
\s*catch\s*\([^()]*(\([^()]*\))*\)
匹配前后零个或多个空格catch
,然后匹配括号内的内容()
\s*\{[^{}]*([^{}]*\{[^{}]*\}[^{}]*)*[^{}]*\}
类似于 try 块
注意:如果注释包含{
s 或}
s可能会失败