我正在尝试将常规文本中的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/