Обнаружение и замена объединенных слов MyWord в My Word – PHP, регулярное выражение

У меня есть функция, которая обнаруживает и разматывает два слова, т.е.

HelloWord 

после того, как функция станет

 Hello World 

проблема в том, что он будет делать то же самое с iPhone -> i Phone, что нехорошо, есть ли способ заменить, только если первое слово длиннее 1

вот моя текущая функция (регулярное выражение):

 function unseparateWords($string) { $CapRegX = '/(\B[AZ])(?=[az])|(?<=[az])([AZ])/sm'; $RepStr = ' $1$2'; return preg_replace($CapRegX,$RepStr,$string); } 

Спасибо за помощь.

ура, / Марцин

Вы можете найти позицию между строчными буквами и символом верхнего регистра

 (?<=\B[az])(?=[AZ]) 

и замените эту «строку нулевой длины» пробелом.

 (?<=\B[az]) # assert that we are right after a lowercase ASCII character # unless that character is the start of the current word (?=[AZ]) # assert that there is an uppercase ASCII character right ahead 

В PHP:

 function unseparateWords($string) { return preg_replace('/(?<=\B[az])(?=[AZ])/', ' ', $string); }