【发布时间】:2017-02-16 09:01:24
【问题描述】:
我正在处理一些构建,并且必须编写一个正则表达式包含一些分支,但排除其他分支(以便创建构建)。
我能想到的最好的是这个正则表达式,它使用正负前瞻来匹配分支名称:
(?=.*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)).)*$
你能帮忙吗?
【问题讨论】:
-
嗯,试试
^(?!version-\d.).*12\.3.*$。如果version-<digit+.>不允许作为整个字符串,请使用(?!version-[\d.]+$)而不是(?!version-\d.)。 -
Игорь,有用吗?
-
@WiktorStribiżew,是的,请提交答案,以便我投票并接受!非常感谢:)
标签: regex pcre regex-lookarounds