2012-09-05 19 views
5

Sto cercando di capire perché le seguenti dichiarazioni false: (** avrei dovuto mettere "uscite" 0 **)Partita a capo ` n` in ruby ​​regex

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

Forse qualcuno potrebbe spiegare.

Sto provando a generare un Regexp da una stringa a più righe che corrisponderà alla stringa.

Grazie in anticipo

risposta

9

puts sarà sempre tornare nil.

Il tuo codice dovrebbe funzionare bene, anche se lungo. =~ restituisce la posizione della partita, che è 0.

Si potrebbe anche usare:

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

o

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

Nota: l'opzione m non è necessaria in questo esempio, ma dimostra come sarebbe usato senza Regexp.new.

+0

Esiste un metodo che restituisce un valore booleano se una stringa corrisponde a un Regexp? – Arth

+2

@Arth Si potrebbe fare questo: '!! (" a \ nb "= ~/a \ sb/m)' –

+0

Potrebbe fare! Sorpreso però non esiste una funzione incorporata nella classe String o nella classe Regexp. – Arth

1

Probabilmente, puts causato questo

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

Non capisco, stavo chiedendo perché non ci sono fiammiferi. – Arth

+1

corrisponde la posizione 0 è stato restituito – sumskyi

+0

Ah, ora capisco, suppongo di aver frainteso l'operatore = ~. – Arth