如何将分支与负向和正向前瞻正则表达式相匹配?

How to match branches with negative and positive lookahead regex?

我正在处理一些构建,必须编写一个正则表达式 以包含一些分支,但排除其他分支(以便创建构建)。

我能想到的最好的 是这个正则表达式,它使用正负前瞻 来匹配分支名称:

(?=.*12\.3)^((?!(version-12\.3)).)*$

这是分支名称以及它们应该如何匹配:

bugfix-ISSUE-123-some-details-version-12.3
ISSUE-1234-some-other-details-version-12.3
bugfix-12.3
bugfix2-12.3
12.3stuff
stu12.3ff

// match everything above, but don't match anything from below

master
version-12.3
version-3.21
some-other-branch
bugfix-3.21
test

请使用this online tool(这是我发现的唯一一个支持负向和正向前瞻正则表达式)。

现在我想出的正则表达式 工作正常,除了以下 2 个分支 :

bugfix-ISSUE-123-some-details-version-12.3
ISSUE-1234-some-other-details-version-12.3

不包括它们的原因是因为我使用了这个排除 version-12.3(我想要的)的否定前瞻性正则表达式,但也排除了包含此字符串的任何其他内容(如 ISSUE-123-version-12.3,我想包括在内,但没有):

((?!(version-12\.3)).)*$

你能帮帮我吗?

如果您需要让所有以 12.3 开头的字符串以 version-+一些 digits/dots 开头的匹配失败,您可以使用

^(?!version-\d+\.\d).*12\.3.*$

参见regex demo

详情:

  • ^ - 字符串开头
  • (?!version-\d+\.\d) - 如果在字符串
  • 的开头有 version-、1+ 个数字、一个点和一个数字,则匹配失败的否定前瞻
  • .* - 任意 0+ 个字符(换行符除外)
  • 12\.3 - 12.3 子串
  • .* - 任意 0+ 个字符(换行符除外)
  • $ - 字符串结尾。

如果不允许 version- + digits/dots 作为 整个字符串 ,请使用

^(?!version-[\d.]+$).*12\.3.*$

参见 another regex demo

在这里,^ 将匹配字符串的开头,然后 (?!version-[\d.]+$) 将触发检查:如果有 version- 后跟 1+ digits/dots 直到字符串结尾 ($) 匹配将失败。