2013-05-27 99 views
0

我正在解決http://www.rubeque.com/problems/a-man-comma--a-plan-comma--a-canal--panama-excl-/solutions,但我在處理#{}作爲regexp中的評論時感到有點困惑。 我的代碼看起來現在這個樣子Ruby:Rubeque:正則表達式中的變量?

def longest_palindrome(txt) 
    txt[/#{txt.reverse}/] 
end 

我試圖txt[/"#{txt.reverse}"/]txt[#{txt.reverse}]但沒有任何工程如我所願。我應該如何將變量與正則表達式相關聯?

+0

你有正確的第一次。 – pguardiario

回答

1

這不是你可以用正則表達式做的事情。

雖然你可以在構造一個正則表達式中使用可變插值(參見其他答案/評論),但這對你並沒有幫助。您只能使用它來反轉文字字符串,而不是正則表達式匹配結果。即使你可以,你仍然不會解決「找到最長的迴文」部分,至少不能達到可接受的運行時性能。

使用不同的方法解決問題。

+0

這是錯誤的,變量插值在'//'正則表達式文本中工作得很好:'/#{1 + 2} /#=>/3 /'。 –

+0

@Andrew有趣的,謝謝。所以OP的代碼實際上是有效的Ruby(不管它是否按預期工作的事實)? –

+0

是的。還值得注意的是,插入文本中的任何內容都不會被轉義爲普通文本(即'/#{'.*'}/ =〜'foo''就是truthy)。 –

0

很難告訴你怎麼想發生這種情況沒有的例子,但我想你是後

txt[/#{Regexp.escape(txt.reverse)}/] 

Regexp#escape方法

+0

有鏈接到rubeque與斷言 –

+0

我不認爲這是他的實際問題。他想要找到一個字符串中最長的迴文。絕對不是普通的語言。 –

+0

@TimPietzcker:現代正則表達式也不完全正規。 –