繁体   English   中英

用于匹配“global::”前缀完全限定 C# 类型名称的正则表达式

[英]Regex to match a "global::" prefixed fully qualified C# type name

我正在尝试匹配完全限定的 C# 类型名称,但是 \w+ 之后的 + 捕获了太多:

global((::|\.)\w+(?!\s|\())+

尝试使用量词和负前瞻但没有成功。

在线沙箱:

https://regex101.com/r/L6Y8kv/1

样本:

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

结果:

global::libebur128.EBUR128StateInterna
global::libebur128.EBUR128StateInternal.__GetOrCreateInstanc

预期的:

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

对于示例数据,您可以使用:

\bglobal::[^\W_]+(?:\.[^\W_]+)*

模式匹配:

  • \bglobal::一个单词边界,后跟匹配的global::
  • [^\W_]+匹配除_以外的1+个单词字符
  • (?:\.[^\W_]+)*可选重复匹配. 和 1+ 个单词字符,不包括_

请参阅regex101 演示

如果最后一部分不应该跟在(并且你不想考虑下划线,你可以添加一个单词边界和一个否定的前瞻:

\bglobal::\w+(?:\.\w+)*\b(?!\()

模式匹配:

  • \b单词边界
  • global::逐字匹配
  • \w+匹配 1+ 个单词字符
  • (?:\.\w+)*可选择重复. 和 1+ 个单词字符
  • \b单词边界(以防止回溯以使下一个断言为真)
  • (?!\()否定lookahead,assert not (直接在当前position右边

regex101 演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM