151 votes

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

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

Par exemple, '0x0f4', '0acdadecf822eeff32aca5830e438cb54aa722e3', et '8BADF00D'.

2 votes

Regex ne parse pas vraiment. Essayez d'extraire tout ce qui ressemble à un nombre et de filtrer ceux qui ne sont pas des hexadécimaux.

255voto

Steven Schroeder Points 1505

Que diriez-vous de ce qui suit?

0[xX][0-9a-fA-F]+

Correspond à l'expression commençant par un 0, suivi soit d'un x en minuscule ou en majuscule, suivi d'un ou plusieurs caractères dans les plages 0-9, ou a-f, ou A-F

47 votes

Cela pourrait être abrégé en /0x[\da-f]/i, mais sinon, +1.

27 votes

@NiklasB. Votre raccourci n'est valable que si vous utilisez des regex perl, si vous utilisez des regex POSIX, alors la solution de Steven est la plus courte. De toute façon, la solution de Steven fonctionne pour les regex perl et POSIX.

0 votes

Compris! 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 les 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 :)

57voto

SimonMayer Points 4073

La syntaxe exacte dépend de vos besoins exacts et du langage de programmation, mais en gros:

/[0-9a-fA-F]+/

ou plus simplement, i rend la correspondance insensible à la casse.

/[0-9a-f]+/i

Si vous avez la chance d'utiliser Ruby, vous pouvez faire:

/\h+/

ÉDIT - La réponse de Steven Schroeder m'a fait réaliser que je n'avais pas bien compris la partie en 0x, j'ai donc mis à jour mes suggestions en conséquence. Si vous voulez également correspondre à 0x, les équivalents sont

/0[xX][0-9a-fA-F]+/
/0x[0-9a-f]+/i
/0x[\h]+/i

AJOUTÉ PLUS - Si 0x doit être facultatif (comme le laisse entendre la question):

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

0 votes

Pouvez-vous m'expliquer la raison de la RE ci-dessus?

4 votes

@noobDroid Que voudriez-vous que j'explique précisément?

25voto

smathy Points 6925

Pas grand-chose, mais la plupart des moteurs regex prennent en charge les classes de caractères POSIX, et il y a [:xdigit:] pour faire correspondre les caractères hexadécimaux, ce qui est plus simple que le commun 0-9a-fA-F.

Donc, le regex demandé (c'est-à-dire avec 0x en option) est : /(0x)?[[:xdigit:]]+/

0 votes

Pas powershell ou .net malheureusement.

15voto

Adaddinsane Points 132

Il convient de mentionner que détecter un MD5 (qui est l'un des exemples) peut être fait avec:

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

12voto

uszywieloryba Points 1240

Cela correspondra avec ou sans le préfixe 0x

(?:0[xX])?[0-9a-fA-F]+

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X