2012-02-10 30 views
70

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

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

+0

expresión regular en realidad no se analiza. Intenta extraer todos los elementos numéricos y selecciona los que no son hexadecimales. – Blender

Respuesta

116

¿Qué tal lo siguiente?

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

Partidos expresión a partir de un 0, siguiendo ya sea por un más bajas o mayúsculas x, seguido de uno o más caracteres en los intervalos 0-9, o AF o AF

+20

Eso podría reducirse a '/ 0x [\ da-f]/i', pero de lo contrario, +1. –

+12

@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 POSIX regex. –

+0

¡Entendido! La solución de Steven es buena si el número hexadecimal comienza con 0x o 0X. Éste debería funcionar mejor:^[0-9A-F] + $ También puede reconocer patrones hexagonales como: '535GH0G73' Para Java, podemos utilizar por ejemplo String.matches() para comprobar esta .. Gracias chicos por la respuesta :) – saltmotor

29

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

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

o, más sencillamente, i hace que sea sensible a las mayúsculas.

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

Si tienes la suerte de estar usando Ruby, que puede hacer:

/\h+/ 

EDITAR - Respuesta de Steven Schroeder hizo darme cuenta de mi comprensión de la broca 0x estaba mal, por lo que' he actualizado 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ñadió más - Si 0x tiene que ser opcional (como la cuestión implica):

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

¿me puede explicar el motivo de RE anterior? – saltmotor

+2

@noobDroid ¿Qué quiere específicamente que le explique? – SimonMayer

10

Esto coincidirá con o sin 0x prefijo

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

14

No es gran cosa, pero la mayoría de los motores de expresiones regulares supp ort las clases de caracteres POSIX, y hay [:xdigit:] para hacer coincidir caracteres hexadecimales, que es más simple que las cosas comunes de 0-9a-fA-F. (. Es decir, con opcional 0x)

Por lo tanto, la expresión regular a lo solicitado es: /(0x)?[[:xdigit:]]+/

7

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

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

Éste hace que usted no tiene más de tres pares válidos:

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

Cualquier más o menos de tres pares de caracteres válidos fallan para que coincida

3

Si está usando Perl o PHP, puede reemplazar

[0-9a-fA-F] 

con:

[[:xdigit:]] 
+0

Esto debería ser una respuesta independiente. –

3

Sólo para que conste Me especificar lo siguiente:

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

Qué difiere en que comprueba que tiene para contener los seis caracteres válidos y en mayúsculas o minúsculas en caso de que tengamos uno.

0

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 intenté y funciona. Utilizo framework para C++ Qt pero puede resolver problemas en otros casos, depende del sabor que necesite usar (php, javascript, python, golang, etc.).

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

+0

¡Hola! Si bien esto podría ser cierto para Perl, no parece ser el caso para las expresiones regulares en todos los lenguajes de programación. Según [esto] (http://www.regular-expressions.info/unicode.html) '\ x' es el equivalente a' \ u' en otros idiomas. – Maurice

+0

¿Qué es "especific anda"? –

Cuestiones relacionadas