如何修改正则表达式以仅匹配C#合法类定义行(排除注释与字符串)
修正C#类定义匹配正则,避免误匹配注释和字符串
要解决原正则误匹配注释、字符串的问题,核心是先排除这些非代码区域,再精准匹配合法的类定义。直接调整正则表达式即可实现需求:
最终正则表达式
(?<!//.*)(?<!/\*.*)(?<!".*)\b(public|protected|internal|private|static|abstract)\b\s+(class)\b(?!.*")(?!.*\*/)
关键修正细节
- 用
(?<!//.*)做负向预查,确保当前位置不在单行注释(//开头的内容)范围内 - 用
(?<!/\*.*)排除多行注释的起始区域,避免匹配/* ... public class ... */里的内容 - 用
(?<!".*)和(?!.*")限制匹配范围,跳过双引号包裹的字符串内容 - 用
(?!.*\*/)排除多行注释的结尾区域 - 把原正则的
\W+替换为\s+,因为类修饰符和class之间只能是空白字符(空格、制表符等),\W会匹配符号,容易引入误匹配
额外提示
如果要处理多行类定义、嵌套注释/字符串这类复杂场景,单纯正则会有局限性。这种情况下建议用专门的C#语法分析器(比如Roslyn),比正则更稳定可靠。
内容的提问来源于stack exchange,提问作者Jonas Lindahl
相关产品推荐
相关产品推荐

