2012-09-05 73 views
5

我試圖理解爲什麼以下返回false:(**我應該把「輸出0」 **)匹配換行符` N`在紅寶石的正則表達式

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

也許有人可以解釋。

我想從一個多行字符串生成一個正則表達式來匹配字符串。

在此先感謝

回答

9

puts總是返回nil

你的代碼應該可以正常工作,儘管冗長。 =~返回比賽是0

的位置你也可以使用:

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

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

注:m選項是沒有必要在這個例子中,但演示瞭如何它將被用於沒有Regexp.new

+0

如果String匹配Regexp,是否有返回布爾值的方法? – Arth

+2

@Arth你可以這樣做:'!!(「a \ nb」=〜/ a \ sb/m)' –

+0

可以!令人驚訝的是,String或Regexp類中沒有內置函數。 – Arth

1

也許,puts導致此

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

我不明白,我在質疑爲什麼沒有匹配。 – Arth

+1

匹配的位置0被返回 – sumskyi

+0

啊,我現在明白了,猜想我誤解了=〜運算符。 – Arth