¿Cómo creo una expresión regular que detecta números hexadecimales en un texto?
Por ejemplo, '0x0f4', '0acdadecf822eeff32aca5830e438cb54aa722e3' y '8BADF00D'.
¿Cómo creo una expresión regular que detecta números hexadecimales en un texto?
Por ejemplo, '0x0f4', '0acdadecf822eeff32aca5830e438cb54aa722e3' y '8BADF00D'.
Respuestas:
¿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
/0x[\da-f]/i
, pero de lo contrario, +1.
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, i
no 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
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:]]+/
Esto coincidirá con o sin 0x
prefijo
(?:0[xX])?[0-9a-fA-F]+
Cabe mencionar que la detección de un MD5 (que es uno de los ejemplos) se puede hacer con:
[0-9a-fA-F]{32}
Si usa Perl o PHP, puede reemplazar
[0-9a-fA-F]
con:
[[:xdigit:]]
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.
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/
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.
En caso de que necesite esto dentro de una entrada donde el usuario puede escribir 0
y 0x
también, pero no un número hexadecimal sin el 0x
prefijo:
^0?[xX]?[0-9a-fA-F]*$
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}