regex GitLab推送规则中的正则表达式锚

xxhby3vn  于 12个月前  发布在  Git
关注(0)|答案(1)|浏览(92)

希望你一切都好,
我是GitLab的新手,我试图添加一个推送规则来限制推送操作。我有这个regex:

^(build|test)(: ([a-z].{0,70}[^\\.]\s+))(\((JIRA|CARD)-[0-9]+)\)\n$\n(^Team: (Dragons|Eagles))$

在GitLab中配置,这是正确的提交消息

test: testing commit message (JIRA-1235)

Team: Dragons

但是如果我发送一个像这样的提交消息:

test: testing commit message (JIRA-1235)

Team: Dragons

test: testing commit message (JIRA-1235)

Team: Dragons

由于正则表达式匹配提交/推送成功,我如何将正则表达式限制为一个匹配,而不允许多个消息/匹配。

ncgqoxb0

ncgqoxb01#

GitLab CI uses the re2 engine ;这个引擎supports\A\z锚,它们相应地匹配字符串的最开始和最结束。简单地使用它们而不是^$。也就是说,新的正则表达式应该看起来像这样:

\A
(build|test)(: ([a-z].{0,70}[^\\.]\s+))(\((JIRA|CARD)-[0-9]+)\)
\n\n
(Team: (Dragons|Eagles))
\z

试试on regex101.com
请注意,它是\z,带有一个z。这很容易与\Z混淆,在PCRE和.NET等支持的引擎中,\Z匹配字符串的结尾(与\z相同)或最后一行结束符之前的位置(如果它也是字符串的最后一个字符)。

相关问题