让我们剖析各种规则并从中构建正则表达式部分:
它们可以包括
/
用于层次结构(目录)分组的斜杠,但斜杠分隔的组件不能以点开头.
或以序列结尾.lock
。# must not contain /.
(?!.*/.)
# must not end with .lock
(?<!.lock)$它们必须至少包含一个
/
。这会强制出现诸如heads /,tags /等类别,但是实际名称不受限制。如果使用该--allow-onelevel
选项,则该规则将被放弃。.+/.+ # may get more precise later
它们
..
在任何地方都不能有两个连续的点。(?!.*..)
它们不能在任何地方具有ASCII控制字符(即值小于
40
或的字节177 DEL
),空格,代字号~
,插入符^
或冒号:
。[^00-37177 ~^:]+ # pattern for allowed characters
他们在任何地方都不能有问号
?
,星号*
或方括号[
。请参阅以下--refspec-pattern
选项,了解此规则的例外情况。[^00-37177 ~^:?*[]+ # new pattern for allowed characters
它们不能以斜杠开头或结尾,也不能
/
包含多个连续的斜杠(有关--normalize
此规则的例外,请参阅下面的选项)^(?!/)
(?<!/)$
(?!.*//)它们不能以点结尾
.
。(?<!.)$
它们不能包含序列
@{
。(?!.*@{)
它们不能包含
。(?!.*\)
将所有这些拼凑在一起,我们得出以下怪异现象:
^(?!.*/.)(?!.*..)(?!/)(?!.*//)(?!.*@{)(?!.*\)[^00-37177 ~^:?*[]+/[^00-37177 ~^:?*[]+(?<!.lock)(?<!/)(?<!.)$
而且,如果您要排除以这些开头的内容,
build-则只需添加另一个前行即可:
^(?!build-)(?!.*/.)(?!.*..)(?!/)(?!.*//)(?!.*@{)(?!.*\)[^00-37177 ~^:?*[]+/[^00-37177 ~^:?*[]+(?<!.lock)(?<!/)(?<!.)$
可以通过合并一些寻找通用模式的东西来对此进行优化:
^(?!@$|build-|/|.*([/.].|//|@{|\))[^00-37177 ~^:?*[]+/[^00-37177 ~^:?*[]+(?<!.lock|[/.])$
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)