Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Как найти номер дома и улицы в адресе?

Сообщения:  [1-10]   [11-18] 

 
 автор: terra nova   (18.06.2013 в 12:27)   письмо автору
 
   для: terra nova   (18.06.2013 в 12:25)
 

А еще некоторые пишут без пробела
Via Nazionale Ss113, Карония

Хотел написать запрос, чтобы возвращал название местности идущее после цифр, а получилось найти перед цифрами :-(

/((?<=^|[^a-z])[a-z]{4,})|(?=[a-z]{4,})*?(\d+)/is

  Ответить  
 
 автор: terra nova   (18.06.2013 в 12:25)   письмо автору
 
   для: Sfinks   (18.06.2013 в 11:31)
 

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

Пример:
Ss.113 Km 338, Calatafimi, Калатафими

  Ответить  
 
 автор: terra nova   (18.06.2013 в 12:18)   письмо автору
 
   для: Sfinks   (18.06.2013 в 11:31)
 

Я случайно дал не ту ссылку. Вот правильная. Здесь проверка регулярного выражения выдает странный результат:
http://www.regexpr.ru/?pattern=%2F%28%28%3F%3C%3D%5E%7C%5B%5Ea-z%5D%29%5Ba-z%5D%7B4%2C%7D%29%5B%5Ea-z%5D%2B%3F%7C%5B%5E%3Agraph%3A%5D%2B%3F%28%5Cd%2B%29%2Fis&subject=New+street%2C+1

Проблема в том, что спецсимволы попадаются очень редко, я сейчас их не найду. Проще написать с использованием [:graph:]

  Ответить  
 
 автор: Sfinks   (18.06.2013 в 11:31)   письмо автору
 
   для: terra nova   (18.06.2013 в 11:01)
 

>Забыл сказать, что в базе данных вместо пробелов почему-то попадаются символы псевдографики
Обработайте перед проверкой функцией strtr():
$addr = strtr($addr, "список символов, которые нужно заменить", "тут столько пробелов, сколько символов во втором аргументе");


http://www.regexpr.ru/?pattern=%2F%28%28%3F%3C%3D%5E%7C%5B%5Ea-z%5D%29%5Ba-z%5D%7B4%2C%7D%29%5B%5Ea-z%5D%2B%3F%28%5Cd%2B%29%2Fis&subject=Via+Garibaldi+126%2C+%CC%E5%F1%F1%E8%ED%E0%2C+%C8%F2%E0%EB%E8%FF
- это что за ссылка? По ней все вроде работает.

  Ответить  
 
 автор: terra nova   (18.06.2013 в 11:01)   письмо автору
 
   для: Sfinks   (17.06.2013 в 17:11)
 

Забыл сказать, что в базе данных вместо пробелов почему-то попадаются символы псевдографики
Попробовал специальным выражением и добавил |[^:graph:]+?
/((?<=^|[^a-z])[a-z]{4,})[^a-z]+?|[^:graph:]+?(\d+)/is
Но теперь какую-то ерунду выдает. Не подскажите в чем ошибка?

http://www.regexpr.ru/?pattern=%2F%28%28%3F%3C%3D%5E%7C%5B%5Ea-z%5D%29%5Ba-z%5D%7B4%2C%7D%29%5B%5Ea-z%5D%2B%3F%28%5Cd%2B%29%2Fis&subject=Via+Garibaldi+126%2C+%CC%E5%F1%F1%E8%ED%E0%2C+%C8%F2%E0%EB%E8%FF

  Ответить  
 
 автор: terra nova   (17.06.2013 в 17:27)   письмо автору
 
   для: Sfinks   (17.06.2013 в 17:11)
 

Спасибо большое! А до жадности квантификаторов я просто еще не дочитал.

  Ответить  
 
 автор: Sfinks   (17.06.2013 в 17:11)   письмо автору
 
   для: terra nova   (17.06.2013 в 17:06)
 

/((?<=^|[^a-z])[a-z]{4,})[^a-z]*?(\d+)/
перевожу:
[a-z]{4,} -4 и более буквы
(?<=) -перед которыми
^(начало строки) |(или) [^a-z](не буква)
затем
[^a-z]*? - правильнее, кстати [^a-z]+? -хотя бы одна не буква с "не жадным" поиском, т.е. ближайшее совпадение со следующим шаблоном идет уже в следующий шаблон, который гласит:
(\d+) -одна и более цифр.

  Ответить  
 
 автор: terra nova   (17.06.2013 в 17:06)   письмо автору
 
   для: Sfinks   (17.06.2013 в 16:55)
 

Сработало! Спасибо!
/((?<=^|[^a-z])[a-z]{4,})[^a-z]*?(\d+)/is

Понять бы еще логику. Вот "поиск влево" понимаю: ?<=
Вот это не понял: ^|
"Искать 4 или больше буквы" понял: [a-z]{4,}
Скобки круглые понял - это чтобы наполнить первую переменную, а потом вторую. Сначала улица, а потом номер дома.
А вот зачем вопросительный знак?

  Ответить  
 
 автор: Sfinks   (17.06.2013 в 16:55)   письмо автору
 
   для: terra nova   (17.06.2013 в 14:02)
 

'/((?<=^|[^a-z])[a-z]{4,})[^a-z]*?(\d+)/'
должно быть так кажись....

  Ответить  
 
 автор: terra nova   (17.06.2013 в 14:02)   письмо автору
 
   для: Sfinks   (17.06.2013 в 13:57)
 

Не могу понять в чем ошибка:
preg_match('/(a-z{4,})^(a-z{4,})(\d+)/s',$in,$pockets);

В первых скобках - улица
Потом всякий мусор, сокращения и т. д.
Потом номер

Ничего не находит :-(

  Ответить  

Сообщения:  [1-10]   [11-18] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования