当前位置: 首页 > 知识库问答 >
问题:

如何将分支与负和正先行正则表达式匹配?

平庆
2023-03-14

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

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

(?=.*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

请使用这个在线工具(这是我发现的唯一一个支持负和正先行正则表达式的工具)。

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

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

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

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

你能帮一点忙吗?

共有1个答案

萧远
2023-03-14

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

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

查看正则表达式演示。

详情:

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

如果版本-数字/点作为整个字符串不允许,请使用

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

查看另一个正则表达式演示。

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

 类似资料:
  • 有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。

  • 问题内容: 我没有JavaScript方面的丰富经验,但是我正在尝试创建一个标记系统,而不是使用or ,而是使用。 我该如何使用而不是。我尝试做并添加,但是失败了。 问题答案: 您可以这样逃避它。 或只使用indexOf

  • 我有一根线,比如: 如何匹配每行的最后一个?顺便说一句,这是我试图在Sublime的文本中做到的。这些值不一致,就像我在这里看到的,我有几百行要替换。 我尝试了,但这与相匹配。

  • 问题内容: 是的,您没看错。我需要能够从正则表达式 生成 随机文本的内容。因此,文本应该是随机的,但要与正则表达式匹配。看来它不存在,但我可能是错的。 仅举一个例子:该库将能够以“ ”作为输入,并生成诸如以下示例: abc abbbc bac 等等 更新:我自己创建了一些东西:Xeger。查看http://code.google.com/p/xeger/。 问题答案: 我刚刚创建了一个库来进行此操

  • 问题内容: 嗨,所有正则表达式高手,我都知道您在解决我的问题。呵呵 要么 要么 (dd-MMM-yyyy),其中yyyy不接受数字以外的任何其他字符 问题答案: 假设月份是3个字母的版本:例如1月,2月,3月。 更新了版本以匹配对问题的更改: 如前所述,这实际上不会验证日期,而只是验证字符串是否匹配以下格式: 1或2个数字,破折号,3个字母,破折号,4个数字 。

  • 我们得到了一些这样的内容: