Kurz um, um einen exakten String zu ersetzten, muss man preg_replace mit dem “\b” – Parameter (word boundary) benutzen:
$new_string = preg_replace('/\b'.$exact_string.'\b/', $replace_with);
Ich kannte es sonst nur so:
$new_string = preg_replace('^'.$exact_string.'$', $replace_with);
Das warf bei mir aber immer den Fehler:
Warning: preg_replace() [function.preg-replace]: No ending delimiter '^' found in /home/....php on line ...
Einige werden sagen, warum macht er das denn nicht mit dem viel performanteren str_replace?
Ich nehme preg_replace, weil ich in dem übergebenen String den zu ersetzenden Teilstring nur einmal ersetzen will.
Als dritten Parameter kann man angeben wie oft der Teilstring ersetzt werden soll.
$new_string = preg_replace('/\b'.$exact_string.'\b/', $replace_with,1);
Wenn es case insensitive sein soll einfach ein “i” anhängen:
$new_string = preg_replace('/(\b'.$exact_string.'\b)/i', $replace_with);
Edit:
Plötzlich tauchte diese Warnung bei der Übergabe eines ganz normalen Strings auf:
preg_replace() [function.preg-replace]: Unknown modifier 't'
Abhilfe schaffte die Änderung der Delimiter von Slash (/) auf Pipe (|):
$new_string = preg_replace('|(\b'.$exact_string.'\b)|i', $replace_with);