2015-10-05 2 views
0

Я объясняю свою проблему: я работаю на различного рода адресRegex PHP, найти символы в конкретной позиции

" 25 Down Street 15000 London " 

" 25 B Down Street 15000 London " 

" Building A 25 Down Street 15000 London " 

Я нашел способ, чтобы определить, какой это номер улицы по всему корпусу с этим регулярное выражение:

`^([1-9][0-9]{0,2}(?:\s*[A-Z])?)\b` 

Но теперь я получил проблему, которую я не могу решить, что мне нужно, когда дело реально определить символы, которые перед номером на улице в.

Пример: «Building 2 25 вниз Street 15000 Лондон» я здесь нужно найти только «дом 2»

Я понимаю, что я должен найти символы перед первым номером этой строки.

Продолжайте поиск самостоятельно, но будет здорово, если кто-нибудь получит решение для меня.

спасибо.

Редактировать мой код теперь:

preg_match('/^(.*?)\d+\s+\D+/', $cleanAdressNode, $result, PREG_OFFSET_CAPTURE,0); 
     print $result[0][0]; 

     return $result[0][0]; 

и результат сейчас: Résidence Les Терм 1 15 Boulevard Jean Жорес вместо только: Résidence Les Терм 1

+0

Соответствующие адреса с использованием регулярных выражений почти невозможны ... для определения того, что означает каждый токен в строке, потребуется целенаправленная система. –

ответ

1

Как насчет:

preg_match('/^(\D*)/', $str, $match); 

Вы найдете в $match[1] все, что не является цифрой в начале строки.

По вашему примеру:

preg_match('/^(.*?)\d+\s+\D+/', $str, $match); 
+0

Я нашел способ сделать это: https://regex101.com/r/nU5tA7/1 Но моя новая проблема в том, что у меня могут быть специальные символы, такие как «é» или «ç», и мое регулярное выражение «не», t работать с этим взглядом на этот пример: https://regex101.com/r/yB1hI0/1, может быть, вы можете мне помочь? – VERYNET

+0

@VERYNET: см. Мое редактирование. – Toto

+0

@VERYNET: Я не могу помочь вам, не видя ваш код. Измените свой вопрос, добавьте соответствующую часть кода, некоторые примерные строки ввода и ожидаемый результат. – Toto

0

Если вы хотите, чтобы соответствовать первым не-цифровых символов, ^([^0-9]*) должны сделать трюк. Он использует отрицание класса для захвата всех нечисловых символов в начале строки.

+0

Я нашел способ сделать это: regex101.com/r/nU5tA7/1 Но моя новая проблема в том, что у меня могут быть специальные символы, такие как «é» или «ç», и мое регулярное выражение больше не работает с этим посмотрите на этот пример: regex101.com/r/yB1hI0/1, может быть, вы можете мне помочь? – VERYNET

+0

Здесь вы ищете две группы: «Résidence les Thermes 1» и «25 B Boulevard Emile Zola 13100 Aix en Provence»? – Aaron

+0

Только для: «Résidence les Thermes 1», это единственный матч – VERYNET

Смежные вопросы