Frank Schönmann: Regulärer Ausdruck

Beitrag lesen

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 :)