2013-05-27 57 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:现代正则表达式也不完全正规。 –