正则表达式帮助 - 匹配除MD5哈希之外的单词

时间:2010-10-16 22:55:16

标签: regex

我无法弄清楚除了MD5哈希之外还会抓住每个单词的正则表达式。 - 我正在使用[a-zA-Z0-9]+来匹配每个单词。我如何增加它,以便它忽略我认为像[a-fA-F0-9]{32}的东西,它将匹配MD5哈希。我的问题是关于正则表达式。

8e85d8b3be426bc8d370facdb0ad3ad0
string
stringString
63994b32affec18c2a428cdfcb0e2823
stringSTRINGSTING333
34563994b32dddddddaffec18c2a
stringSTRINGSTINGsrting

感谢您的帮助。 :)

3 个答案:

答案 0 :(得分:2)

这种事情通常是以负面的前瞻方式完成的:

/\b(?![0-9a-f]{32}\b)[A-Za-z0-9]+\b/

在每个单词的开头,(?![0-9a-fA-F]{32}\b)尝试精确匹配32个十六进制数字,后跟单词边界。如果成功,则正则表达式失败。

答案 1 :(得分:1)

以下对我来说很好:

/^[a-f0-9]{8}(-)[a-f0-9]{4}(-)[a-f0-9]{4}(-)[a-f0-9]{4}(-)[a-f0-9]{12}$/i

答案 2 :(得分:0)

如前所述,只需抓住所有与MD5哈希不匹配的单词即可 (首先,你必须拆分字符串)

var s = "8e85d8b3be426bc8d370facdb0ad3ad0\nstring\nstringString\n63994b32affec18c2a428cdfcb0e2823\nstringSTRINGSTING333\n34563994b32dddddddaffec18c2a\nstringSTRINGSTINGsrting";

words = [];
words_all = s.split(/\s+/);
for (i in words_all) {
  word = words_all[i];
  if (! word.match(/^[a-fA-F0-9]{32}$/)) { words.push(word) }
}
// words = ["string", "stringString", "stringSTRINGSTING333", "34563994b32dddddddaffec18c2a", "stringSTRINGSTINGsrting"]

(假设,根据您的原始代码,您想使用javascript)