2016-09-12 11 views
0

Рассмотрим я есть строкиКак интерполировать регулярное выражение в строку и использовать эту строку как регулярное выражение для сравнения рубина

goo = "test check\ncode" 

if goo =~ /#{Regexp.quote(foo)}/ 
    puts "success!" 
end 

Мне нужно сравнить с «Foo» регулярное выражение. Как я могу написать это регулярное выражение?

Просьба помочь мне найти это!

+0

Что такое 'foo' и почему вы хотите/должны _" интерполировать регулярное выражение в строку и использовать эту строку как регулярное выражение "_ в первую очередь? Может быть, более подробный пример поможет. – Stefan

+1

@ user3784251: Пожалуйста, _DO NOT_ напишите свой код в комментариях. Вы можете изменить свой вопрос, чтобы включить фрагмент кода, который вы хотите, и он будет намного понятнее и понятнее. И, в его нынешнем виде, ваш вопрос не подлежит ответственности, поскольку вы не указали ключевые сведения, которые могут позволить кому-то другому реально решить вашу проблему, а не угадывать, в чем заключается ваша проблема. –

ответ

2

Я предполагаю, что foo содержит строку, представляющую регулярное выражение. Если да, то вы можете инициализировать Regexp объект из этой строки и выполнить ваше соответствие следующим образом:

foo = 'test.*check.*code' 

goo =~ Regexp.new(foo, Regexp::MULTILINE) 
+2

Взгляните на [Документация Regexp] (https://ruby-doc.org/core-2.2.0/Regexp.html). '.' соответствует любому символу, кроме символа новой строки. Если вы не инициализируете объект Regexp для работы с многострочным кодом. Проверьте мой обновленный ансфер. – maicher

2
goo = "test check\ncode" 
foo = "test.*check.*code" 

goo =~ /#{foo}/m 
#⇒ 0 

Причина, почему ваше регулярное выражение не сделать трюк, что вы должны явно установить ., чтобы соответствовать новым строки с m Модификатор Regexp.

Смежные вопросы