2010-06-11 20 views
45

Vi esto en un screencast y no pude entender de qué se trataba. Las hojas de referencia solo se amontonan con otros operadores como un operador de coincidencia de patrones general.¿Qué es el operador "= ~" en Ruby?

+0

buscarlo en http://www.ruby-doc.org/core/ –

+11

@ user97370: Muy a menudo documentos de rubí se utilizan como una impertinente solución para responder todas las preguntas sin darse cuenta de que ruby ​​docs no siempre es un sitio fácil de entender.Muy a menudo (la mayoría de las veces) empiezo con ruby ​​docs, no entiendo las explicaciones encriptadas y anémicas de Google, solo para descubrir que tampoco hay soluciones en Google. Uno no simplemente busca en Google "Ruby = ~" o "Ruby = ~ method" o "Ruby = ~ operator" para obtener una respuesta. Sería agradable ver a menos personas arrojar documentos de rubí como una solución perezosa y para ver más respuestas en profundidad que realmente ayudan. – Padawan

Respuesta

42

Coincide con la cadena a una expresión regular.

'hello' =~ /^h/ # => 0

Si no hay ninguna coincidencia, volverá nil. Si le pasa argumentos no válidos (es decir, los lados izquierdo y derecho no son correctos), lanzará un TypeError o devolverá false.

4

Bueno, la referencia es correcta, es el operador "coincide con esta expresión regular".

if var =~ /myregex/ then something end 
-1

Creo que este es un operador de coincidencia de patrones utilizado con expresiones regulares.

15

De ruby-doc:

str =~ obj => fixnum or nil

Match-Si obj es una expresión regular, utilizarlo como un patrón que corresponda contra str y devuelve la posición de desplazamiento del el partido comienza, o nulo si no hay coincidencia. De lo contrario, invoca obj. = ~, Pasando str como argumento. El predeterminado = ~ en Object devuelve falso.

"cat o' 9 tails" =~ /\d/ #=> 7 
"cat o' 9 tails" =~ 9  #=> false 
+1

"devuelve la posición en la que se inicia el partido", es lo importante para mí :) He estado rastreando a Google en busca de una respuesta ... ¡la encontré aquí gracias! –

+0

¿Por qué el segundo ejemplo devuelve falso? ¿Es porque '9' no es una cadena? –

1

regular cadena de expresión coincidente:

pone cierto si url = ~ /google.com/

Usted puede leer '= ~' como 'se emparejan'.

4

Como las otras respuestas ya indicadas, =~ es el operador de expresión regular frente a string string.

Nota: El operador =~ no es conmutativa

Por favor, considere la siguiente nota de la ruby doc site, como he visto sin embargo, sólo la primera forma

str =~ regexp 

utilizado en las otras respuestas:

Nota: str =~ regexp no es lo mismo que regexp =~ str. Las cadenas capturadas de los grupos de captura nombrados se asignan a las variables locales solo en el segundo caso .

Aquí está la documentación de la segunda forma: link

Cuestiones relacionadas