2

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

如果纯正则表达式太难,Ruby 解决方案就可以了。

4

4 回答 4

5

这应该这样做:

valid_sha1 = !((str =~ /\b[a-f0-9]{32,}\b/i).nil?)
于 2011-01-27T05:36:05.957 回答
2

您可以使用以下正则表达式。

s =~ /^[a-f0-9]{32,32}$/i
于 2011-01-27T05:35:25.480 回答
1

其他两个答案都需要以 SHA1 开头的行。如果 sha1 可以在行中的任何位置,请删除^

/[a-f0-9]{32}/i

您也不需要花括号中的第二个 32,就像您只指定一个数字一样,它必须完全匹配那么多。

于 2011-01-27T05:40:56.063 回答
0

如果您真的想要求单词由字母和数字组成(如您上面所问),那么您可以使用正向前瞻:

sha_array = line.scan(/(?=.{0,31}\d)(?=.{0,31}[a-f])\b[\da-f]{32}\b/i)

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

于 2011-01-27T16:54:54.147 回答