No soy un experto en rubí y puede ser que esto parezca una pregunta tonta ... pero soy demasiado cómico sobre una rareza (creo) que he encontrado en RSpec Matcher llamado match.ruby rspec y comparación de cuerdas
Usted sabe match
tiene en entrada una cadena o una expresión regular. Ejemplo:
"test".should match "test" #=> will pass
"test".should match /test/ #=> will pass
La extraña comienza cuando se inserta caracteres de expresiones regulares especiales en la cadena de entrada:
"*test*".should match "*test*" #=> will fail throwing a regex exception
Esto significa (pensé) que las cadenas de entrada se interpretan como expresiones regulares, entonces yo debería escapar de expresiones regulares especial personajes que hacen funciona:
"*test*".should match "\*test\*" #=> will fail with same exception
"*test*".should match /\*test\*/ #=> will pass
partir de esta prueba básica, entiendo que match
trata a las cadenas de entrada como expresiones regulares pero no lo hace te permite escapar de los caracteres especiales de expresiones regulares.
¿Soy cierto? ¿No es esto un comportamiento singular? Quiero decir, ¡es una cadena o una expresión regular!
Edición después RESPUESTA:
Siguiendo DigitalRoss (derecha) responder a las siguientes pruebas pasaron:
"*test*".should match "\\*test\\*" #=> pass
"*test*".should match '\*test\*' #=> pass
"*test*".should match /\*test\*/ #=> pass
Gracias, tiene usted razón. Edité la pregunta con las pruebas de código que mencionó. –
También puede escapar de expresiones regulares como cadenas, por ejemplo % r {\\ * test \\ *} No es tan útil con esto porque aún necesita barras diagonales inversas, pero es invaluable cuando se combina con/ – Ghoti
levemente relacionado , pero me encontré con un problema similar: el mío estaba en torno a las comparaciones de cadenas que contenían caracteres escapados, '\ nvem texto \ n 'por ejemplo. corregido utilizando comillas dobles para evitar que rspec doble escape. – lfender6445