【问题标题】:Grep/bash regex - combination of alternation and set of numbersGrep/bash 正则表达式 - 交替和一组数字的组合
【发布时间】:2019-08-16 17:46:25
【问题描述】:

我最终需要匹配以下任何一项: AD-123, ad-123, AD123, and ad123

到目前为止我所拥有的是

| grep -oP 'AD-|ad-|AD|ad'[0-9]\+)

但它只匹配字母而完全忽略了数字,我想不出一种对 bash 友好的方式来做到这一点。

上下文/用例:prepare-commit-msg githook,我想从分支名称中获取 Jira 票证并将其添加到任何提交消息中。 Jira 票证将按照 feature/version/ticker-keywords 的分支命名约定以上述方式之一编写(例如 feature/1.1.3/ad-123-some-branch)

【问题讨论】:

  • grep -oE '(AD|ad)-?[0-9]+'?还是grep -oE "(AD|ad)[-']?[0-9]+"
  • 试试(?:AD|ad)-?\d+
  • | grep -oE "(AD|ad)[-']?[0-9]+" 工作,谢谢@WiktorStribiżew
  • 添加了answer
  • 记住grep 不是标准bash shell 的一部分。它们是与操作系统一起打包的外部二进制文件。如果您不是为此寻找内置的 bash 实用程序,请从标题和标签中删除字符串

标签: regex bash grep githooks


【解决方案1】:

你可以使用

| grep -oE "(AD|ad)[-']?[0-9]+"

这是一个匹配的 POSIX ERE(由于 -E 选项)正则表达式

  • (AD|ad) - ADad(不是 aDAd,因为根据您的要求,这是不允许的)
  • [-']? - 可选的 -'
  • [0-9]+ - 1 位或多位数字

可视化:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-29
    • 2011-02-04
    • 2018-04-16
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    相关资源
    最近更新 更多