我需要一个正则表达式,它在包含字母和数字的行上检测“单词”并且是一定的长度,例如812d555c726d10c77b05cd164705665a
。目标是检测包含sha1摘要的行。
如果仅使用正则表达式,那么Ruby解决方案就可以了。
答案 0 :(得分:5)
这应该这样做:
valid_sha1 = !((str =~ /\b[a-f0-9]{32,}\b/i).nil?)
答案 1 :(得分:2)
您可以使用以下正则表达式。
s =~ /^[a-f0-9]{32,32}$/i
答案 2 :(得分:1)
其他答案都要求该行以SHA1开头。如果sha1可以在该行的任何位置,请删除^
/[a-f0-9]{32}/i
你也不需要花括号中的第二个32,就像你只指定一个数字一样,它必须与那个数字完全匹配。
答案 3 :(得分:0)
如果你真的想要要求这个单词由两个字母和数字组成(如上所述),那么你可以使用正向前瞻:
sha_array = line.scan(/(?=.{0,31}\d)(?=.{0,31}[a-f])\b[\da-f]{32}\b/i)
(?=
提前检查条件,不消耗任何东西。