正则表达式不同的哈希值

Regex different hashes

所以我正在努力使用正则表达式。我将从我想要实现的目标开始,然后继续“到目前为止”实现的目标。

所以例如我有提交名称行

merge(#2137): done something
Merge pull request #420 from Example/branch
feat(): done something [#2137JDN]
merge(#690): feat(): done something [#2137JDN]

而且我只想通过 PR ID 进行 grep,或者如果它不存在,那么它将通过第二个哈希进行搜索

#2137
#420
#2137JDN
#690

现在我有了这个正则表达式,但它并不完美

/(\(|\s|\[)(#\d+|#.+)(\)|\s|\])/g

因为它正在捕捉这个

(#2137)
\s#420\s
[#2137JDN]
(#690)[#2137JDN]

我如何改进它以获得我想要的东西?

您可以使用 #[\dA-Z]+ 模式仅对哈希进行 grep。

command | grep -Po "#[\dA-Z]+"

其中 returns 所有匹配的字符串(在我们的例子中 - 哈希)

#2137
#420
#2137JDN
#690
#2137JDN

很遗憾,grep 不支持 non-greedy 功能。请参阅 this 答案。