2010-08-19 4 views

Répondre

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

Regexp.quote échappe simplement tout caractère ayant une signification d'expression rationnelle spéciale; il prend et retourne une chaîne. Notez que . est également spécial. Après avoir cité, vous pouvez ajouter à l'expression rationnelle si nécessaire avant de passer au constructeur. Un exemple simple:

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

Ceci ajoute un groupe de capture pour le reste du chemin.

+5

Bien sûr, cela fonctionne aussi: 'String.match (/ # {Regexp.quote ('http://www.microsoft.com/')} /) ' –

+0

en remplaçant tous les jetons" CURRENT_YEAR "par un groupe de capture à quatre chiffres: ' Regexp.new (input_string.split ("CURRENT_YEAR"). Map {| p | Regexp.quote (p)} .join ("(\\ d {4})")) ' –

+0

Etant donné que cela ne devrait pas être un succès? met "Success" si Regexp.new (Regexp.quote ('.')). Match ('A') – Joe

4

Regexp.quote ou Regexp.escape peut être utilisé pour échapper automatiquement les choses pour vous:

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

peut être transmis le résultat à Regexp.new pour créer un objet RegExp, et vous pouvez appeler la méthode .match de l'objet et laissez-passer c'est la chaîne à opposer (l'ordre inverse de string.match(/regex/)).

8

Vous pouvez également utiliser délimiteurs en Ruby pour des expressions régulières en utilisant% r et définissant un caractère avant l'expression régulière, par exemple:

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

Bien que cela aide à éviter d'échapper '/' caractères, il n'aide pas pour les choses comme des parenthèses, entre parenthèses et d'autres caractères spéciaux. – Amber

+3

"http://www-microsoft.com/" correspond. Dangereux. – kuboon

0

Vous pouvez simplement utiliser des guillemets simples pour échapper.

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

vous pouvez également utiliser %q{} si vous avez besoin des guillemets simples dans le texte lui-même. Si vous avez besoin d'extrapoler des variables à l'intérieur de la chaîne, utilisez %Q{}. Cela équivaut à des guillemets ". Si la chaîne contient des expressions regex (par exemple: .*?()[]^$) que vous souhaitez extrapolée, utilisez // ou% r {}

-2

Pour plus de commodité je définis juste

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