Преобразование строки в регулярное выражение ruby
мне нужно преобразовать строку типа "/ [ws]+/ " в регулярное выражение.
"/[ws]+/" => /[ws]+/
Я пробовал использовать разные Regexp
методы, как:
Regexp.new("/[ws]+/") => //[w ]+//
аналогично Regexp.compile
и Regexp.escape
. Но никто из них не вернулся, как я ожидал.
далее я попытался удалить обратные косые черты:
Regexp.new("[ws]+") => /[w ]+/
но не повезло.
тогда я попытался сделать это просто:
str = "[ws]+"
=> "[w ]+"
он убегает. Теперь, как строка может оставаться такой, как есть, и преобразовываться в a объекта regexp?
5 ответов
похоже, что здесь вам нужна начальная строка в одинарных кавычках (см. на этой странице)
>> str = '[\w\s]+'
=> "[\w\s]+"
>> Regexp.new str
=> /[\w\s]+/
для ясности
/#{Regexp.quote(your_string_variable)}/
работает тоже
edit: завернул your_string_variable в регулярное выражение.цитата, для корректности.
этот метод будет безопасно избежать всех символов с особым значением:
/#{Regexp.quote(your_string)}/
например, .
будет экранирован, так как в противном случае он интерпретируется как "любой символ".
Не забудьте использовать строку с одной кавычкой, если вы не хотите, чтобы обычная интерполяция строк срабатывала, где обратная косая черта имеет особое значение.
используя % Примечание:
%r{\w+}m => /\w+/m
или
regex_string = '\W+'
%r[#{regex_string}]
С помогите:
%r [] интерполированное регулярное выражение (флаги могут появиться после закрытия разделитель)
камень to_regexp может сделать работу.
"/[\w\s]+/".to_regexp => /[\w\s]+/
вы также можете использовать модификатор:
'/foo/i'.to_regexp => /foo/i
наконец, вы можете быть более ленивым, используя: detect
'foo'.to_regexp(detect: true) #=> /foo/
'foo\b'.to_regexp(detect: true) #=> %r{foo\b}
'/foo\b/'.to_regexp(detect: true) #=> %r{foo\b}
'foo\b/'.to_regexp(detect: true) #=> %r{foo\b/}