C#Regex:命名组有效字符?

时间:2010-11-24 21:11:51

标签: c# regex

什么构成有效的群组名称?

var re = new Regex(@"(?<what-letters-can-go-here>pattern)");

2 个答案:

答案 0 :(得分:4)

\w匹配的任何有效[a-zA-Z0-9_]

的内容

但未确认..

答案 1 :(得分:2)

简答

允许的字符为[a-zA-Z0-9_]

长答案

根据Microsoft docs

  

name 不得包含任何标点字符,也不能以数字开头。

但那不是很具体,所以让我们来看看源代码:

source code for the class System.Text.RegularExpressions.RegexParser向我们显示允许的字符基本上是[a-zA-Z0-9_]。但要非常精确,方法中有这个注释用于检查字符是否对捕获组名称有效:

internal static bool IsWordChar(char ch) {
        // According to UTS#18 Unicode Regular Expressions (http://www.unicode.org/reports/tr18/)
        // RL 1.4 Simple Word Boundaries  The class of <word_character> includes all Alphabetic
        // values from the Unicode character database, from UnicodeData.txt [UData], plus the U+200C
        // ZERO WIDTH NON-JOINER and U+200D ZERO WIDTH JOINER.
        return CharInClass(ch, WordClass) || ch == ZeroWidthJoiner || ch == ZeroWidthNonJoiner;
    }

如果您想自己测试一下,this .NET fiddle确认在捕获组的名称中有许多非标点字符不允许: