嗨,我正在尝试创建一个应用程序,以帮助我切换出我的Catch-Block的测试内容,并将它们替换为生产内容。我能够读取我的文件并解析其内容,但是在创建regex(我还是个新手)以识别try-catch块时遇到了问题,因此我可以选择删除或更改catch块的内容。谁能帮我解决这个问题??
到目前为止,我有下面的表达式(根本不起作用)
try{*}catch(*){*)提前谢谢。
发布于 2013-02-23 11:55:49
您不能编写执行此操作的正则表达式,因为正则表达式can't be used to match nested patterns。这意味着它不能识别代码中出现右大括号和其他嵌套大括号的时间。您将需要一个解析器生成器,例如ANTLR,正如链接答案所建议的那样。
发布于 2013-02-23 15:31:08
我建议你看看微软正在开发中的Roslyn compiler。它的API应该可以让你完成你想做的任何事情。它目前正在预览中。
发布于 2013-02-23 19:13:56
我认为这会促使你找到一个解决方案:
try\s*\{[^{}]*([^{}]*\{[^{}]*\}[^{}]*)*[^{}]*\}\s*catch\s*\([^()]*(\([^()]*\))*\)\s*\{[^{}]*([^{}]*\{[^{}]*\}[^{}]*)*[^{}]*\}try\s*匹配,后跟零个或多个空格。
\{[^{}]*([^{}]*\{[^{}]*\}[^{}]*)*[^{}]*\}匹配一个块({后跟除{和}之外的零个或多个字符,然后是零个或多个块,每个块前后都有任意数量的字符)
\s*catch\s*\([^()]*(\([^()]*\))*\)匹配catch前后的零个或多个空格,然后匹配括号()中的内容
类似于try块的\s*\{[^{}]*([^{}]*\{[^{}]*\}[^{}]*)*[^{}]*\}
注意:如果注释包含{s或}s,则可能会失败
https://stackoverflow.com/questions/15036814
复制相似问题