Я использую PHP и не очень хорош с регулярным выражением. Мне нужно preg_replace, которое может добавить пробел, если буква или номер смежны.
Это сценарии:
mystreet12 -> mystreet 12 mystreet 38B -> mystreet 38 B mystreet16c -> mystreet 16 c my street8 -> my street 8
Благодарю.
Вы можете использовать lookarounds для соответствия таким позициям:
preg_replace('/(?<=[az])(?=\d)|(?<=\d)(?=[az])/i', ' ', $str);
В зависимости от того, как вы определяете «письмо», вы можете настроить [az]
.
Для того, чтобы заставить его работать с строками, например:
0a1b2c3
Там, где решения без этого не удастся.
Что-то вроде:
preg_replace_all("/([az]+)([0-9]+)/i","\\1 \\2", $subject);
Должна доставить тебя далеко 🙂
Использование классов POSIX для переносимости:
preg_replace("/([[:alpha:]])([[:digit:]])/", "\\1 \\2", $subject);
получает первый переход.
preg_replace("/([[:digit:]])([[:alpha:]])/", "\\1 \\2", $subject);
получает второе.