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

时间:2016-03-27 02:36:01

标签: regex preg-replace

我在使用正则表达式时遇到了一些麻烦,这个脚本的目的是对某些单词进行自动修正

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

Word.Word

To:Word。字

wordWord

To:word。字

我使用以下脚本执行此操作

function filter_string($string) {
    $string = preg_replace("/([a-z])([A-Z])/", "$1. $2", $string);
    $string = preg_replace("/([a-z]).([A-Z])/", "$1. $2", $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. 

我不知道所有的点都来自哪里,以及为什么他匹配这个,我希望有人可以给我一个提示它的错误。

2 个答案:

答案 0 :(得分:2)

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

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

这一个:

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

你可能忘了逃避点(它是任何角色的标记)。

答案 1 :(得分:0)

尝试使用whitout点空间

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

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