如何在包含字母和数字的行上检测到“单词”?

时间:2011-01-27 05:32:00

标签: ruby regex validation sha

我需要一个正则表达式,它在包含字母和数字的行上检测“单词”并且是一定的长度,例如812d555c726d10c77b05cd164705665a。目标是检测包含sha1摘要的行。

如果仅使用正则表达式,那么Ruby解决方案就可以了。

4 个答案:

答案 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)

(?=提前检查条件,不消耗任何东西。