Regulärer Ausdruck
Thorsten Steffen
- perl
Hi,
ich möchte in nem perl-script einen kleingeschriebenen Begriff in einer Variable ändern, und zwar soll
Danke
Thorsten
Hallo Thorsten,
mit einem einzigen Befehl wirst du das wohl nicht alles erschlagen. Aber probiers mal so - die folgenden Befehle nehmen an, dass deine Zeichenkette in einer Variablen namens $Zeichenkette gespeichert sind:
- der erste Buchstabe groß geschrieben werden
$Zeichenkette = ucfirst($Zeichenkette);
- ae durch ä
$Zeichenkette =~ s/ae/ä/g;
- oe durch ö
$Zeichenkette =~ s/oe/ö/g;
- ue durch ü
$Zeichenkette =~ s/ue/ü/g;
- ss durch ß
$Zeichenkette =~ s/ss/ß/g;
viele Gruesse
Stefan Muenz
Hi,
- ae durch ä
- oe durch ö
- ue durch ü
- ss durch ß
Megärlebnis, Autöinstellplatz, Fraünquote, Außtellung. Ich hoffe Du weißt, was Du tust ;-)
Gibts dafür nen regulären Ausdruck ?
Ungetestet:
my %ersetzungen = {'ae'=>'ä', 'oe'=>'ö', 'ue'=>'ü', 'ss'=>'ß'};
foreach (keys %ersetzungen) {
$string =~ s/$_/$ersetzungen{$_}/g;
}
$string =~ s/([aou]ess)/$ersetzungen{$1}/g;
ucfirst($string) sollte _danach_ eingesetzt werden, unter Verwendung von
perldoc perllocale
Cheatah
hi!
my %ersetzungen = {'ae'=>'ä', 'oe'=>'ö', 'ue'=>'ü', 'ss'=>'ß'};
$string =~ s/([aou]ess)/$ersetzungen{$1}/g;
Hm, das sieht lustig aus. An sowas hab ich auch noch nie gedacht ;))
Schade, dass "a" und "ä" nicht ganz so weit auseinander sind, wie "o/ö" und "u/ü". Deshalb funktioniert
folgender Ausdruck nur mit "oe", "ue", "Oe" und "Ue" (keine Garantie, dass das überall und auf jeder
Plattform läuft):
$text =~ s/([ouOU])e/chr(ord($1)+135)/eg;
Naja, man kann das natürlich etwas erweitern, damit es auch mit "ae" und "Ae" funktioniert:
$text =~ s([aAoOuU])echr(ord($1)+135-4+(int(ord(lc$1)/(ord((ord(lc$1)>ord("U"))?"a":"A")+1))*4))eg;
Leider fällt mir für die Umwandlung von "ss" in "ß" keine Möglichkeit mehr ein, das zu erweitern. Aber inkl.
Vergrößerung des ersten Buchstabens, kann man das ganze - ohne Garantie - so zusammenfassen:
use locale;
$text =~ s([aAoOuU])eucfirst chr(ord($1)+135-4+(int(ord(lc$1)/(ord((ord(lc$1)>ord("U"))?"a":"A")+1))*4))eg;
bye, Frank!
ps: Bitte diesen Beitrag nicht allzu ernst nehmen :)
hi!
use locale;
$text =~ s([aAoOuU])eucfirst chr(ord($1)+135-4+(int(ord(lc$1)/(ord((ord(lc$1)>ord("U"))?"a":"A")+1))*4))eg;
Ups, da hab ich wohl einen Denkfehler begangen. Das funktioniert natürlich so nicht. Wenn aber einer
trotzdem eine Lösung hat, darf er sie gerne posten ;)
bye, Frank!