2016-03-27 2 views
1

У меня есть некоторые проблемы с Regex, цель этого сценария сделать Auto Corrrection некоторых словRegex/Настройка к очень точек между строчными и прописными слов

Пример, который он должен соответствовать и Replace являются:

Word.Word 

Кому: Word. 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

заменить второе регулярное выражение:

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

с этим:

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

Вы, наверное, забыли, чтобы избежать точки (его маркер для любой символ).

+0

О, спасибо, это может быть причина = O. Я попытался сбежать, точки исчезли, но теперь он не изменит слово Word на слово «Слово», он делает «слово Слово», но вы дали мне огромный намек на это. Большое спасибо – Deex

+0

добро пожаловать! –

0

Попробуйте whitout точка пространства

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

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

Привет, я пробовал это, но это ничего не меняло. Я думаю, что часть с ошибкой: '$ string = preg_replace ("/([az]). ([AZ])/"," $ 1. $ 2 ", $ string);' Normaly it should match on "word.Word ", но вместо этого его совпадение на другие вещи Hmm – Deex

+0

Попробуйте $ string = preg_replace ("/([az] /) ./ ([AZ] /) "," $ 1. $ 2 ", $ string); я не уверен, но мог бы работать. – Milor123

Смежные вопросы