Доброго времени суток. Начну с того, что с регулярками я дружу только на подсознательном уровне, но по ряду задач сталкиваюсь и тут начинается.. Столкнулся с такой проблемой. Есть таблица из 1000 строк, один из столбцов адрес. Так вот задача в том чтобы получить номер квартиры. Делаю следующим образом: 1)Убираю все буквы и оставляю только так PHP: $D = preg_replace("/[^0-9]/", '', $arr['Adress']); 2)Потом вырезаю номер дома, хоть я и понимаю что это костыл, ну знаний по регуляркам не хватает написать, если встретим отдельно стоящий 25, то удаляем. PHP: $D= preg_replace("/(25)/", '', $D); В итоге, без 2-го условия остаются куча строк с цифрами типа 2578, 2599, 3425. А если применяю 2 условие, то удаляется и то что нужно, от кв 255 остается 5. Буду очень благодарен тому кто ткнет как сделать
Давайте начнем с самого начала, и прежде чем городить регулярки, начнем с таблицы. Я так понял, что в одной ячейке таблицы сразу весь адрес, т.е. и город и улица и номер дома и номер квартиры, т.е. получается что несколько сущнойстей находится в одном месте и надо их, так сказать распарсить, верно?? Напишите несколько примеров строк для начала, чтоб было визуально видно это чудище. P.S.: чудище потому, что нельзя несколько сущностей хранить в одном месте, плохая логика приложения, поэтому проблемы.
Я понимаю, что это чудище, но работаю с готовыми данными. Все верно, их нужно спарсить. Примеры: Порядковый номер // Номер квартиры // Кадастровый номер // Адрес 2 // 24 // ххх // Москва, Зеленоградский административный округ, р-н К, д25, кв.24 4 // 15 // ххх // Москва, Зеленоградский административный округ, р-н К, д25, кв.15 16 // // ххх // Москва, Зеленоградский административный округ, р-н К, д25, кв.25 18 // 24 // ххх // Москва, Зеленоградский административный округ, р-н К, д24, кв.25 Адрес я получаю готовый, далее обрабатываю для получения квартиры.
в регулярках есть карманы, которые будут сохранять в массив результаты поиска и ключевые выражения, т.е. в регулярку передаете выражение кв. а далее любое количество цифр, причем цифры окружаете скобками, они сохранятся в карман. В результате в переменной будет массив содержащий 2 под-массива : 1 - выражение полностью (кв.15); 2 - ключевая фраза, карман (15). PHP: $str1 = '4 // 15 // ххх // Москва, Зеленоградский административный округ, р-н К, д25, кв.15'; preg_match_all('#кв.(\d+)#', $str, $match); echo $match[1][0]; // посмотрите массив $match c помощью var_dump, чтобы увидеть как это работает.