2011-04-04 9 views

Respuesta

19

De esta manera:

puts "yes" if str =~ /do:/i 

para devolver un valor booleano (de un método, presumiblemente), comparar el resultado del partido de nil:

def has_do(str) 
    (str =~ /do:/i) != nil 
end 

O, si no lo hace como el != nil entonces se puede utilizar en lugar de !~=~ y negar el resultado:

def has_do(str) 
    not str !~ /do:/i 
end 

Pero no me gusta mucho negaciones dobles ...

+0

¿Sería posible hacer esto en un bloque if? P.ej. si str = ~/do:/i pone "sí" al final – oxo

+0

@oxo Sí, por supuesto. De hecho, el primer código es meramente una abreviación de eso. –

+0

También existe el viejo truco '!!' para obtener solo un resultado booleano: '>> !! (str = ~/do:/i) # => true' y' >> !! (str = ~/da :/i) # => falso'. –

3

Usted podría también hacer esto:

str.downcase.include? "Some string".downcase 
2

Si todo lo que estoy buscando es un caso = subcadena coincidente insensibles que suelen utilizar:

str.downcase['do: '] 

9 de cada 10 veces que no les importa dónde en la cadena del partido es, por lo esto es lindo y conciso.

Esto es lo que parece en el IRB:

>> str = "Things to do: eat and sleep." #=> "Things to do: eat and sleep." 
>> str.downcase['do: '] #=> "do: " 
>> str.downcase['foobar'] #=> nil 

porque devuelve nil si no hay un golpe funciona en los condicionales también.

4

En Ruby 1.9 se puede hacer así:

str.downcase.match("do: ") do 
    puts "yes" 
end 

No es exactamente lo que pidieron, pero noté un comentario a otra respuesta. Si no le importa usar expresiones regulares al hacer coincidir la cadena, tal vez haya una forma de omitir la parte de la parte inferior para obtener mayúsculas y minúsculas.

Para obtener más información, ver String#match

+0

"tal vez hay una forma de saltear la parte de la carcasa para obtener insensibilidad de mayúsculas y minúsculas"? 'str.match (/ do:/i)' –

+0

@theTinMan Ah, y fue incluso en la primera respuesta también. Necesita pensar mejor la próxima vez =) –

+0

Si está ejecutando muchas expresiones regulares que no distinguen entre mayúsculas y minúsculas, * podría * ser más eficiente para archivar una vez y luego usar muchas expresiones regulares sensibles a mayúsculas y minúsculas. –

Cuestiones relacionadas