За последние 24 часа нас посетили 20422 программиста и 1010 роботов. Сейчас ищут 348 программистов ...

Оставить только цифры, кроме

Тема в разделе "Регулярные выражения", создана пользователем AnonimS, 18 мар 2018.

  1. AnonimS

    AnonimS Новичок

    С нами с:
    8 дек 2016
    Сообщения:
    88
    Симпатии:
    9
    Доброго времени суток.

    Начну с того, что с регулярками я дружу только на подсознательном уровне, но по ряду задач сталкиваюсь и тут начинается..
    Столкнулся с такой проблемой. Есть таблица из 1000 строк, один из столбцов адрес. Так вот задача в том чтобы получить номер квартиры. Делаю следующим образом:
    1)Убираю все буквы и оставляю только так
    PHP:
    1. $D = preg_replace("/[^0-9]/", '', $arr['Adress']);
    2)Потом вырезаю номер дома, хоть я и понимаю что это костыл, ну знаний по регуляркам не хватает написать, если встретим отдельно стоящий 25, то удаляем.
    PHP:
    1. $D= preg_replace("/(25)/", '', $D);
    В итоге, без 2-го условия остаются куча строк с цифрами типа 2578, 2599, 3425. А если применяю 2 условие, то удаляется и то что нужно, от кв 255 остается 5.

    Буду очень благодарен тому кто ткнет как сделать;)
     
  2. karmay

    karmay Активный пользователь

    С нами с:
    9 ноя 2017
    Сообщения:
    180
    Симпатии:
    18
    Адрес:
    Н.Новгород
    Давайте начнем с самого начала, и прежде чем городить регулярки, начнем с таблицы. Я так понял, что в одной ячейке таблицы сразу весь адрес, т.е. и город и улица и номер дома и номер квартиры, т.е. получается что несколько сущнойстей находится в одном месте и надо их, так сказать распарсить, верно??
    Напишите несколько примеров строк для начала, чтоб было визуально видно это чудище.
    P.S.: чудище потому, что нельзя несколько сущностей хранить в одном месте, плохая логика приложения, поэтому проблемы.
     
  3. AnonimS

    AnonimS Новичок

    С нами с:
    8 дек 2016
    Сообщения:
    88
    Симпатии:
    9
    Я понимаю, что это чудище, но работаю с готовыми данными. Все верно, их нужно спарсить.
    Примеры:
    Порядковый номер // Номер квартиры // Кадастровый номер // Адрес
    2 // 24 // ххх // Москва, Зеленоградский административный округ, р-н К, д25, кв.24
    4 // 15 // ххх // Москва, Зеленоградский административный округ, р-н К, д25, кв.15
    16 // // ххх // Москва, Зеленоградский административный округ, р-н К, д25, кв.25
    18 // 24 // ххх // Москва, Зеленоградский административный округ, р-н К, д24, кв.25

    Адрес я получаю готовый, далее обрабатываю для получения квартиры.
     
  4. AnonimS

    AnonimS Новичок

    С нами с:
    8 дек 2016
    Сообщения:
    88
    Симпатии:
    9
    Все, спасибо, нашел решение, удаляю дом по маске, а потом оставляю только цифры.
     
  5. karmay

    karmay Активный пользователь

    С нами с:
    9 ноя 2017
    Сообщения:
    180
    Симпатии:
    18
    Адрес:
    Н.Новгород
    в регулярках есть карманы, которые будут сохранять в массив результаты поиска и ключевые выражения, т.е. в регулярку передаете выражение кв. а далее любое количество цифр, причем цифры окружаете скобками, они сохранятся в карман. В результате в переменной будет массив содержащий 2 под-массива :
    1 - выражение полностью (кв.15);
    2 - ключевая фраза, карман (15).
    PHP:
    1. $str1 = '4 // 15 // ххх // Москва, Зеленоградский административный округ, р-н К, д25, кв.15';
    2. preg_match_all('#кв.(\d+)#', $str, $match);
    3. echo $match[1][0];
    4. // посмотрите массив $match c помощью var_dump, чтобы увидеть как это работает.
     
    #5 karmay, 19 мар 2018
    Последнее редактирование: 19 мар 2018
    AnonimS нравится это.