PCRE Problems?

$text='foo foo';

$regexp='/(\s|^)foo(\s|$)/';
$text=preg_replace($regexp, 'bar ', $text);

A ragion di logica dovrebbe dare bar bar, però dà bar foo.

E il problema è la presenza dei due spazi: tirandone via uno a discrezione personale il tutto funzionerà come vorreste…

Le espressioni regolari hanno questa logica qua: se lo spazio finale è già stato usato da un’occorrenza, la successiva non lo potrà usare.

È una logica anche questa, ma come lo spiego all’utente che se mette due faccine di seguito deve mettere due spazi tra esse?

Se usasse l’editor che gli do il tutto funzionerebbe…

Utenti, dovete piegarvi alla logica delle PCRE!

Oppure bisogna passare due volte la stringa, la prima con str_replace: in quel caso sì che funzionerà, perché il singolo spazio diventerà doppio… E come performance non si perde quasi niente.