Perl regexp wie man nur ein paar Zeichen entkommt

8

Ich habe eine Zeichenfolge $regexp_as_string

Nun möchte ich es in einen Regex "umwandeln" / benutze es als regexp

%Vor%

Jetzt gibt es Zeichen wie "." und ich möchte ihnen automatisch entkommen - \ Q und \ E sollten das tun

%Vor%

Gibt es eine Möglichkeit, eine Liste von Zeichen anzugeben, die automatisch maskiert werden sollen? Denn im Moment entweicht zB automatisch "|" aber ich möchte das behalten.

    
Tyzak 11.02.2012, 11:15
quelle

3 Antworten

14

Sie können die Zeichenfolge mit quotemeta vorbereiten und dann Backslashes selektiv entfernen. Zum Beispiel:

%Vor%

Ausgabe:

%Vor%

Fügen Sie beliebige Zeichen, die nicht in die Zeichenklasse in der Ersetzung maskiert werden sollen, hinzu, z. [|?()] .

    
TLP 11.02.2012, 11:22
quelle
0

Vielleicht anstelle einer Zeichenfolge, die durch | verbunden wird für Alternationen, hole die Liste der Alternationen und baue sie zu einer Zeichenkette auf (oder teile sie sogar mit |, wenn das garantiert nie erscheint)? Etwas wie:

%Vor%

oder verwenden Sie die Funktion Data :: Munge list2re:

%Vor%     
MkV 11.02.2012 17:45
quelle
0

unter Verwendung der Beispielzeichenfolge von TLP

%Vor%

Dies wird NUR einen Backslash zu Zeichen hinzufügen, die in der eckigen Klammer "Zeichenklasse"

stehen

Beachten Sie, dass ich vor die Zeichen in den eckigen Klammern einen schwarzen Schrägstrich gesetzt habe. Dies ist nicht immer für alle Zeichen in diesem Kontext notwendig, aber es ist einfacher, einfach einen Backslash hinzuzufügen und sich nicht darum zu kümmern.

    
Vorsprung 11.02.2012 18:34
quelle