С# Regex: Именованные действующие символы?

Что представляет собой действительное имя группы?

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

Ответ 1

Короткий ответ

Разрешенные символы [a-zA-Z0-9_]

Длинный ответ

В соответствии с Документы Microsoft:

имя не должно содержать знаков препинания и не может начинаться с числа.

Но это не очень специфично, поэтому давайте посмотрим на исходный код:

Исходный код для класса 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;
    }

И если вы хотите проверить это самостоятельно, этот скрипт .NET подтверждает, что есть много символов без пунктуации, которые не разрешены от имени группы захвата:

Ответ 2

Все, что соответствует \w, эффективно [a-zA-Z0-9_]

Не подтверждено, однако..