You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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中的使用步骤

  1. 打开「在文件中查找」对话框(快捷键Ctrl+Shift+F)
  2. 点击对话框中的.*按钮,切换到正则表达式模式
  3. 将上述正则粘贴到「查找内容」输入框
  4. 若要直接查看捕获的违规片段,可点击对话框右侧的...按钮,在选项中勾选「显示捕获组」,此时匹配结果会单独展示目标片段

之前尝试的正则问题说明

  • \((\b(?!this\b)[\s\S]*?)\):匹配括号内不含this的内容,与需求完全无关
  • ([\s\S]*?)(this):仅匹配this之前的任意内容,无法识别链式访问
  • this(.|->)(.*(.|->).*(.|->).*):.*会匹配任意字符(包括无关内容),未限定标识符规则,容易出现误匹配,且无法精准捕获目标片段

内容的提问来源于stack exchange,提问作者sanitizedUser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:00:31