Question

Si je nourrirai un synthétiseur de parole (festival, dans ce cas, mais il applique à tous) le bit suivant du texte:

« Au championnat USPGA aux États-Unis, le journaliste de la BBC a MIA ». ça lit « Au championnat USPGA en nous, le journaliste de la BBC a mia ».

En d'autres termes, je suppose que parce qu'il est un groupe de consonnes, il lit « BBC » correctement, mais fait des « mots » sur les autres.

La chose la plus simple à faire, je suppose, serait de l'exécuter à travers un php scénario qui avait l'air pour 2 ou plusieurs lettres majuscules, et simplement "explose", le mot dans des espaces, comme U S P G A.

Je me rends compte qu'il causerait bizarreries avec des choses comme « Je lui ai dit N O T de le faire », mais dans les rapports de presse qui a tendance à se produire moins.

Voici la chose; Je peux « exploser » un mot OK, le problème est, je suis l'un de ceux qui, en dépit de mois d'efforts, ne peuvent tout simplement pas obtenir leur tête autour de certains aspects de REGEX. Dans ce cas, il cherche: deux ou plusieurs lettres à côté de l'autre dans les capitales

.

La raison pour laquelle j'ai donné tous les pré-Amble ci-dessus est dans le cas où il y a une meilleure façon de le faire, je ne l'avais pas trouvé ou par des -. Peut-être un des sigles db à des mots ou quelque chose

Était-ce utile?

La solution

En utilisant l'expression régulière de Delan avec preg_replace_callback () il est très facile de mettre un espace unique entre toutes les lettres des sigles identifiés

$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;

donnant

  

Au championnat USPGA aux États-Unis,   le journaliste de la BBC a MIA

     

Au championnat U S P G A dans la   U S, le journaliste B B C M I a A

Autres conseils

Un motif pour correspondre acronymes:

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

qui correspond à tout « mot » avec deux capitales ou plus.

vous pouvez grandement simplifier votre code en utilisant un assertion préanalyse

$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]) dit "chaque capitale suivi d'un capital"

"[A-Z][A-Z]" correspondra à une instance de deux lettres majuscules à côté de l'autre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top