Что такое регулярное выражение для допустимых тегов Git? - PullRequest
0 голосов
/ 04 июня 2018

Этот вопрос объясняет, что такое допустимый тег в Git.Однако существует ли хорошо проверенное и широко используемое регулярное выражение, которое следует этим правилам?

Что такое регулярное выражение для допустимых тегов Git?

1 Ответ

0 голосов
/ 04 июня 2018

Вот как я бы перевел эти правила в регулярные выражения Perl:

my $base = qr{ [!"#\$%&'()+,\-0-9;<=>\@A-Z\]_`a-z{|}] }x;

Это регулярное выражение для одного символа в разрешенном базовом наборе.Если вы хотите перевести это на другой диалект языка / регулярных выражений, обратите внимание, что $ и @ здесь экранированы только потому, что они инициируют интерполяцию переменных в Perl.

Это белый список, потому что мне кажется, что мне легче думатьо вещах таким образом.В качестве побочного эффекта это также запрещает любые символы, не относящиеся к ASCII.

Если вы хотите разрешить полный набор Unicode, с черным списком становится легче работать:

my $base = qr{ [^\x00-\x20\x1f~^:?*\[\\] }x;

(Или qr{ [^\x00-\x20\x1f~^:?*\[\\\@] | \@ (?! \{ ) }x для версии, включающей ограничение @{; см. Ниже.)

my $part = qr{ $base+ (?: \. $base+ )* \.? (?<! \.lock ) }x;

Это соответствует одной отделенной от косой черты части.Он реализует ограничение, согласно которому детали не могут начинаться с . или содержать .. или заканчиваться .lock.

my $full_ref = qr{\A (?! \@ \z | .* \@\{ ) $part (?: / $part )+ (?<! \. ) \z}sx;

Это соответствует полному реф.Он добавляет несколько дополнительных ограничений:

  • Все это не может быть @.(Это правило технически избыточно, потому что нам всегда требуется /, но я все равно его включил.)

  • @{ нигде не может быть.Вместо отдельной предварительной проверки мы могли бы также изменить $base таким образом:

    my $base = qr{ [!"#\$%&'()+,\-0-9;<=>A-Z\]_`a-z{|}] | \@ (?! \{ ) }x;
    
  • Должно быть как минимум две части, разделенные /.

  • Все это не может заканчиваться ..

Перевод, например, C #, оставлен в качестве упражнения для читателя.: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...