Comment créer une expression régulière qui détecte les nombres hexadécimaux dans un texte?
Par exemple, «0x0f4», «0acdadecf822eeff32aca5830e438cb54aa722e3» et «8BADF00D».
Comment créer une expression régulière qui détecte les nombres hexadécimaux dans un texte?
Par exemple, «0x0f4», «0acdadecf822eeff32aca5830e438cb54aa722e3» et «8BADF00D».
Réponses:
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
/0x[\da-f]/i
, mais sinon, +1.
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 i
rend 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
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-F
choses courantes .
Ainsi, l'expression régulière demandée (c'est-à-dire avec facultatif 0x
) est:/(0x)?[[:xdigit:]]+/
Cela correspondra avec ou sans 0x
préfixe
(?:0[xX])?[0-9a-fA-F]+
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}
Si vous utilisez Perl ou PHP, vous pouvez remplacer
[0-9a-fA-F]
avec:
[[: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.).
Cette réponse est tirée de: http://ult-tex.net/info/perl/
\x
c'est l'équivalent \u
dans d'autres langues.
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.
Au cas où vous en auriez besoin dans une entrée où l'utilisateur peut taper 0
et 0x
aussi mais pas un nombre hexadécimal sans le 0x
préfixe:
^0?[xX]?[0-9a-fA-F]*$
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}