Gibt es eine Perl-Funktion, um einen String in einen Regexp zu verwandeln, um diesen String als Muster zu verwenden?

8

Ich habe Probleme mit Perl grep () mit einer Zeichenkette, die darf Zeichen enthält, die als Quantifizierer für reguläre Ausdrücke interpretiert werden.

Ich habe den folgenden Fehler erhalten, wenn das grep-Muster "g ++" ist, weil die '+' Symbole werden als Quantoren interpretiert. Hier ist die Ausgabe von für folgendes Programm:

%Vor%

Gibt es einen Modifikator, mit dem ich angeben könnte, dass die Quantifizierer ignoriert werden sollen, Oder gibt es eine Funktion, die den Quantifizierern entgeht?

%Vor%

PS: Zusätzlich zu der Antwort Frage oben, begrüße ich jede Rückmeldung über Perl Verwendung in den oben genannten, wie ich noch lerne. Danke

    
philant 15.10.2008, 12:08
quelle

5 Antworten

27

Der Standardweg besteht darin, den \Q Escape-Indikator vor Ihrer Variablen zu verwenden, um Perl anzuweisen, den Inhalt nicht als regulären Ausdruck zu analysieren:

%Vor%

Wenn Sie diese Zeile in Ihrem Code ändern, erhalten Sie:

%Vor%     
Adam Bellaire 15.10.2008, 12:13
quelle
15

Ich glaube, Sie suchen quotemeta

    
Leon Timmermans 15.10.2008 12:15
quelle
8

zusätzlich zu der Antwort Frage oben, ich begrüße jede Rückmeldung über Perl Verwendung in der oben genannten, wie ich noch lerne. Danke

Ich würde dir raten, keine Prototypen zu verwenden (das ($) nach test_grep). Sie haben ihren Nutzen, aber nicht in den meisten Fällen und definitiv nicht in diesem.

    
Leon Timmermans 15.10.2008 12:17
quelle
2
  

PS: zusätzlich zu der Antwortfrage   oben, ich begrüße jedes Feedback zu Perl   Verwendung in dem oben genannten, wie ich immer noch bin   lernen.

Der beste Rat, den ich für Perl-Ratgeber im Allgemeinen geben kann, ist Perl :: Critic und Verwenden Sie den Befehl perlcritic für Ihren Code. Wenn Sie das nicht können, können Sie das Online-Perl-Tool verwenden. Es wird hilfreich sein, wenn Sie eine Kopie von Perl Best Practices zur Hand haben, da Perl::Critic das Buch bereits gelesen hat und Ihnen weiterhilft Verweise auf Seitenzahlen, auch wenn Sie das Buch nicht in der Nähe haben, finden Sie in der Perl :: Kritische Dokumentation Abschnitte beginnend mit Perl::Critic::Policy:: .

    
pjf 15.10.2008 14:31
quelle
2

Ich würde vorschlagen, in diesem Fall sowieso qr zu verwenden, um Regexp-Objekte anstatt Strings zu erzeugen.

%Vor%

Dann brauchst du das \ Q-Escape nicht. Obwohl Sie es immer noch verwenden können:

%Vor%     
Tanktalus 15.10.2008 15:22
quelle

Tags und Links