2012-09-05 12 views
5

Próbuję zrozumieć, dlaczego następujące zwróci FALSE: (** I powinien umieścić "wyjścia 0" **)nowalinia Mecz ` n` w ruby ​​regex

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

Może ktoś mógłby wyjaśnić.

Próbuję wygenerować Regexp z wielowierszowego ciągu, który będzie zgodny z ciągiem.

góry dzięki

Odpowiedz

9

puts zawsze zwróci nil.

Twój kod powinien działać poprawnie, aczkolwiek długo. =~ Zwraca pozycję meczu, który jest 0.

Można również użyć:

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

lub

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

Uwaga: Opcja m nie jest konieczne w tym przykładzie, ale pokazuje, jak byłby używany bez Regexp.new.

+0

Czy istnieje metoda zwracająca wartość logiczną, jeśli ciąg pasuje do Regexp? – Arth

+2

@Arth Możesz to zrobić: '!! (" a \ nb "= ~/a \ sb/m)' –

+0

Może zrobić! Zaskoczony, że nie ma wbudowanej funkcji w klasie String lub Regexp. – Arth

1

Prawdopodobnie puts spowodowane tym

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

Nie rozumiem, zastanawiałem się, dlaczego nie ma meczów. – Arth

+1

dopasowane pozycja 0 została zwrócona – sumskyi

+0

Ahh, rozumiem teraz, domyślam się, że źle zrozumiałem operatora = ~. – Arth