我正在尝试将常规文本中的SHA1与一个正则表达式匹配。

理想情况下,我要避免匹配单词。

可以肯定地说,完整的SHA1具有独特的模式(它们长而一致的长度)-因此我可以可靠地匹配它们-但是缩写的SHA1呢?

我可以依靠数字吗?

查看我的提交日志中的SHA1-数字始终出现在前3个字符中。但这太短了吗?我可以假设要出现一个数字之前需要考虑几个SHA1字符?

这不一定是100%准确的-我只需要在99%的时间内匹配缩写的SHA1。

最佳答案

您可以认为SHA1散列是完全随机的,因此减少了几率。给定数字不是数字的概率为6/16或0.375。三个SHA1数字全不是数字的概率为0.375 ** 3或0.0527(5%ish)。再次以六位数减少到0.00278(0.2%)。在五个数字处,所有字母的概率下降到1%以下(您说您想匹配99%的时间)。

制作始终匹配SHA1值的正则表达式很容易:

\b[0-9a-f]{5,40}\b

但是,这也可能匹配完美的五个字母词,例如“增加”或“褪色”。在我的/usr/share/dict/words文件中,有几个匹配的六个字母词:最有可能的是“accede”,“beaded”,“bedded”,“decade”,“faced”,“efface”和“facade”。在七个字母处,只有“事迹”,这不太可能出现在散文中。这完全取决于您可以容忍多少误报,以及您实际会遇到的可能单词。

关于git - 匹配SHA1的正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/468370/

10-13 09:16