Powinno sie dwoma, zreszta zobacz sobie co zwroci
<?php
?>
to zrozumiesz. W kazdym stringu (czy to w apostrofach czy cudzyslowach), zeby napisac backslasha trzeba go poprzedzic drugim backslashem. A to, ze dziala z jednym jest tylko i wylacznie pozytywnym skutkiem ubocznym tego, ze jesli po slashu nie wystepuje zaden znak specjalny (np. \n, \r, \t etc.) to jest on traktowany jako zwykly slash. Ale teraz zalozmy czysto teoretycznie, ze za jakis czas pojawi sie nowy znak specjalny w stringach, np. *, i teraz wszystkie wyrazenia zawierajace '\*' szlag trafia a autorzy zastanawiaja sie dlaczego. Tak wiec bezpieczniej i poprawniej jest dac podwojnego.
I jeszcze jedno.. potencjalny problem tyczy sie tylko stringow w cudzyslowach, poniewaz te w pojedynczych nie sa parsowane i nie posiadaja zadnych specjalnych kombinacji (pomijajac tylko to, ze aby podac apostrof lub backslasha na koncu stringa trzeba je escapowac, ale tylko w tym przypadku)
A co do Twojego problemu, to zrob przed preg_replacem
<?php
echo $string.\"<br>\"; ?>
i pokaz co wyswietlilo, bo mam dziwne przeczucie. Tymbarziej ze wyrazenie jest calkiem poprawne.