Ruby:Rubeque:regexp中的变量?
我正在解决这个问题,但对于在regexp中将#{}视为注释,我有点困惑。 我的代码现在看起来像这样Ruby:Rubeque:regexp中的变量?,ruby,regex,string-interpolation,Ruby,Regex,String Interpolation,我正在解决这个问题,但对于在regexp中将#{}视为注释,我有点困惑。 我的代码现在看起来像这样 def longest_palindrome(txt) txt[/#{txt.reverse}/] end 我尝试了txt[/“{txt.reverse}”/或txt[{txt.reverse}],但没有任何效果。我应该如何将变量牵连到regexp中?这不是使用regex可以做的事情 虽然您可以在正则表达式的构造中使用变量插值(请参阅其他答案/注释),但这对您没有帮助。您只能使用它来反转文本
def longest_palindrome(txt)
txt[/#{txt.reverse}/]
end
我尝试了
txt[/“{txt.reverse}”/
或txt[{txt.reverse}]
,但没有任何效果。我应该如何将变量牵连到regexp中?这不是使用regex可以做的事情
虽然您可以在正则表达式的构造中使用变量插值(请参阅其他答案/注释),但这对您没有帮助。您只能使用它来反转文本字符串,而不是正则表达式匹配结果。即使可以,您仍然无法解决“查找最长回文”部分,至少在运行时性能可以接受的情况下是这样
使用不同的方法解决这个问题。如果没有例子,很难说你希望这种情况如何发生,但我想你是在寻找答案
txt[/#{Regexp.escape(txt.reverse)}/]
查看方法有指向rubeque和Asserts的链接。我不认为这是他的实际问题。他想找到字符串中最长的回文。绝对不是一种常规语言。@TimPietzcker:现代正则表达式也不完全是常规语言。@FilipBartuzi ups,很抱歉错过了链接。无论如何,你得到了你的答案:-)这些引号不属于那里,尽管这是错误的,变量插值在
/
正则表达式中工作得很好:/{1+2}/=>/3/
@Andrew有趣,谢谢。所以OP的代码实际上是有效的Ruby(不管它是否按预期工作)?是的。还值得注意的是,插值文本中的任何内容都不会转义为常规文本(即/{.*.}/=~'foo'
是真实的)。