¿Expresión regular para un número hexadecimal?

114

¿Cómo creo una expresión regular que detecta números hexadecimales en un texto?

Por ejemplo, '0x0f4', '0acdadecf822eeff32aca5830e438cb54aa722e3' y '8BADF00D'.

salchicha
fuente
1
Regex realmente no analiza. Intente extraer todas las cosas similares a números y tamice las que no sean hexadecimales.
Blender

Respuestas:

193

¿Qué tal lo siguiente?

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

Coincide con la expresión que comienza con 0, seguida de una x minúscula o mayúscula, seguida de uno o más caracteres en los rangos 0-9, o af, o AF

Steven Schroeder
fuente
35
Eso podría reducirse a /0x[\da-f]/i, pero de lo contrario, +1.
Niklas B.
20
@NiklasB. Su taquigrafía solo es válida si usa perl regex, si usa POSIX regex, entonces la solución de Steven es la más corta. De cualquier manera, la solución de Steven funciona tanto para perl como para expresiones regulares POSIX.
David M. Syzdek
¡Entendido! La solución de Steven es buena si el número hexadecimal comienza con 0x o 0X. Este debería funcionar mejor: ^ [0-9A-F] + $ También puede reconocer patrones hexadecimales como: '535GH0G73' Para Java, podemos usar, por ejemplo, String.matches () para verificar esto .. Gracias a todos por la respuesta :)
saurcery
2
'0x [\ da-f] {2}' probablemente es mejor para limitar el número también
Yazan Rawashdeh
2
¿Coincidiría con los números de ejemplo segundo y tercero, 0acdadecf822eeff32aca5830e438cb54aa722e3 y 8BADF00D?
Peter Mortensen
44

La sintaxis exacta depende de sus requisitos exactos y del lenguaje de programación, pero básicamente:

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

o más simplemente, ino distingue entre mayúsculas y minúsculas.

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

Si tiene la suerte de utilizar Ruby, puede hacer:

/\h+/

EDITAR : la respuesta de Steven Schroeder me hizo darme cuenta de que mi comprensión del bit 0x era incorrecta, así que actualicé mis sugerencias en consecuencia. Si también desea hacer coincidir 0x, los equivalentes son

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

AÑADIDO MÁS : si 0x debe ser opcional (como implica la pregunta):

/(0x)?[0-9a-f]+/i
SimonMayer
fuente
¿puede explicarme la razón de la RE anterior?
Salchicha
4
@noobDroid ¿Qué te gustaría que te explique específicamente?
SimonMayer
18

No es gran cosa, pero la mayoría de los motores de expresiones regulares admiten las clases de caracteres POSIX, y hay [:xdigit:]caracteres hexadecimales coincidentes, que es más simple que el común0-9a-fA-F .

Entonces, la expresión regular solicitada (es decir, con opcional 0x) es:/(0x)?[[:xdigit:]]+/

inteligente
fuente
11

Esto coincidirá con o sin 0xprefijo

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

Pawel Furmaniak
fuente
11

Cabe mencionar que la detección de un MD5 (que es uno de los ejemplos) se puede hacer con:

[0-9a-fA-F]{32}
Adaddinsane
fuente
5

Si usa Perl o PHP, puede reemplazar

[0-9a-fA-F]

con:

[[:xdigit:]]
Joaquín
fuente
Esta debería ser una respuesta autónoma.
Peter Mortensen
3

Solo para el registro, especificaría lo siguiente:

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

Lo cual se diferencia en que comprueba que tiene que contener los seis caracteres válidos y en x minúscula o mayúscula en caso de que tengamos uno.

murciélago
fuente
2

Si está buscando un carácter hexadecimal específico en el medio de la cadena, puede usar "\ xhh" donde hh es el carácter en hexadecimal. Lo he intentado y funciona. Utilizo framework para C ++ Qt pero puede resolver problemas en otros casos, depende del sabor que necesites usar (php, javascript, python, golang, etc.).

Esta respuesta fue tomada de: http://ult-tex.net/info/perl/

Fábio Borges
fuente
¡Oye! Si bien esto puede ser cierto para perl, no parece ser el caso de las expresiones regulares en todos los lenguajes de programación. Según esto \x es el equivalente a \uen otros idiomas.
Maurice
¿Qué es "anda específica"?
Peter Mortensen
0

Este asegura que no tenga más de tres pares válidos:

(([a-fA-F]|[0-9]){2}){3}

Más o menos de tres pares de caracteres válidos no coinciden.

Necesidades locales
fuente
0

En caso de que necesite esto dentro de una entrada donde el usuario puede escribir 0y 0xtambién, pero no un número hexadecimal sin el 0xprefijo:

^0?[xX]?[0-9a-fA-F]*$
Paul Razvan Berg
fuente
0

Otro ejemplo: los valores hexadecimales para colores css comienzan con un signo de almohadilla o almohadilla (#), luego seis caracteres que pueden ser un número o una letra entre A y F, inclusive.

^#[0-9a-fA-F]{6}
Tommy vasquez
fuente