2010-02-10 7 views
43

¿Cómo puedo una cadena contra una expresión regular tal que devolverá verdadero si la cadena total coincide con la cadena (no una subcadena)?¿Cómo puedo probar una cadena ENTERA contra la expresión regular en ruby?

por ejemplo:

test(\ee\ , "street") #=> returns false 
test(\ee\ , "ee") #=> returns true! 

Gracias.

+21

Dale a un hombre una comparación de cadenas y que va a ser verdad, dar un hombre como regex y perderá toda la capacidad de razonar y buscar en Internet. – Lazarus

+0

@doctororange, ¿sería tan amable de aceptar la respuesta de Tomas Markauskas? No puedo eliminar mi respuesta desde que la aceptó, pero olvidé que Ruby maneja (algunos) metacaracteres de forma diferente a la mayoría de las implementaciones de expresiones regulares. Gracias. –

+0

Hecho. Gracias a los dos por sus respuestas. – doctororange

Respuesta

64

Puede hacer coincidir el comienzo de la cadena con \A y el final con \Z. En Ruby ^ y $ partido también el comienzo y el final de la línea, respectivamente:

>> "a\na" =~ /^a$/ 
=> 0 
>> "a\na" =~ /\Aa\Z/ 
=> nil 
>> "a\na" =~ /\Aa\na\Z/ 
=> 0 
+4

Desea utilizar \ z en lugar de \ Z para que coincida con la cadena completa. '" hi \ n "= ~/\ Ahi \ Z /' –

+1

El valor de retorno (cuando no es nulo) es el índice del primer carácter de la primera coincidencia. –

4

Por lo tanto, lo que está pidiendo es la forma de probar si las dos cadenas son iguales, ¿verdad? Solo usa la igualdad de cuerdas! Esto pasa todos y cada uno de los ejemplos que tanto usted como Tomas citados:

'ee' == 'street' # => false 
'ee' == 'ee'  # => true 
"a\na" == 'a'  # => false 
"a\na" == "a\na" # => true 
+2

Esto es cierto, pero una expresión regular también le permite expandir su definición de 'igual' a cosas como/^ (ee | oo) $/bastante bien. – doctororange

+5

¿Obtuviste esos cinco ups? Quiero decir que realmente fue tan útil para 5 personas que te dijeran que puedes verificar la igualdad de cuerdas con la operación de iguales ...: o xD Quiero decir sin ofender, pero, vamos, ¿es esto real? – Timo

+1

@Timo Lehto: pasa todas las especificaciones que el OP ha proporcionado, más todos los ejemplos en la otra respuesta, y es mucho más simple que la otra respuesta. No veo lo que está mal con eso. –

15

Esto parece funcionar para mí, a pesar de que tiene un aspecto feo (probablemente una manera más atractiva se puede hacer):

!(string =~ /^ee$/).nil? 

Por supuesto, todo lo que se encuentre en // arriba puede ser cualquier expresión regular que desee.

Ejemplo:

>> string = "street" 
=> "street" 
>> !(string =~ /^ee$/).nil? 
=> false 
>> string = "ee" 
=> "ee" 
>> !(string =~ /^ee$/).nil? 
=> true 

Nota: Probado en la consola de Rails con el rubí (1.8.7) y los carriles (3.1.1)

Cuestiones relacionadas