2010-10-16 5 views
4

Je n'arrive pas à trouver une regex qui saisira tous les mots à part les hachages MD5. - J'utilise [a-zA-Z0-9]+ pour correspondre à chaque mot. Comment puis-je augmenter cela afin qu'il ignore quelque chose que je pense est comme [a-fA-F0-9]{32} qui correspondrait aux hachages MD5. Ma question concerne Regex.Aide de Regex - faire correspondre les mots en plus des hachages MD5

8e85d8b3be426bc8d370facdb0ad3ad0 
string 
stringString 
63994b32affec18c2a428cdfcb0e2823 
stringSTRINGSTING333 
34563994b32dddddddaffec18c2a 
stringSTRINGSTINGsrting 

Merci pour toute aide. :)

+0

Je pense que vous n'êtes pas d'être très clair. Voulez-vous faire correspondre un mot à chaque extrémité d'un hachage MD5, chaque texte qui n'est pas MD5 ou autre chose? Vous pourriez donner un exemple clair de ce que vous voulez faire et non comment vous avez essayé de le faire. – steinar

+0

voulez-vous dire si la chaîne passée est un hachage MD5, alors faites quelque chose (ou rien), sinon le hachage MD5, puis faites autre chose? Est-ce que le passage dans la chaîne peut avoir à la fois un MD5 et un peu de texte après? –

+0

m'a fait plus clair désolé à ce sujet – Luke

Répondre

0

comme déjà dit, il suffit de saisir tous les mots qui ne correspondent pas à des hachages MD5.
(premier, vous devez diviser la chaîne)

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"] 

(en supposant, en fonction de votre code d'origine, vous souhaitez utiliser javascript)

2

Ce genre de chose se fait habituellement avec une préanalyse négative:

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

au début de chaque mot, (?![0-9a-fA-F]{32}\b) essaie de faire correspondre exactement 32 chiffres hexadécimaux suivie d'une limite de mot. Si cela réussit, l'expression régulière échoue.

+0

+1 pour une solution regex pure, bien que [A-Za-z0-9] doive être modifié si vous considérez "Hello!" un mot à associer plutôt que simplement "Hello" (et non le point d'exclamation). – PleaseStand

1

Ce qui suit fonctionne bien pour moi:

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

Cela correspondrait à un hachage MD5 sous la forme '8e85d8b3-be42-6bc8-d370-facdb0ad3ad0'. Cependant, la question était de savoir comment * ne pas * faire correspondre les hachages MD5. –

Questions connexes