Обратите внимание, что обратное (не использование .quote()) также может быть полезно, если вы хотите построить регулярное выражение, используя строку.
Джесси
«если вы действительно хотите проверить соответствие подстроки, вы можете просто сделать if goo.include?(foo)» => True, если вы заинтересованы в проверке существования. Если вы заинтересованы в замене и уже используете String.gsub, то Regexp.quote может быть вашим единственным вариантом.
Исаак Бетеш
Просто добавить к Джесси в случае, если это не очевидно, это означает просто передать строку символов, в которую вы не нуждаетесь, чтобы избежать Regexp.newили Regexp.compile.
Диланкб
Спасибо за полезное объяснение того, почему мы можем захотеть использовать Regexp.quote
Wylliam Judd
7
Вероятно , Regexp.escape(foo)было бы отправной точкой, но есть хорошая причина , вы не можете использовать более обычное выражение-интерполяции: "my stuff #{mysubstitutionvariable}"?
Кроме того, вы можете просто использовать !goo.match(foo).nil?с литеральной строкой.
Я обнаружил, что могу легко вставить в регулярное выражение, не используя Regexp.quote или Regexp.escape, если я просто использовал одинарные кавычки в моей входной строке: (соответствие 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"
Это помогло мне, когда мне нужно было использовать одну и ту же длинную часть регулярного выражения несколько раз. Не универсальный, но подходит под вопрос вопроса, я считаю.
Ответы:
То же, что и вставка строки.
источник
Обратите внимание , что
Regexp.quote
в ответ Джон Лоэнгрина важно!Если вы просто делаете «очевидную» версию:
тогда точки в вашем тексте совпадения рассматриваются как подстановочные знаки регулярного выражения и
"0.0.0.0"
будут совпадать"0a0b0c0"
.Также обратите внимание, что если вы действительно хотите проверить соответствие подстроки, вы можете просто сделать
который не требует дополнительного цитирования или беспокойства о специальных символах.
источник
.quote()
) также может быть полезно, если вы хотите построить регулярное выражение, используя строку.if goo.include?(foo)
» => True, если вы заинтересованы в проверке существования. Если вы заинтересованы в замене и уже используете String.gsub, то Regexp.quote может быть вашим единственным вариантом.Regexp.new
илиRegexp.compile
.Вероятно ,
Regexp.escape(foo)
было бы отправной точкой, но есть хорошая причина , вы не можете использовать более обычное выражение-интерполяции:"my stuff #{mysubstitutionvariable}"
?Кроме того, вы можете просто использовать
!goo.match(foo).nil?
с литеральной строкой.источник
источник
Используйте Regexp.new:
источник
Вот ограниченный, но полезный другой ответ:
Я обнаружил, что могу легко вставить в регулярное выражение, не используя Regexp.quote или Regexp.escape, если я просто использовал одинарные кавычки в моей входной строке: (соответствие IP-адреса)
одиночные кавычки интерпретируют только \\ и \ '.
http://en.wikibooks.org/wiki/Ruby_Programming/Strings#Single_quotes
Это помогло мне, когда мне нужно было использовать одну и ту же длинную часть регулярного выражения несколько раз. Не универсальный, но подходит под вопрос вопроса, я считаю.
источник
источник