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