Wyrażenia regularne są strasznie mega wielkie, ale to chyba jedyne rozsądne rozwiązanie. Teoretycznie powinno wystarczyć użycie
Kod
$tekst = preg_replace( "~\bci\b~", "Ci", $tekst ); // \b oznacza "granicę słowa"
które jest prostym wyrażeniem. W praktyce natomiast PHP nie rozpozna polskiej litery jako litery (będzie rozpoznawał granicę słowa między polską literą a zwykłą) i dalej ci się będzie psuło przy wyrażeniach typu "mąci". Pomoże dopiero emulowanie poprawnego działania \b przy użyciu przewidywania wprzód i wstecz. To jest strasznie mega wielkie, więc masz gotowca
?php
// Zakładam kodowanie UTF-8. Jeśli używasz innego trzeba będzie przerobić
$from = array( "ci", "tobie" ); $to = array( "Ci", "Tobie" ); $tekst = "tobie mąci ci ciąg w ciasnej daci. tobie. .tobie .tobie tobie ci";
for( $i = 0; $i < $elemCount; $i++ )
{
$toWord = $to[$i];
$tekst = preg_replace( "~(?<!\pL)" . $fromWord . "(?!\pL)~u", $toWord, $tekst ); }
?>