String in einem String ersetzen (Thema: PHP Beispiele)

Auf welche Weise ein Teilstring in einem bestehenden String ersetzt werden kann

1. Ersetzen festgelegter Strings - str_replace() / str_ireplace()

Um Strings in einem anderen String zu ersetzen wird zumeist str_replace($search, $replace, $subject) verwendet. An die Funktion wird der zu ersetzende String $search übergeben, sowie die Zeichenkette, die anstelle von $search eingesetzt werden soll. Ebenfalls benötigt wird $subject, also der String, in dem $search ersetzt werden soll.

PHP-Code
<?php
	$str = 'Morgen scheint bestimmt die Sonne.';
	$search = 'bestimmt';
	$replace = 'möglicherweise';
	var_dump(str_replace($search, $replace, $str));
?>

HTML-Code: Ausgabe
string(41) "Morgen scheint möglicherweise die Sonne."


Es dürfen auch mehrere Strings zum Suchen und zum Ersetzen übergeben werden. Die Parameter sind dann jeweils Arrays — eines für alle Strings, nach denen gesucht werden soll und eines für alle, durch die ersetzt werden soll. Der erste String aus dem $search-Array wird durch den ersten String aus $replace ersetzt, der zweite String aus $search durch den zweiten aus $replace usw. Auch nicht ungewöhnlich ist es, für $search ein Array mit mehreren Strings anzugeben, für $replace aber nur einen einzelnen String. Alle Treffer von $search werden dann durch den $replace-String ersetzt.

PHP-Code
<?php
	$str = 'Morgen scheint möglicherweise die Sonne.';
	$search = array('Morgen', 'bestimmt');
	$replace = array('Übermorgen', 'vielleicht');
	var_dump(str_replace($search, $replace, $str));
?>

HTML-Code: Ausgabe
string(46) "Übermorgen scheint möglicherweise die Sonne."


Soll Groß- und Kleinschreibung keine Rolle spielen, dann kann str_ireplace() verwendet werden. Die Parameter sind identisch mit str_replace().

PHP-Code
<?php
	$str = 'Übermorgen scheint möglicherweise die Sonne.';
	$search = array('ÜBERMORGEN', 'BESTIMMT');
	$replace = array('Nächste Woche', ' eher nicht ');
	var_dump(str_ireplace($search, $replace, $str));
?>

HTML-Code: Ausgabe
string(49) "Nächste Woche scheint möglicherweise die Sonne."


str_ireplace() hat allerdings Probleme mit nicht-ASCII-Zeichen und dementsprechend auch mit Umlauten. Im vorherigen Beispiel darf man „ÜBERMORGEN” etwa nicht durch „übermorgen” ersetzen. Dieses Wort würde nicht mehr in $str gefunden werden, da in $str nur ein „Übermorgen” mit großem „Ü” vorkommt und str_ireplace() das kleine ü nicht automatisch in ein großes umwandeln kann.

2. Ersetzen anhand von regulären Ausdrücken - preg_replace()

Um anhand eines regulären Ausdrucks zu suchen und zu ersetzen kann die Funktion preg_replace($regex, $replacement, $subject) verwendet werden. $regex ist der zu suchende Ausdruck, $replacement der String durch den ersetzt werden soll und $subject die Zeichenkette in der preg_replace nach $regex sucht.

PHP-Code
<?php
	$str = 'Nächste Woche scheint möglicherweise die Sonne.';
	$regex = '\s\w+?gli\w+?\s';
	var_dump(preg_replace('/'.$regex.'/u', ' wahrscheinlich nicht ', $str));
?>

HTML-Code: Ausgabe
string(54) "Nächste Woche scheint wahrscheinlich nicht die Sonne."


3. Ersetzen festgelegter Strings - strtr()

Seltener verwendet wird strtr() zum Ersetzen, welches große Ähnlichkeit zu str_replace() hat. An die Funktion wird ein Array übergeben, wobei jeder Schlüssel einem zu suchenden String entspricht. Den Schlüsseln wiederum wird jeweils ein Wert zugeordnet, durch den diese Schlüssel (falls sie denn gefunden werden) ersetzt werden sollen.

PHP-Code
<?php
	$str = 'Nächste Woche scheint wahrscheinlich nicht die Sonne.';
	$replacements = array('wahrscheinlich '=>'', 'ganz bestimmt'=>'auf jeden Fall');
	var_dump(strtr($str, $replacements));
?>

HTML-Code: Ausgabe
string(40) "Nächste Woche scheint nicht die Sonne."


4. mb_strpos() und substr_replace()

Eine weitere Möglichkeit ist die Verwendung von substr_replace($string, $replacement, $start, $length) in Kombination mit mb_strpos($haystack, $needle). mb_strpos() sucht nach der zu ersetzenden Zeichenkette und gibt deren Position zurück. substr_replace() ersetzt denn von dieser Position aus (Parameter $start) die Anzahl $length Zeichen (entspricht der Zeichenlänge des gesuchten Strings) durch $replacement. Diese Methode ist wesentlich umständlicher als etwa str_replace(), sodass sie in der Regel nicht verwendet werden sollte.

PHP-Code
<?php
	$str = 'Nächste Woche scheint nicht die Sonne.';
	$pos = mb_strpos($str, 'die Sonne');
	$replacement = 'der Mond';
	var_dump(substr_replace($str, $replacement, $pos, strlen('die Sonne')));
?>

HTML-Code: Ausgabe
string(38) "Nächste Woche scheint nicht der Mond."


Kommentare (1)

Von neu nach alt
Frage: Ich möchte gerne strtr oder str_replace auf einen bestimmten index eines arrays anwenden - geht das und wenn ja dann wie?
$ergebnis['username'] soll bearbeitet werden und an $ergebnis['username'] wieder übergeben werden.
Antwort: $ergebnis['username'] = str_replace($vokal, $ohnevokal, $ergebnis['username']);

Admin-Edit: Offenbar sollte das eine Feststellung bzw. ein Beispiel und keine Frage sein. Ich hab das Kommentar mal angepasst, sodass das deutlicher wird.
PeterStephan (Gast) #