Originariamente inviato da neida
Guarda se la soluzione proposta in questo
thread può tornarti utile.
Grazie neida, in effetti il mio problema è proprio quello del thread che mi hai indicato.
Ho usato la tua espressione regolare però ho notato che se la applico su una stringa tutta maiuscola non succede niente, se prima di usarla faccio un strtolower risultano minuscole tutte le iniziali tranne la lettera successiva all'apostrofo mentre funziona bene se prima di usarla faccio ucwords(strtolower(miastringa).
codice:
$stringa = "SANT'ANTONIO ABATE";
echo preg_replace("/(\w*)'(\w+)/ie", "'\\1\\''.ucwords('\\2')", $stringa);
// stampa SANT'ANTONIO ABATE
echo '
';
$stringa2 = "SANT'ANTONIO ABATE";
$stringa2 = strtolower($stringa2);
echo preg_replace("/(\w*)'(\w+)/ie", "'\\1\\''.ucwords('\\2')", $stringa2);
// stampa sant'Antonio abate
echo '
';
$stringa3 = "SANT'ANTONIO ABATE";
$stringa3 = ucwords(strtolower($stringa3));
echo preg_replace("/(\w*)'(\w+)/ie", "'\\1\\''.ucwords('\\2')", $stringa3);
// stampa correttamente Sant'Antonio Abate
mi sei stato di grandissimo aiuto ma mi chiedevo se fosse possibile nel caso di stringa3 fare tutto all'interno dell'espressione regolare.
Grazie ancora. 
P.S. La tua espressione regolare l'ho quotata dal tuo thread perchè ho visto che veniva eliminato un backslash dal codice. Anche in questi esempi che ho scritto manca sempre un backslash prima di ucwords ma nel codice se lo quoti c'è.