PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : perl: Frage zu tr



Xanti
17.02.2006, 14:16
Hallo,

ich möchte unter perl Umlaute ersetzen wie folgt ersetzen:



$base =~ s/ä/ae/ig;
$base =~ s/ö/oe/ig;
$base =~ s/ü/ue/ig;
$base =~ s/ß/ss/g;


Ist es möglich, dies auch durch tr zu lösen?



$base =~ tr/ÄÖÜäöü/.../


Leider scheitert es daran, dass ich jedes Zeichen nur durch ein Zeichen ersetzen kann und nicht durch ein Doppelzeichen. Vielleicht weiss jemand ne Lösung.

Gruss, Phorus

Wolfgang
17.02.2006, 14:44
Hallo
Nein, tr kann nur einzelne Zeichen ersetzen.

Gruß Wolfgang

Xanti
17.02.2006, 14:55
Ok, danke.

Gruss, Phorus

Wolfgang
17.02.2006, 15:11
Hallo
Kleiner Tipp:
Wenn du viele mögliche Ersetzungen machen musst, dann kann es hilfreich sein, sich dafür ein hash zu basteln.
e.g.


my %h =( ä => ae, ü => ue, ß => ss);
my $s="där üble string"; #:-)
foreach my $k (keys %h){
$s=~s/$k/$h{$k}/g;
}
...
Besonders wenn du viele Teile hast und flexibel bleiben willst, brauchst du nur dein hash ergänzen.
Auch mit einer map -Funktion gut zu realisieren. ;)

Allerdings wird es etwas tricky, wenn du die Groß/Kleinschreibung beachten musst.
Dann müsstest du noch auf Wortgrenzen matchen, und Worte die nur aus Großbuchstaben bestehen extra filtern.

Gruß Wolfgang

Xanti
17.02.2006, 16:21
Gross-/Kleinschreibung ist egal, bei mir ist alles lc. Aber Danke für den Tipp, er verkürzt meinen Quellcode erheblich. :)

Gruss, Phorus