Regex n'analyse pas vraiment. Essayez d'extraire toutes les choses semblables à des nombres et éliminez celles qui ne sont pas hexadécimales.
Blender
Réponses:
193
Que diriez-vous de ce qui suit?
0[xX][0-9a-fA-F]+
Correspond à l'expression commençant par un 0, suivi d'un x minuscule ou majuscule, suivi d'un ou plusieurs caractères dans les plages 0-9, ou af ou AF
Cela pourrait être raccourci à /0x[\da-f]/i, mais sinon, +1.
Niklas B.
20
@NiklasB. Votre raccourci n'est valide que si vous utilisez perl regex, si vous utilisez POSIX regex, la solution de Steven est la plus courte. Dans tous les cas, la solution de Steven fonctionne à la fois pour perl et POSIX regex.
David M. Syzdek
Je l'ai! La solution de Steven est bonne si le nombre hexadécimal commence par 0x ou 0X. Celui-ci devrait mieux fonctionner: ^ [0-9A-F] + $ Il peut également reconnaître des motifs hexadécimaux comme: '535GH0G73' Pour Java, nous pouvons utiliser par exemple String.matches () pour vérifier cela .. Merci les gars pour la réponse :)
saurcery
2
'0x [\ da-f] {2}' il vaut mieux limiter le nombre aussi
Yazan Rawashdeh
2
Cela correspondrait-il aux deuxième et troisième numéros d'exemple, 0acdadecf822eeff32aca5830e438cb54aa722e3 et 8BADF00D?
Peter Mortensen
44
La syntaxe exacte dépend de vos exigences exactes et de votre langage de programmation, mais essentiellement:
/[0-9a-fA-F]+/
ou plus simplement, le irend insensible à la casse.
/[0-9a-f]+/i
Si vous avez la chance d'utiliser Ruby, vous pouvez faire:
/\h+/
EDIT - La réponse de Steven Schroeder m'a fait réaliser que ma compréhension du bit 0x était erronée, j'ai donc mis à jour mes suggestions en conséquence. Si vous souhaitez également faire correspondre 0x, les équivalents sont
/0[xX][0-9a-fA-F]+//0x[0-9a-f]+/i/0x[\h]+/i
AJOUT DE PLUS - Si 0x doit être facultatif (comme l'indique la question):
@noobDroid Qu'aimeriez-vous que je vous explique précisément?
SimonMayer
18
Ce n'est pas grave, mais la plupart des moteurs regex supportent les classes de caractères POSIX, et il y a [:xdigit:]pour les caractères hexadécimaux correspondants, ce qui est plus simple que les 0-9a-fA-Fchoses courantes .
Ainsi, l'expression régulière demandée (c'est-à-dire avec facultatif 0x) est:/(0x)?[[:xdigit:]]+/
Si vous recherchez un caractère hexadécimal spécifique au milieu de la chaîne, vous pouvez utiliser "\ xhh" où hh est le caractère hexadécimal. J'ai essayé et ça marche. J'utilise le framework pour C ++ Qt mais cela peut résoudre des problèmes dans d'autres cas, cela dépend de la saveur que vous devez utiliser (php, javascript, python, golang, etc.).
Hey! Bien que cela puisse être vrai pour perl, cela ne semble pas être le cas pour les expressions régulières dans tous les langages de programmation. Selon cela,\x c'est l'équivalent \udans d'autres langues.
Maurice le
Qu'est-ce que "anda spécifique"?
Peter Mortensen
0
Celui-ci garantit que vous n'avez pas plus de trois paires valides:
(([a-fA-F]|[0-9]){2}){3}
Plus ou moins de trois paires de caractères valides ne correspondent pas.
Un autre exemple: les valeurs hexadécimales pour les couleurs css commencent par un signe dièse ou dièse (#), puis six caractères qui peuvent être soit un chiffre, soit une lettre entre A et F, inclus.
Réponses:
Que diriez-vous de ce qui suit?
Correspond à l'expression commençant par un 0, suivi d'un x minuscule ou majuscule, suivi d'un ou plusieurs caractères dans les plages 0-9, ou af ou AF
la source
/0x[\da-f]/i
, mais sinon, +1.La syntaxe exacte dépend de vos exigences exactes et de votre langage de programmation, mais essentiellement:
ou plus simplement, le
i
rend insensible à la casse.Si vous avez la chance d'utiliser Ruby, vous pouvez faire:
EDIT - La réponse de Steven Schroeder m'a fait réaliser que ma compréhension du bit 0x était erronée, j'ai donc mis à jour mes suggestions en conséquence. Si vous souhaitez également faire correspondre 0x, les équivalents sont
AJOUT DE PLUS - Si 0x doit être facultatif (comme l'indique la question):
la source
Ce n'est pas grave, mais la plupart des moteurs regex supportent les classes de caractères POSIX, et il y a
[:xdigit:]
pour les caractères hexadécimaux correspondants, ce qui est plus simple que les0-9a-fA-F
choses courantes .Ainsi, l'expression régulière demandée (c'est-à-dire avec facultatif
0x
) est:/(0x)?[[:xdigit:]]+/
la source
Cela correspondra avec ou sans
0x
préfixe(?:0[xX])?[0-9a-fA-F]+
la source
Il est à noter que la détection d'un MD5 (qui est l'un des exemples) peut être effectuée avec:
la source
Si vous utilisez Perl ou PHP, vous pouvez remplacer
avec:
la source
Pour mémoire, je préciserais ce qui suit:
Ce qui diffère en ce qu'il vérifie qu'il doit contenir les six caractères valides et sur x minuscule ou majuscule au cas où nous en aurions un.
la source
Si vous recherchez un caractère hexadécimal spécifique au milieu de la chaîne, vous pouvez utiliser "\ xhh" où hh est le caractère hexadécimal. J'ai essayé et ça marche. J'utilise le framework pour C ++ Qt mais cela peut résoudre des problèmes dans d'autres cas, cela dépend de la saveur que vous devez utiliser (php, javascript, python, golang, etc.).
Cette réponse est tirée de: http://ult-tex.net/info/perl/
la source
\x
c'est l'équivalent\u
dans d'autres langues.Celui-ci garantit que vous n'avez pas plus de trois paires valides:
Plus ou moins de trois paires de caractères valides ne correspondent pas.
la source
Au cas où vous en auriez besoin dans une entrée où l'utilisateur peut taper
0
et0x
aussi mais pas un nombre hexadécimal sans le0x
préfixe:la source
Un autre exemple: les valeurs hexadécimales pour les couleurs css commencent par un signe dièse ou dièse (#), puis six caractères qui peuvent être soit un chiffre, soit une lettre entre A et F, inclus.
la source