Получить данные отделенные последним двоеточием

Тема в разделе "PHP", создана пользователем Stripe, 25 ноя 2009.

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

    Stripe

    Регистр.:
    21 окт 2007
    Сообщения:
    164
    Симпатии:
    9
    Есть строка:
    В строке есть как минимум одно двоеточие после которого идут цифры. Как цифры занести в один элемент массива, а все что до них в другой, при этом последнее двоеточие (перед цифрами) выкинуть в результате? Количество двоеточий не ограничено, цифры могут быть и до последнего двоеточия.

    Я с этой задачей уже голову сломал.
     
  2. Сергiй

    Сергiй

    Регистр.:
    19 ноя 2006
    Сообщения:
    352
    Симпатии:
    338
    попробуй так
    PHP:
    <?php
    $a 
    "и тут Василий сказал: 33333да пусть оно все идет куда надо: и даже даальше!:19877";
    // цифры
    preg_match_all("/(?<=\:)\d*/"$a$b);
    foreach(
    $b[0] as $c) {
                   echo 
    $c;
               }
    // текст
    preg_match_all("/[\S]*(\s+)(?<![0-9])/"$a$bb);
    foreach(
    $bb[0] as $cc) {
                   echo 
    $cc;
               }

    ?>
    это при условии, что в конце будет твоеточие и цифры, без пробела, почитай о preg_match, можно отфильтровать любые варианты
    Я не профи, так что может быть и лучшее решение:nezn:
     
  3. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    624
    Симпатии:
    1.379
  4. Stripe

    Stripe

    Регистр.:
    21 окт 2007
    Сообщения:
    164
    Симпатии:
    9
    Да, обсуждался, но решения о получении данных из последнего абзаца (в моем случае, после последнего двоеточия) там нет.
     
  5. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    PHP:
    $arr = array();
    $text 'и тут Василий сказал: да пусть оно все идет куда надо: и даже даальше!:19877       ';
    $pos strrpos(':',$text);
    $arr[0] = substr($text,0,$pos-1);
    $arr[1] = substr($text,$pos+1,strlen($text));
    Массив $arr будет содержать искомые данные
     
    a1ien.n3t и Stripe нравится это.
  6. Stripe

    Stripe

    Регистр.:
    21 окт 2007
    Сообщения:
    164
    Симпатии:
    9
    Я уже сделал на предыдущих подсказках :)
     
  7. a1ien.n3t

    a1ien.n3t Постоялец

    Регистр.:
    12 июл 2008
    Сообщения:
    52
    Симпатии:
    7
    saen,
    молоток. Вот тут реально нафиг ненужна регулярка. вобще никак она тут не нужна.
    Я хотел предложить с експлодом. но saen предложил в 100 раз лучше )
    Stripe,
    советую юзать код от saen )
     
  8. Alix

    Alix

    Регистр.:
    27 янв 2008
    Сообщения:
    234
    Симпатии:
    84
    ТС, а чем не подходит простое решение типа
    PHP:
    preg_match('/(.*):(\d+)/'$text$matches);
    В $matches[1] - часть до последнего двоеточия перед цифрами, в $matches[2] - цифири.
    Только не совсем понял момент про "цифры могут быть и до последнего двоеточия".
    Имеется ввиду строка вида "текст:текст:1234:текст"? Для неё вышеприведенная регулярка тож сработает. Если не так понял - приведи пример.
     
  9. Stripe

    Stripe

    Регистр.:
    21 окт 2007
    Сообщения:
    164
    Симпатии:
    9
    Пример в первом посте.

    Собственно пока переписать некогда будет, но как руки дойдут переделаю. Кстати, все затевалось ради вот этого: http://www.nulled.ws/showthread.php?p=1309150#post1309150
     
  10. Alix

    Alix

    Регистр.:
    27 янв 2008
    Сообщения:
    234
    Симпатии:
    84
    Я написал, что для примера из первого поста регэксп работает.
    Впрочем, раз решение найдено и все стороны довольны, продолжать обсуждения смысла не имеет.
     
    Stripe нравится это.
Статус темы:
Закрыта.