Прошу подправить регулярку

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

Статус темы:
Закрыта.
Модераторы: xpert13
  1. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    196
    Есть регулярка, которая из дебильных запросов клиентов делает красиво для последующей вставки в запрос:
    PHP:
    $data='qw1bffcz,2,232,9,';
    //получаем строку для вставки в «SELECT * FROM `table` WHERE `key` IN ($data)»
    echo preg_replace("/[^0-9,]+/",'',$data); 
    Результат:
    Как вырезАть ещё запятые в начале и конце, в одной регулярке?
    Что-то не соображу (видимо пятница), помогите.
     
    Последнее редактирование: 27 мар 2015
  2. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    890
    Симпатии:
    558
    либо ~[^0-9,]+|,\Z|\A,~
    либо trim($str , ',')
     
    Denixxx нравится это.
  3. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    196
    Я уже реализовал именно этот вариант, но мне кажется некошерным обрабатывать 2-мя функциями вместо одной:
    PHP:
    return trim(preg_replace("/[^0-9,]+/",'',$data),",");
    Это не сработает, если запятых спереди/сзади несколько.
     
  4. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    890
    Симпатии:
    558
    ~[^0-9,]+|,+\Z|\A,+~
     
  5. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    215
    Симпатии:
    280
    Запятые в начале могут чередоваться с другим мусором.

    PHP:
    $data='q,w1bffcz,2,232,9,q';
    echo 
    preg_replace("~[^0-9,]+|,+\Z|\A,+~",'',$data);

    Тут нужно шаблоном \A[^0-9]+ захватить всё до первой цифры, т.е. весь мусор с запятыми.
    PHP:
    $data='q,w1bffcz,2,232,9,q';
    echo 
    preg_replace("~\A[^0-9]+|[^0-9,]+|[^0-9]+\Z~",'',$data);
     
    Q_BASIC и Denixxx нравится это.
  6. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    196
    Спасибо, то что надо. Мне было особенно интересно, как решается подобная задача, тем более одним выражением.
    lag, круто
     
    Последнее редактирование: 28 мар 2015
  7. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    215
    Симпатии:
    280
    А повторяющиеся запятые в середине не беспокоят?
    Вроде такого 1,2,,,,,232,9
    PHP:
    $data='q,w1bff,c,z,2,232,9,q';
    echo 
    preg_replace("~\A[^0-9]+|[^0-9,]+|[^0-9]+\Z~",'',$data);
    PHP:
    $data='q,w1bff,c,z,2,232,9,q';
    echo 
    preg_replace("~\A[^0-9]+|[^0-9,]+|,[^0-9]*(?=,)|[^0-9]+\Z~",'',$data);
     
    Последнее редактирование: 28 мар 2015
    pozhisni и Denixxx нравится это.
Статус темы:
Закрыта.