0

如果我输入语音合成器(在这种情况下是节日,但它适用于所有人)以下文本:

“在美国的USPGA锦标赛上,BBC记者去了MIA”。上面写着“在美国的uspga锦标赛上,BBC记者去了mia”。

换句话说,我猜因为它是一组辅音,所以它正确地读取了“BBC”,但将其他的“单词”变成了“单词”。

我想,最简单的做法是通过一个查找 2 个或更多大写字母的 php 脚本运行它,然后简单地将单词“分解”成空格,例如 USPG A.

我意识到这会导致诸如“我告诉他不要那样做”之类的怪异现象,但在新闻报道中这种情况往往发生得更少。

事情是这样的;我可以“爆炸”一个词 好的,问题是,我是这样的人之一,尽管尝试了几个月,但还是无法理解 REGEX 的某些方面。在这种情况下,它正在寻找:两个或多个大写字母。

我给出上述所有序言的原因是为了以防万一有更好的方法来做到这一点,我还没有找到或通过 - 也许是单词或其他东西的首字母缩略词数据库。

4

4 回答 4

5

匹配首字母缩写词的模式:

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

这匹配任何带有两个或多个大写字母的“单词”。

于 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]"将匹配两个相邻的两个大写字母的任何实例。

于 2010-09-19T10:09:36.100 回答