2012-09-05 22 views
5

Estoy tratando de entender por qué las siguientes declaraciones de falsas: (** I deberían haber puesto "salidas" 0 **)Partido de nueva línea ' n' en rubí expresiones regulares

puts "a\nb" =~ Regexp.new(Regexp.escape("a\nb"), Regexp::MULTILINE | Regexp::EXTENDED) 

Quizás alguien podría explicar.

Estoy intentando generar una Regexp a partir de una cadena de varias líneas que coincida con la cadena.

Gracias de antemano

Respuesta

9

puts siempre devolverá nil.

Su código debería funcionar bien, aunque sea largo. =~ devuelve la posición del partido, que es 0.

También es posible usar:

"a\nb" =~ /a\sb/m 

o

"a\nb" =~ /a\nb/m 

Nota: La opción m no es necesario en este ejemplo, pero demuestra cómo se usaría sin Regexp.new.

+0

¿Hay algún método que devuelva un valor booleano si una Cadena coincide con una Regexp? – Arth

+2

@Arth Usted podría hacer esto: '!! (" a \ nb "= ~/a \ sb/m)' –

+0

¡Podría hacerlo! Sorprendido, no existe una función incorporada en la clase String o Regexp. – Arth

1

Probablemente, puts causaron este

1.9.3-194 (main):0 > puts ("a\nb" =~ Regexp.new(Regexp.escape("a\nb"), Regexp::MULTILINE | Regexp::EXTENDED)) 
0 
=> nil 


1.9.3-194 (main):0 > "a\nb" =~ Regexp.new(Regexp.escape("a\nb"), Regexp::MULTILINE | Regexp::EXTENDED) 
=> 0 
+0

No entiendo, me preguntaba por qué no hay coincidencias. – Arth

+1

posición coincidente 0 fue devuelto – sumskyi

+0

Ahh, ahora entiendo, supongo que entendí mal el operador ~ ~. – Arth

Cuestiones relacionadas