Вопрос:
Я ищу php regex, чтобы разделить улицу и номер дома, но когда адрес не имеет номера дома, он должен указывать только название улицы.
У меня есть это:
/([^d]+)s?(.+)/i
Он работает, но когда адрес не имеет номера дома, он разбивает последнюю букву с названия улицы.
Это мой код:
$result = mysqli_query($db, «SELECT street FROM branch;»); $row = mysqli_fetch_assoc(); while($row = mysqli_fetch_assoc($result)) { if ( preg_match(‘/([^d]+)s?(.+)/i’, $row[‘street’], $street) ) { $streetName = $street[1]; $streetNumber = $street[2]; echo $streetName; echo «<br />»; } }
Примеры адресов: UL.JANA PAWLA, UL.GDANSKA 83A, UL.MOSTOWA 5
Лучший ответ:
Я думаю, что вы пытаетесь сделать это:
Лаймы 45
будет выглядеть так:
Улица: Лаймы
Номер: 45
И ваша проблема в том, что если данные:
Только Гоблины
Ваш результат неверен.
Улица: Глобины
Номер: Улица
Поэтому: попробуйте это Regex:
s?([^d]+s)s?(d+.*)*
Что оно делает:
- Если не число, забирающее все не-числовые значения в качестве первой группы (улицы)
- Если после этой точки существует число, оно собирает число и все следующие символы в качестве второй группы.
Входы:
Лаймы
Выход:
Street: The Limes
Входы:
Лаймы 45
Выход:
Street: The Limes Number: 45
Входы:
Лаймы 45B
Выход:
Street: The Limes Number: 45B