Wie konvertiere ich einen string in einen regulären Ausdruck übereinstimmt, selbst in Perl?
Wie konvertiere ich einen string mit einem regulären Ausdruck übereinstimmt, selbst in Perl?
Habe ich eine Reihe von Zeichenfolgen wie diese:
Enter your selection:
Enter Code (Navigate, Abandon, Copy, Exit, ?):
und ich will wandeln Sie reguläre Ausdrücke sop ich kann das Spiel etwas anderes gegen Sie. In den meisten Fällen der string ist der gleiche wie der reguläre Ausdruck, aber nicht in dem zweiten Beispiel oben, weil die ( und ? Bedeutung in regulären Ausdrücken. So, die zweite Zeichenfolge muss ein Ausdruck wie:
Enter Code \(Navigate, Abandon, Copy, Exit, \?\):
Brauche ich nicht die passenden zu sein, zu streng, so etwas wie dieses wäre gut:
Enter Code .Navigate, Abandon, Copy, Exit, ..:
Meine aktuellen denken ist, dass ich verwenden könnte, so etwas wie:
s/[\?\(\)]/./g;
aber ich weiß nicht wirklich, was Zeichen sind, werden in die Liste der Zeichenfolgen, und wenn ich vermisse eine Besondere char dann könnte ich nie bemerkt das Programm nicht verhält wie erwartet. Und ich fühle, dass es vorhanden sein sollte, eine Allgemeine Lösung.
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Brad Gilbert kommentiert Verwendung quotemeta:
oder
Gibt es eine Funktion für das
quotemeta
.Vom http://www.regular-expressions.info/characters.html :
11 Zeichen mit speziellen Bedeutungen: der öffnenden eckigen Klammer
[
der backslash\
die Einfügemarke^
die dollar-Zeichen$
, Zeitraum-oder Punkt -.
die vertikale bar oder pipe-symbol|
das Fragezeichen?
Sternchen oder star*
, das plus-Zeichen+
der ersten Runde Klammer(
und die schließende Runde Klammer)
In Perl (und PHP) gibt es eine spezielle Funktion quotemeta, flieht alle diese für Sie.
{}
?$foo =~ /a{1,4}/;
{
und}
sind nicht besonderes. Sie haben sich in ein gültiges pattern matching konstruieren, etwas besonderes zu sein. In jedem Fallquotemeta
wird kümmern sich um diejenigen, die als gut.Setzen Brad Gilbert's Vorschlag in einer Antwort statt eines Kommentars, die Sie verwenden können, quotemeta Funktion. Alle Kredit, um ihn
Warum verwenden Sie einen regulären Ausdruck an der alle? Da Sie nicht tun, jede Aufnahme, und es scheint Sie nicht zu, dass für alle Varianten, warum nicht nutzen Sie einfach die
index
builtin?