globe: regexp: je nach ergebnis untersch. ersetzung

Beitrag lesen

n'abend,

$zeichen = array( 'ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue', 'ß'  => 'ss');

$string = "Hällö Wörld";
$ohneUmlaute = strtr( $string, $zeichen );

  
  

> damit hatte ichs auch probiert, mit preg\_replace\_callback wirds mir schon zu komplex, mit extra funktion und so.  
  
Was du eingangs als "Backreference" bezeichnetest, hat mein Hirn automagisch nach "Callback(-reference)" konvertiert. Dementsprechend wies ich dich auf die beiden Möglichkeiten zur Nutzung von Callback-Funktionen in Regulären Ausdrücken hin. Dass du - je nach Anforderung - dann eine eigene Callback-Funktion angeben musst, versteht sich von selbst.  
  

> jedoch scheint es, wie wenn man bei preg\_replace mit modifier e keine kontrollstrukturen verwenden kann. wie if else ...  
  
Das könnte daran liegen, dass dort "inline-PHP" erwartet wird, kein Code-Block. Braucht man das, würde man die Funktionalität in einer Callback-Funktion kapseln.  
  

> der hinweis von bittersman vereinfacht zumidnest dieses problem jedoch optimal.  
  
der Hinweis von Gunnar zeigt dir lediglich, dass du mehere "Ersetzungsgesuche" in einem einzigen Aufruf von preg\_replace ausführen kannst. Das ist aber - soweit ich dich verstanden habe - nicht das was du suchtest.  
  
Solltest du mit Gunnars Hinweis doch zufrieden sein, möchte dich dich darauf hinweisen, dass es unnötig ist für solche Trivialfälle RegEx einzusetzen. RegExe sind - mit Ausnahmen - langsamer als die "einfachen String-Funktionen". Bevor du also (wie im folgenden Beispiel) mit Kanonen auf Spatzen schießt, solltest du überlegen stattdessen [strtr()](http://php.net/strtr) zu benutzen  
  
~~~php
 // unsinniger Gebrauch von Regular Expressions für triviale Ersetzungen:  
$zeichenkette = 'Der schnelle braune Fuchs sprang über den faulen Hund.';  
  
$suchen = array( '/schnelle/', '/braune/', '/Fuchs/' );  
$ersetzen = array( 'Bär', 'schwarze', 'langsame' );  
echo preg_replace($suchen, $ersetzen, $zeichenkette);
 // sinnvollerer Einsatz von strtr() für triviale Ersetzungen:  
$zeichenkette = 'Der schnelle braune Fuchs sprang über den faulen Hund.';  
  
$ersetzen = array( 'schnelle' => 'Bär', 'braune' => 'schwarze', 'fuchs' => 'Bär' );  
  
echo strtr($zeichenkette, $ersetzen);

weiterhin schönen abend...

--
Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|