Perl ersetzt mehrere Zeichenfolgen gleichzeitig

8

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 ..

%Vor%

Irgendwelche Ideen, warum es nicht funktioniert?

Danke.

    
Travv92 30.05.2013, 02:11
quelle

2 Antworten

9

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.

    
muhmuhten 30.05.2013, 02:19
quelle
6

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 $" :

ändern %Vor%

Was die Dinge hier nicht wirklich verbessert, obwohl es möglich ist, wenn Sie die Schlüssel bereits in einem Array hatten:

%Vor%     
Julian Fondren 30.05.2013 02:23
quelle