|
|
|
|
|
для: terra nova
(18.06.2013 в 12:25)
| | А еще некоторые пишут без пробела
Via Nazionale Ss113, Карония
Хотел написать запрос, чтобы возвращал название местности идущее после цифр, а получилось найти перед цифрами :-(
/((?<=^|[^a-z])[a-z]{4,})|(?=[a-z]{4,})*?(\d+)/is | |
|
|
|
|
|
|
|
для: Sfinks
(18.06.2013 в 11:31)
| | И еще проблема. Если перед номером трассы не стоит названия улицы, то поиск ничего не дает.
Сейчас подумаю как сделать поиск и вправо тоже
Пример:
Ss.113 Km 338, Calatafimi, Калатафими | |
|
|
|
|
|
|
|
для: 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:] | |
|
|
|
|
|
|
|
для: 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
- это что за ссылка? По ней все вроде работает. | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: 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+) -одна и более цифр. | |
|
|
|
|
|
|
|
для: Sfinks
(17.06.2013 в 16:55)
| | Сработало! Спасибо!
/((?<=^|[^a-z])[a-z]{4,})[^a-z]*?(\d+)/is
Понять бы еще логику. Вот "поиск влево" понимаю: ?<=
Вот это не понял: ^|
"Искать 4 или больше буквы" понял: [a-z]{4,}
Скобки круглые понял - это чтобы наполнить первую переменную, а потом вторую. Сначала улица, а потом номер дома.
А вот зачем вопросительный знак? | |
|
|
|
|
|
|
|
для: terra nova
(17.06.2013 в 14:02)
| |
'/((?<=^|[^a-z])[a-z]{4,})[^a-z]*?(\d+)/'
| должно быть так кажись.... | |
|
|
|
|
|
|
|
для: Sfinks
(17.06.2013 в 13:57)
| | Не могу понять в чем ошибка:
preg_match('/(a-z{4,})^(a-z{4,})(\d+)/s',$in,$pockets);
В первых скобках - улица
Потом всякий мусор, сокращения и т. д.
Потом номер
Ничего не находит :-( | |
|
|
|
|