У меня есть функция, которая обнаруживает и разматывает два слова, т.е.
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); }