Domanda

Se nutro un sintetizzatore vocale (festival, in questo caso, ma si applica a tutti) la seguente parte di testo:

"al Campionato USPGA negli Stati Uniti, il giornalista della BBC è andato MIA". si legge "Al campionato USPGA negli Stati Uniti, il giornalista della BBC è andato mia".

In altre parole, credo che perché è un gruppo di consonanti, si legge "BBC" correttamente, ma rende "parole" fuori gli altri.

La cosa più semplice da fare, suppongo, sarebbe quella di eseguire attraverso un php sceneggiatura che ha esaminato per 2 o più lettere maiuscole, e semplicemente "esplode" la parola in spazi, come U S P G A.

mi rendo conto che sarebbe causerebbe stranezza con cose come "gli ho detto N O T per farlo", ma nei rapporti di notizie che tende ad accadere in meno.

Ecco la cosa; Posso "esplodere" una parola OK, il problema è che io sono una di quelle persone che, nonostante mesi di tentativi, non ne ha mai la testa rotonda alcuni aspetti della REGEX. In questo caso, è alla ricerca di: due o più lettere una accanto all'altra in maiuscolo

.

La ragione per cui ho dato tutto il pre-ambio sopra è nel caso in cui ci sia un modo migliore di fare questo non avevo trovato o tramite di -. Forse un db di acronimi a parole o qualcosa

È stato utile?

Soluzione

uso delle espressioni regolari di Delan con preg_replace_callback () rende molto facile mettere un singolo spazio tra tutte le lettere degli acronimi individuati

$input = "At the USPGA championship in the US, the BBC reporter went MIA";

function cb_separateCapitals($matches) {
    return implode(' ',str_split($matches[0]));
}


echo $input,'<br />';

$output = preg_replace_callback('/\b([A-Z]{2,})\b/','cb_separateCapitals',$input);

echo $output;

dando

  

Al campionato USPGA negli Stati Uniti,   il giornalista della BBC è andato MIA

     

Al campionato U S P G A nel   U S, il giornalista B B C andato M I A

Altri suggerimenti

Un modello da abbinare acronimi:

/\b([A-Z]{2,})\b/

che corrisponde a qualsiasi 'parola' con due o più capitali.

È possibile semplificare notevolmente il codice utilizzando un lookahead

$input = "At the USPGA championship in the US, the BBC reporter went MIA";
echo preg_replace('~[A-Z](?=[A-Z])~', '$0 ', $input);

[A-Z](?=[A-Z]) dice "ogni capitale seguita da un capitale"

"[A-Z][A-Z]" corrisponderà a qualsiasi istanza di due lettere maiuscole uno accanto all'altro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top