7 ответов:
отметим, что
Regexp.quoteна ответ Джона Л. важно!if goo =~ /#{Regexp.quote(foo)}/если вы просто делаете "очевидную" версию:
if goo =~ /#{foo}/тогда точки в вашем тексте матча рассматриваются как подстановочные знаки регулярных выражений, и
"0.0.0.0"будет соответствовать"0a0b0c0".обратите внимание также, что если вы действительно просто хотите проверить соответствие подстроки, вы можете просто сделать
if goo.include?(foo)который не требует дополнительного цитирования или беспокоиться о особые символы.
наверное
Regexp.escape(foo)было бы отправной точкой, но есть ли веская причина, по которой вы не можете использовать более традиционное выражение-интерполяция:"my stuff #{mysubstitutionvariable}"?кроме того, вы можете просто использовать
!goo.match(foo).nil?С строковый литерал.
вот ограниченный, но полезный другой ответ:
Я обнаружил, что я могу легко вставить в регулярное выражение без использования Regexp.цитата или регулярное выражение.побег, если я просто использовал одинарные кавычки в моей входной строке: (совпадение IP-адреса)
IP_REGEX = '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}' my_str = "192.0.89.234 blahblah text 1.2, 1.4" # get the first ssh key # replace the ip, for demonstration my_str.gsub!(/#{IP_REGEX}/,"192.0.2.0") puts my_str # "192.0.2.0 blahblah text 1.2, 1.4"одинарные кавычки интерпретируют только \\ и \'.
http://en.wikibooks.org/wiki/Ruby_Programming/Strings#Single_quotes
это помогло мне, когда мне нужно было использовать одну и ту же длинную часть регулярного выражения несколько раз. Не универсальный, но подходит для примера вопроса, я считаю.
Comments