Wie handhabe ich Sonderzeichen in einem Perl Regex?

7

Ich verwende ein Perl-Programm, um Text aus einer Datei zu extrahieren. Ich habe ein Array von Zeichenfolgen, die ich als Trennzeichen für den Text verwende, z. B .:

%Vor%

Zwei der Strings im Array sind jedoch 0 und (Buy now) . Das Problem dabei ist, dass die Symbole in den Strings die End-of-String- und Capture-Gruppe in regulären Perl-Ausdrücken darstellen, so dass der Text nicht wie beabsichtigt interpretiert wird.

Gibt es einen Weg dazu?

    
martin clayton 23.02.2009, 03:20
quelle

3 Antworten

11

Versuchen Sie Perls Funktion quotemeta . Alternativ können Sie \Q und \E in Ihrer Regex verwenden, um die Interpolation von Werten in der Regex zu deaktivieren. Weitere Informationen zu \Q finden Sie perlretut . und \E - sie sind möglicherweise nicht das, wonach du suchst.

    
Chris Lutz 23.02.2009 03:27
quelle
9

quotemeta entkommt Meta-Zeichen, so dass sie als Literale interpretiert werden. Als Abkürzung können Sie \ Q ... \ E im doppelten Kontext verwenden, um Dinge zu umgeben, die zitiert werden sollten:

%Vor%

oder

%Vor%

oder nur

%Vor%

Beachten Sie, dass dies nicht auf interpolierte Variablen beschränkt ist; Literale Zeichen sind auch betroffen:

%Vor%

obwohl es offensichtlich nach der Variableninterpolation passiert, so wird "\ Q $ foo" nicht zu "\ $ foo".

    
ysth 23.02.2009 03:42
quelle
4

Verwenden Sie quotemeta :

%Vor%     
Julien Roncaglia 23.02.2009 03:28
quelle

Tags und Links