【问题标题】:How to match branches with negative and positive lookahead regex?如何将分支与消极和积极的前瞻正则表达式匹配?
【发布时间】: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


【解决方案1】:

如果您需要失败所有匹配,其中包含12.3 的字符串以version-+一些数字/点开头,您可以使用

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

请参阅regex demo

详情

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

如果version- + 数字/点不被允许作为一个整个字符串,使用

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

another regex demo

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    相关资源
    最近更新 更多