Подтвердить что ты не робот

Другой способ вместо ускорения шаблонов регулярных выражений?

Обычно, когда мои шаблоны регулярных выражений выглядят так:

http://www.microsoft.com/

Тогда я должен бежать так:

string.match(/http:\/\/www\.microsoft\.com\//)

Есть ли другой способ вместо того, чтобы сбежать от него?

Я хочу иметь возможность использовать его как http://www.microsoft.com, потому что я не хочу избегать всех специальных символов в все мои шаблоны.

4b9b3361

Ответ 1

Regexp.new(Regexp.quote('http://www.microsoft.com/'))

Regexp.quote просто ускользает от любых символов, имеющих специальное значение регулярного выражения; он берет и возвращает строку. Обратите внимание, что . также является особенным. После цитирования вы можете добавить в regexp по мере необходимости, прежде чем перейти к конструктору. Простой пример:

Regexp.new(Regexp.quote('http://www.microsoft.com/') + '(.*)')

Это добавляет группу захвата для остальной части пути.

Ответ 2

Вы также можете использовать произвольные разделители в Ruby для регулярных выражений с помощью% r и определения символа перед регулярным выражением, например:

%r!http://www.microsoft.com/!

Ответ 3

Regexp.quote или Regexp.escape можно использовать для автоматического удаления вещей для вас:

http://ruby-doc.org/core/classes/Regexp.html#M001195

Результат можно передать в Regexp.new, чтобы создать объект Regexp, а затем вы можете вызвать метод object .match и передать ему строку, которая должна соответствовать (противоположный порядок от string.match(/regex/)).

Ответ 4

Вы можете просто использовать одинарные кавычки для экранирования.

string.match('http://www.microsoft.com/')

вы также можете использовать %q{}, если вам нужны одинарные кавычки в самом тексте. Если вам нужны переменные, экстраполированные внутри строки, используйте %q{}. Это эквивалентно двойным кавычкам ". Если строка содержит выражения регулярных выражений (например: .*?()[]^$), которые вы хотите экстраполировать, используйте//или% r {}

Ответ 5

Для удобства я просто определяю

def regexcape(s)
  Regexp.new(Regexp.escape(s))
end