За последние 24 часа нас посетил 16051 программист и 1539 роботов. Сейчас ищут 892 программиста ...

Парсинг строки при помощи регулярного выражения PCRE

Тема в разделе "PHP для новичков", создана пользователем k1ean, 19 июн 2012.

  1. k1ean

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

    С нами с:
    10 июн 2012
    Сообщения:
    10
    Симпатии:
    0
    Добрый вечер, есть строка

    Код (PHP):
    1. $number = '100||||736||||150----031' 
    Необходимо получить массив

    Код (PHP):
    1. (
    2.     [0] => Array
    3.         (
    4.             [0] => 100||||736||||150----031
    5.         )
    6.  
    7.     [1] => Array
    8.         (
    9.             [0] => 100||||
    10.             [1] => 736||||
    11.         )
    12.  
    13.     [2] => Array
    14.         (
    15.             [0] => ||||
    16.             [1] => ||||
    17.         )
    18.  
    19.     [3] => Array
    20.         (
    21.             [0] => ----031
    22.         )
    23. ) 
    Разделители '||||' и '----' могут быть любыми символами в любом количестве, за исключением цифр.
    Возможно ли этого добиться при помощи регулярного выражения?

    Пробовал такой код:

    Код (PHP):
    1. <?php
    2.     $number = '100||||736||||150----031';
    3.     $reg = '/ ( \d+ ([^\d]+) )+ \d+ ( [^\d$2]+ \d+ ) /x';
    4.     $grouped = array();
    5.     preg_match_all($reg, $number, $grouped);
    6.     echo "<pre>";
    7.     print_r($grouped);
    8.     echo "</pre>\n";
    9. ?>
    Возвращает только последний "карман":

    Код (PHP):
    1. (
    2.     [0] => Array
    3.         (
    4.             [0] => 100||||736||||150----031
    5.         )
    6.  
    7.     [1] => Array
    8.         (
    9.             [0] => 736||||
    10.         )
    11.  
    12.     [2] => Array
    13.         (
    14.             [0] => ||||
    15.         )
    16.  
    17.     [3] => Array
    18.         (
    19.             [0] => ----031
    20.         )
    21. ) 
     
  2. bad915

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

    С нами с:
    7 сен 2012
    Сообщения:
    1
    Симпатии:
    0
    Мой вариант.
    Код (Text):
    1. $number = '100||||736||||150----031kkkkkkkkkkkkkkkkk000hhhhhhhhhhhhhhhhh777kkkkkkkkkk099';
    2. $array = array();
    3. preg_match_all('/\d{3}/', $number, &$array);
    Результат :
    Array
    (
    [0] => Array
    (
    [0] => 100
    [1] => 736
    [2] => 150
    [3] => 031
    [4] => 000
    [5] => 777
    [6] => 099
    )
    )