Gibt es eine Möglichkeit, mehrere Zeichenfolgen in einer Zeichenfolge zu ersetzen?
Zum Beispiel habe ich die Zeichenfolge hello world what a lovely day
und ich möchte what
und lovely
durch etwas anderes ersetzen ..
Irgendwelche Ideen, warum es nicht funktioniert?
Danke.
Erstens funktioniert tr
nicht so; Konsultieren Sie perldoc perlop
für Details, aber tr
macht Transliteration und unterscheidet sich stark von der Substitution.
Zu diesem Zweck wäre ein korrekterer Weg zum Ersetzen
%Vor%Beachten Sie, dass "simultane" Änderungen etwas schwieriger sind, aber wir könnten dies zum Beispiel tun
%Vor%(Escapen kann natürlich notwendig sein, um Zeichenfolgen durch Metazeichen zu ersetzen.)
Dies ist immer noch nur in einem sehr lockeren Sinn des Begriffs, aber es tut für die meisten Zwecke so, als ob die Substitutionen in einem Durchgang ausgeführt würden.
Außerdem ist es korrekter, "what"
durch "it's"
anstatt "its"
zu ersetzen.
Nun, hauptsächlich funktioniert es nicht, da tr///d
nichts mit Ihrer Anfrage zu tun hat ( tr/abc/12/d
ersetzt a mit 1, b mit 2 und entfernt c). Außerdem interpolieren Arrays standardmäßig nicht in reguläre Ausdrücke auf eine Weise, die für Ihre Aufgabe nützlich ist. Ohne eine Hash-Suche oder einen Unterprogrammaufruf oder eine andere Logik können Sie auch keine Entscheidungen auf der rechten Seite einer Operation s///
treffen.
Um die Frage im Titel zu beantworten, können Sie mehrere Ersetzungen gleichzeitig durchführen - äh, in bequemer Folge - auf diese Weise:
%Vor%Etwas mehr zu tun, als das, was Sie hier versuchen:
%Vor%Wenn Sie viele solcher Ersetzungen durchführen, "kompilieren" Sie die Regex zuerst:
%Vor%BEARBEITEN:
Und um meine Bemerkung zur Array-Interpolation zu erweitern, können Sie $"
:
Was die Dinge hier nicht wirklich verbessert, obwohl es möglich ist, wenn Sie die Schlüssel bereits in einem Array hatten:
%Vor%Tags und Links arrays regex perl replace string-literals