如果我提供一个语音合成器(节日,在这种情况下,但它适用于所有),下面的文字:
“在美国的USPGA锦标赛上,英国广播公司的记者去了MIA”。 它读 “在美国的uspga锦标赛上,英国广播公司的记者去了mia”。
换句话说,我猜这是因为它是一个辅音群,它正确地读取“BBC”,但却使其他词语成为“单词”。
我想,最简单的事情就是通过php运行它 寻找2个或更多大写字母的脚本,简单地说 将这个词“爆炸”成空格,比如U S P G A.
我意识到这会导致像我告诉他的那样奇怪 不应该这样做“,但在新闻报道中往往会发生的事情更少。
这就是事情;我可以“爆炸”一个词好吧,问题是,我是那些尽管经过几个月的尝试,却无法理解REGEX某些方面的人之一。 在这种情况下,它正在寻找:在大写字母中彼此相邻的两个或更多字母。
我给出上述所有前导码的原因是万一有更好的方法可以做到这一点我没有找到或通过 - 或许是一个单词或其他东西的缩写词。
答案 0 :(得分:5)
匹配首字母缩略词的模式:
/\b([A-Z]{2,})\b/
匹配任何“单词”与两个或多个大写字母。
答案 1 :(得分:4)
您可以使用lookahead assertion
大大简化您的代码$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])
说“所有资本都跟着资本”
答案 2 :(得分:2)
在preg_replace_callback()中使用Delan的正则表达式可以很容易地在所识别的首字母缩略词的所有字母之间放置一个空格
$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
在美国的U S P G A锦标赛中 美国B B C记者去了M I A
答案 3 :(得分:0)
"[A-Z][A-Z]"
将匹配彼此相邻的两个大写字母的任何实例。