¿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.


8
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é.
user2066657

Respuestas:



6

AFAIK (?! Xxx) es compatible:

2.1.5 :021 > 'abc1234' =~ /^abc/
 => 0
2.1.5 :022 > 'def1234' =~ /^abc/
 => nil
2.1.5 :023 > 'abc1234' =~ /^(?!abc)/
 => nil
2.1.5 :024 > 'def1234' =~ /^(?!abc)/
 => 0

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:

input = 'foobar'

do_something unless input.match?(/bar/) 

needs_bar = !input.match?(/bar/)

Dicho esto, creo que sería genial si hubiera un .no_match?método.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.