Intereting Posts
Хранение массива переменных PHP $ _POST в виде массива MYSQL – добавить или вставить значение в столбец в зависимости от того, пуст он или нет PHP MySQL, если время составляет 5 минут или больше, то время хранения PHP Неустранимая ошибка: класс «Slim» не найден Теги PHPExcel Render html в строке таблицы mysql Как разобрать блок комментариев PHP-стиля PHP? Одна форма, одна кнопка отправки, но ДВА действия Php system () / exec () не возвращает результат Java 1.6 Сбой при вызове фоновой задачей Symfony Не выводить сообщения об ошибках формы Разделить строку utf8 на массив символов Отправка электронной почты с статической страницы html Почему строка, окруженная одинарными кавычками, не будет интерполировать имена переменных, которые она содержит в PHP, а с двойными кавычками? Маршрутизация с помощью AngularJS и Slim PHP Сущность имеет валидацию в Zend Framework 2 с Doctrine 2 с использованием inputfilter в сущности

Regex: добавить пробел, если буква смежна с номером

Я использую 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); 

получает второе.