Thread Regex ausgabe auf Array
(9 answers)
Opened by piet at 2010-08-01 10:54
Das mit dem Ersetzen durch Hash-Werte sieht dann so aus:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 #!/usr/bin/perl use strict; use warnings; my %ersetzungen = ( hans => 'Hallo', test => 'Welt', ); my $datei = 'Ein Test: $hans $test.'; my @platzhalter = $datei =~ s/(?<=\$)(.+?)(?![A-Za-z0-9])/$ersetzungen{$1}/g; print $datei; Das gibt dann Ein Test: $Hallo $Welt. aus. s/// ist der Operator für Ersetzungen. Der Teil zwischen den ersten // ist der Suchteil und der Teil zwischen den nächsten // ist der Ersetzungsteil. Jetzt sieht der Suchteil komplexer aus als in meinem vorherigen Post. Was passiert da? Der Ausdruck (?<=\$) ist ein "Lookbehind". Damit stellt man sicher, dass vor dem eigentlichen Suchausdruck ein Wert vorkommen muss. Allerdings wird dieser Teil dann im Ersetzungsteil nicht ersetzt (Erklärung dazu in dem Link unten). Das habe ich gemacht, weil Du in der Problembeschreibung geschrieben hast, dass nur "hans" in dem Array landen soll und dass soll ersetzt werden. Soll auch das "$" aus "$datei" verschwinden (also das komplette "$hans", dann muss einfach aus (?<=\$) ein \$ werden. In der zweiten Gruppierung ((.+?)) landet dann der Bezeichner des Platzhalters (hier: "hans" bzw. "test") in $1. Danach folgt ein "Negative lookahead", mit dem man festlegen kann, was auf etwas "nicht" folgen darf. Da hier das lookahead schon "negativ" ist, wird die Zeichenklasse nicht mehr negiert. Auch hier wird der lookahead nicht ersetzt, denn das Leerzeichen bzw. der Punkt in dem Beispiel soll ja nicht ersetzt werden. Mehr zu Lookahead und Lookbehind: http://www.regular-expressions.info/lookaround.htm... Übrigens ist YAPE::Regexp::Explain ein tolles Tool für Regex-Erläuterungen. Das sagt in diesem Fall: Code: (dl
)
1 The regular expression: OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/) -- Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html Perl-Entwicklung: http://perl-services.de/ |