正则表达式/设置为小写和大写单词之间有很多点

Regex / Setting to much dots between lowercase and uppercase Words

我在使用 Regex 时遇到了一些问题,这个脚本的目的是对某些单词进行自动更正

他应该匹配和替换的例子是:

Word.Word

致:字。单词

wordWord

致:字。单词

我用下面的脚本来做到这一点

function filter_string($string) {
    $string = preg_replace("/([a-z])([A-Z])/", ". ", $string);
    $string = preg_replace("/([a-z]).([A-Z])/", ". ", $string);
    $string = str_replace("...", "&hellip", $string);
    $string = str_replace("Games. Com", "GamesCom", $string);
    $string = str_replace("Pv. P", "PvP", $string);
    $string = str_replace("Pv. E", "PvE", $string);
    $string = str_replace("Blizz. Con", "BlizzCon", $string);
    $string = str_replace(". PvP", " PvP", $string);
    $string = str_replace(". PvE", " PvE", $string);
    return $string;

但出于某种原因他也匹配

Legendary Pictures zeigt uns das offizielle Poster zum Warcraft Film.

并替换为

Legendary. Pictures zeigt uns das offizielle. Poster zum. Warcraft. Film. 

我不明白所有的点是从哪里来的,也不知道他为什么要匹配这个,我希望有人能给我一个提示,它有什么问题。

不加点试试space

$string = preg_replace("/([a-z])([A-Z])/", ".", $string); 

$string = preg_replace("/([a-z]).([A-Z])/", ".", $string);

替换你的第二个正则表达式:

$string = preg_replace("/([a-z]).([A-Z])/", ". ", $string);

这个:

$string = preg_replace("/\.(\w)/", ". ", $string);

您可能忘记转义点(它是任何字符的标记)。