【问题标题】:regex exactly match the short commit id in string正则表达式与字符串中的短提交 ID 完全匹配
【发布时间】:2021-07-11 01:38:08
【问题描述】:

像下面的字符串行,我想匹配必须有 1 个数字和字母的字符串(短提交 id)。

online-release-0202-c3764ab8-02022329     #i need c3764ab8  
online-release-0202-02022329-c3764ab8     #i need c3764ab8

我尝试了以下规则,但总是匹配一串纯数字

(?=([a-f0-9]{8}))

【问题讨论】:

  • 您的要求不清楚。您的示例 c3764ab8 有 5 个数字和 3 个字母。

标签: regex


【解决方案1】:

您还可以使用正向前瞻 (?= 断言一个字符 a-f 和一个数字,然后使用字边界 \b 匹配其中任何一个 8 次,以防止部分匹配。

\b(?=[0-9]*[a-f])(?=[a-f]*[0-9])[a-f0-9]{8}\b

模式匹配:

  • \b防止部分匹配的单词边界
  • (?=[0-9]*[a-f]) 正向前瞻,断言一个字符 a-f
  • (?=[a-f]*[0-9]) 正向前瞻,断言一个数字 0-9
  • [a-f0-9]{8} 匹配字符 a-f 或数字 0-9 8 次
  • \b一个字边界

Regex demo

【讨论】:

    【解决方案2】:

    假设commit id必须至少有一个数字和一个字母a-f

    试试这个正则表达式:

    (?!\d{8}|[a-f]{8})[a-f\d]{8}
    
    • (?!\d{8}|[a-f]{8})负前瞻,后面8个字符不是仅由数字或字母组成的a-f
    • [a-f\d]{8} 匹配 8 个数字字符和 a-f

    查看proof


    如果您检查的是git commit id,则此规则并不总是适用。它是一个 SHA 哈希,可以用纯数字或a-f 组成。因此02022329 也是一个合法的 git commit id。

    最好使您的命名约定保持一致以消除歧义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      相关资源
      最近更新 更多