gpt4 book ai didi

regex - 什么是有效 Git 标签的正则表达式?

转载 作者:太空狗 更新时间:2023-10-29 14:03:25 27 4
gpt4 key购买 nike

This question解释什么是 Git 中的有效标签。但是,是否有遵循这些规则的经过良好测试和广泛使用的正则表达式?

什么是有效 Git 标签的正则表达式?

最佳答案

下面是我如何将这些规则转换为 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#留给读者作为练习。 :-)

关于regex - 什么是有效 Git 标签的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50686398/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com