在VS2022中使用正则表达式查找迪米特法则违规情况
在Visual Studio 2022中用C#正则查找迪米特法则违规
需求说明
需要识别this后连续两次及以上通过.或->访问成员的代码片段(即链式调用超过一层的违规情况),最终提取不含this和分号的违规访问链。
输入输出示例
输入代码
this->a->b->c; this->a.b.c; this->a.b->c; this->a->b.c; this->a;
预期匹配结果
a->b->c a.b.c a.b->c a->b.c NO MATCH
正确的C#正则表达式
使用以下正则可精准匹配并捕获目标片段:
this(?:->|\.)(\w+(?:(?:->|\.)\w+){2,})
正则解析
this:精准匹配开头的关键字this(?:->|\.):非捕获组,匹配成员访问符.或->(不捕获该组,避免干扰结果提取)(\w+(?:(?:->|\.)\w+){2,}):捕获目标片段的组:\w+:匹配第一个标识符(如示例中的a)(?:(?:->|\.)\w+){2,}:非捕获组,匹配至少两次「成员访问符+标识符」的组合,确保存在至少两次成员访问(对应链式调用的多层违规)
在VS2022中的使用步骤
- 打开「在文件中查找」对话框(快捷键
Ctrl+Shift+F) - 点击对话框中的
.*按钮,切换到正则表达式模式 - 将上述正则粘贴到「查找内容」输入框
- 若要直接查看捕获的违规片段,可点击对话框右侧的
...按钮,在选项中勾选「显示捕获组」,此时匹配结果会单独展示目标片段
之前尝试的正则问题说明
\((\b(?!this\b)[\s\S]*?)\):匹配括号内不含this的内容,与需求完全无关([\s\S]*?)(this):仅匹配this之前的任意内容,无法识别链式访问this(.|->)(.*(.|->).*(.|->).*):.*会匹配任意字符(包括无关内容),未限定标识符规则,容易出现误匹配,且无法精准捕获目标片段
内容的提问来源于stack exchange,提问作者sanitizedUser
相关产品推荐
相关产品推荐

