2010-08-19 6 views

Antwort

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

Regexp.quote entkommt einfach alle Zeichen, die spezielle regexp Bedeutung haben; es nimmt und gibt eine Zeichenkette zurück. Beachten Sie, dass . auch speziell ist. Nach dem Angeben können Sie den Regexp nach Bedarf anhängen, bevor Sie an den Konstruktor übergeben werden. Ein einfaches Beispiel:

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

Dies fügt eine Erfassungsgruppe für den Rest des Pfades hinzu.

+5

Natürlich funktioniert das auch: 'string.match (/ # {Regexp.quote ('http://www.microsoft.com/')} /) ' –

+0

ersetzt alle" CURRENT_YEAR "Token mit einer vierstelligen Jahr Erfassungsgruppe: ' Regexp.new (input_string.split ("CURRENT_YEAR"). Map {| p | Regexp.quote (p)} .join ("(\\ d {4})")) ' –

+0

Vorausgesetzt, sollte dies nicht zum Erfolg führen? setzt "Erfolg" wenn Regexp.new (Regexp.quote ('.')). Match ('A') – Joe

4

Regexp.quote oder Regexp.escape kann automatisch verwendet werden, um Dinge zu entkommen für Sie:

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

Das Ergebnis kann Regexp.new übergeben werden, um ein Regexp-Objekt zu erstellen, und dann können Sie die .match Methode des Objekts aufrufen und Pass Es ist die passende Zeichenfolge (die umgekehrte Reihenfolge von string.match(/regex/)).

8

Sie können auch beliebige Trennzeichen in Ruby für reguläre Ausdrücke durch% r verwenden und definieren ein Zeichen vor dem regulären Ausdruck verwenden, zum Beispiel:

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

Während dies hilft zu vermeiden, Flucht '/' Zeichen, es hilft nicht für Dinge wie Klammern, Klammern und andere Sonderzeichen. – Amber

+3

"http://www-microsoft.com/" entspricht. Gefährlich. – kuboon

0

Sie einfach einfache Anführungszeichen zu entkommen können.

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

Sie können auch %q{} verwenden, wenn Sie einfache Anführungszeichen im Text selbst benötigen. Wenn innerhalb der Zeichenfolge Variablen extrapoliert werden müssen, verwenden Sie %Q{}. Das entspricht doppelten Anführungszeichen ". Wenn der String Regex Ausdrücke enthält (zB: .*?()[]^$), die Sie hochgerechnet werden sollen, verwenden Sie // oder% r {}

-2

Der Einfachheit halber definiere ich nur

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