2011-06-30 7 views

Respuesta

9

\h es el código hexadecimal para expresiones regulares rubí. (...) captura una subcoincidencia y \1 permite hacer referencia a la primera subcoincidencia:

/#(\h\h)\1\1/ 

en IRB:

>> %w{ #000000 #ababab #ffffff #ccddcC#afafa0 }.map { |s| s =~ /#(\h\h)\1\1/ } 
=> [0, 0, 0, nil, nil]               
+1

¿Es '\ h' nuevo en 1.9? Funciona localmente (con 1.9.2) pero no en Rubular (con 1.8.7). – Jeremy

3

Prueba esto:

^#([0-9a-fA-F][0-9a-fA-F]?)\1\1$ 

que coincidirá:

#000000 
#aaa 
#ababab 
#ffffff 

como se puede ver en Rubular: http://rubular.com/r/hDPrvr1dvu

Se repite ya sea un solo carácter 3 veces (emparejan #AAA) o repetir una doble Char (3 veces a juego #666666 y #121212).

+0

Subiría, excepto que su expresión regular no se limita a números hexadecimales. – Jeremy

+0

@Jeremy, buena llamada! :) –

+0

Puede usar '[[: xdigit:]]' en lugar de '[0-9a-fA-F]', si lo desea. –

Cuestiones relacionadas