Другой способ вместо того, чтобы избежать шаблонов регулярных выражений? - PullRequest
26 голосов
/ 19 августа 2010

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

http://www.microsoft.com/

Тогда я должен уйти от этого так:

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

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

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

Ответы [ 5 ]

64 голосов
/ 19 августа 2010
Regexp.new(Regexp.quote('http://www.microsoft.com/'))

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

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

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

9 голосов
/ 19 августа 2010

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

%r!http://www.microsoft.com/!
5 голосов
/ 19 августа 2010

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

http://ruby -doc.org / ядро ​​/ классов / Regexp.html # M001195

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

0 голосов
/ 15 декабря 2012

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

def regexcape(s)
  Regexp.new(Regexp.escape(s))
end
0 голосов
/ 19 августа 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...