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

如何用正则匹配带global::前缀的C#完全限定类型名?

匹配带global::前缀的C#完全限定类型名的正则修正方案

问题分析

你当前使用的正则global((::|\.)\w+(?!\s|\())+存在两个核心问题:

  1. 前缀匹配不严谨:用(::|\.)允许了global.这种不符合C#规范的格式,而正确的前缀固定是global::
  2. 匹配范围失控:外层的+会贪婪匹配后续的.和标识符,负前瞻(?!\s|\()无法阻止匹配类型名后的方法/成员(因为方法前的.不在前瞻排除范围内),导致捕获到多余的方法名,甚至出现字符截断。

修正后的正则

global::(?:\w+\.)*\w+

如果需要严格符合C#标识符规则(标识符首字符必须是字母/下划线,后续可以是字母/数字/下划线),可以使用更精确的版本:

global::(?:[a-zA-Z_]\w*\.)*[a-zA-Z_]\w*

匹配效果验证

针对你提供的示例代码:

public global::libebur128.EBUR128StateInternal D
{
    get
    {
        var __result0 = global::libebur128.EBUR128StateInternal.__GetOrCreateInstance(((__Internal*)__Instance)->d, false);
        return __result0;
    }
}

修正后的正则会精准匹配到两个目标字符串:

global::libebur128.EBUR128StateInternal
global::libebur128.EBUR128StateInternal

完全符合你的期望结果。

正则逻辑说明

  • global:::精确匹配C#完全限定类型名的固定前缀
  • (?:\w+\.)*:非捕获组,匹配0或多个命名空间段(每个段由标识符加.组成)
  • \w+:匹配最后的类型名标识符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:31:17