如何将分支与负向和正向前瞻正则表达式相匹配?
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.*$
在这里,^
将匹配字符串的开头,然后 (?!version-[\d.]+$)
将触发检查:如果有 version-
后跟 1+ digits/dots 直到字符串结尾 ($
) 匹配将失败。
我正在处理一些构建,必须编写一个正则表达式 以包含一些分支,但排除其他分支(以便创建构建)。
我能想到的最好的 是这个正则表达式,它使用正负前瞻 来匹配分支名称:
(?=.*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)
- 如果在字符串 的开头有 .*
- 任意 0+ 个字符(换行符除外)12\.3
-12.3
子串.*
- 任意 0+ 个字符(换行符除外)$
- 字符串结尾。
version-
、1+ 个数字、一个点和一个数字,则匹配失败的否定前瞻
如果不允许 version-
+ digits/dots 作为 整个字符串 ,请使用
^(?!version-[\d.]+$).*12\.3.*$
在这里,^
将匹配字符串的开头,然后 (?!version-[\d.]+$)
将触发检查:如果有 version-
后跟 1+ digits/dots 直到字符串结尾 ($
) 匹配将失败。