¿La expresión regular de Ruby tiene un operador que no coincide como “! ~” En Perl?
92
Solo quiero saber si ruby regex tiene un operador no coincidente como !~en perl. Siento que es inconveniente de usar (?!xxx)o (?<!xxxx)porque no puede usar patrones de expresiones regulares en la xxxparte.
Todo lo que tenías que hacer era encenderlo irby probarlo. Probablemente hubiera sido más rápido que publicar una pregunta SO.
Mark Thomas
33
Pero no más rápido que buscar en Google 'ruby not match' y encontrar esta respuesta en SO;)
micapam
3
Experimenté por un tiempo antes de quedarme atascado, buscar en Google y encontrar esta respuesta (que funcionó). Nunca vuelvas a criticar a alguien por hacer una pregunta.
Jonathon Nordquist
2
Lo expresó de manera subóptima. Lo que creo que quiso decir fue, "recuerda que puedes encenderlo irby probarlo. Probablemente más rápido, incluso, que publicar una pregunta SO, y una gran oportunidad para probar las cosas en general". De todos modos, así es como lo escuché.
Con ruby 2.4, también existe una sintaxis algo más agradable RegExp#match?, que puede negar fácilmente. Según las notas de la versión , hace incluso menos asignaciones que!~
Es una solución de nivel inferior. No siempre es fácil convertir expresiones regulares de esta manera. Por otro lado, esta solución no depende del lenguaje de programación de nivel superior;)
Konstantin
0
De vuelta en perl, 'foobar' !~ /bar/fue perfecto para probar que la cadena no contiene "barra".
En Ruby, particularmente con una guía de estilo moderna, creo que una solución más explícita es más convencional y fácil de entender:
irb
y probarlo. Probablemente hubiera sido más rápido que publicar una pregunta SO.irb
y probarlo. Probablemente más rápido, incluso, que publicar una pregunta SO, y una gran oportunidad para probar las cosas en general". De todos modos, así es como lo escuché.Respuestas:
Sí:
!~
funciona bien; probablemente pensaste que no lo haría porque falta en la página de documentación deRegexp
. Sin embargo, funciona:fuente
!~
se documenta en Objeto .RegExp#match?
, que puede negar fácilmente. Según las notas de la versión , hace incluso menos asignaciones que!~
AFAIK (?! Xxx) es compatible:
fuente
De vuelta en perl,
'foobar' !~ /bar/
fue perfecto para probar que la cadena no contiene "barra".En Ruby, particularmente con una guía de estilo moderna, creo que una solución más explícita es más convencional y fácil de entender:
Dicho esto, creo que sería genial si hubiera un
.no_match?
método.fuente