0

スピーチシンセサイザー(この場合はフェスティバルですが、すべてに適用されます)にフィードすると、次のテキストが表示されます。

「米国でのUSPGAチャンピオンシップで、BBCレポーターはMIAに行きました」。「私たちのuspgaチャンピオンシップで、BBCレポーターはミアに行きました」と書かれています。

言い換えれば、子音のクラスターであるため、「BBC」を正しく読み取りますが、他の子音から「単語」を作成していると思います。

最も簡単な方法は、2つ以上の大文字を検索するphpスクリプトを実行し、USPGAのように単語をスペースに「分解」することだと思います。

「そんなことしないように言った」などと変なことになると思いますが、ニュース報道ではあまり起こらない傾向があります。

つまりね; 私は「OK」という言葉を「爆発」させることができます。問題は、私は何ヶ月も試したにもかかわらず、正規表現の特定の側面に頭を悩ませることができない人々の1人です。この場合、それは探しています:大文字で隣り合った2つ以上の文字。

上記のすべてのプリアンブルを提供した理由は、私が見つけられなかった、またはそれを介してこれを行うためのより良い方法がある場合に備えてです-おそらく単語などの頭字語のdbです。

4

4 に答える 4

5

頭字語に一致するパターン:

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

これは、2つ以上の大文字を持つ任意の「単語」と一致します。

于 2010-09-19T10:08:35.947 に答える
4

先読みアサーションを使用すると、コードを大幅に簡素化できます

$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])「すべての首都の後に首都が続く」と言います

于 2010-09-19T11:21:04.797 に答える
2

Delan の正規表現を preg_replace_callback() で使用すると、識別された頭字語のすべての文字の間に単一のスペースを簡単に挿入できます

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

与える

米国で開催された USPGA チャンピオンシップで、BBC のレポーターが MIA に行きました

米国で開催された USPGA チャンピオンシップで、BBC のレポーターが MIA に行きました

于 2010-09-19T10:43:33.717 に答える
0

"[A-Z][A-Z]"隣り合う2つの大文字のインスタンスに一致します。

于 2010-09-19T10:09:36.100 に答える