正则表达式:.Net Framework平衡组/递归匹配搜索源码中的函数/方
有时候,我们需要用正则表达式来分析一个计算式中的符号配对情况。比如,使用表达式 “ 目前并不是所有的正则表达式引擎都具备了递归匹配功能,根据网上的一些资料得到的信息是目前只有Perl,PHP,GRETA,还有.Net Framework提供了此项功能。 在.Net Framework中这个特性是由《平衡组定义》来实现的。 (((?'Open'()[^()]*)+((?'Close-Open'))[^()]*)+)*(?(Open)(?!))$
如果要匹配java代码中的一个方法。。。上面的表达式要稍微修改下。 @Override[^{}]+{[^{}]*(((?'Open'{)[^{}]*)+((?'Close-Open'})[^{}]*)+)*(?(Open)(?!))[nrt ]*}
下图是显示的匹配结果 表达式中 掌握了这个方法后,我们可以进一步匹配代码中所有的有 @Override[nrt ]*[^{}]*<[^<>]*(((?'Open'<)[^<>]*)+((?'Close-Open'>)[^<>]*)+)*(?(Open)(?!))[nrt ]*>[^{}]+{[^{}]*(((?'Open'{)[^{}]*)+((?'Close-Open'})[^{}]*)+)*(?(Open)(?!))[nrt ]*}
下图是显示的匹配结果 表达式中 注意: 《分组构造》https://msdn.microsoft.com/zh-cn/library/az24scfc.aspx#grouping_constructs (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |