我在使用正则表达式时遇到了一些麻烦,这个脚本的目的是对某些单词进行自动修正
他应该匹配和替换的示例是:
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.
我不知道所有的点都来自哪里,以及为什么他匹配这个,我希望有人可以给我一个提示它的错误。
答案 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);