Expression régulière pour un nombre hexadécimal?


114

Comment créer une expression régulière qui détecte les nombres hexadécimaux dans un texte?

Par exemple, «0x0f4», «0acdadecf822eeff32aca5830e438cb54aa722e3» et «8BADF00D».


1
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


35
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):

/(0x)?[0-9a-f]+/i

pouvez-vous m'expliquer la raison ci-dessus RE?
saurcery

4
@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:]]+/



11

Il est à noter que la détection d'un MD5 (qui est l'un des exemples) peut être effectuée avec:

[0-9a-fA-F]{32}

5

Si vous utilisez Perl ou PHP, vous pouvez remplacer

[0-9a-fA-F]

avec:

[[:xdigit:]]

Cela devrait être une réponse autonome.
Peter Mortensen

3

Pour mémoire, je préciserais ce qui suit:

/^[xX]?[0-9a-fA-F]{6}$/

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.


2

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/


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.


0

Au cas où vous en auriez besoin dans une entrée où l'utilisateur peut taper 0et 0xaussi mais pas un nombre hexadécimal sans le 0xpréfixe:

^0?[xX]?[0-9a-fA-F]*$

0

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.

^#[0-9a-fA-F]{6}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.