Как разделить строку на 2D-массив с помощью Regex?

У меня проблема, которая кажется простой на первый взгляд, но побеждает мои скудные навыки работы с регулярными выражениями. У меня есть строка, которую мне нужно преобразовать в массив, а затем обработать значения соответствующим образом, что достаточно просто, но формат строки не может быть изменен (он генерируется в другом месте), и его логика сбивает меня с толку.

Строка:

[6] [2] [3] 12.00; [5] [4]

В основном это набор идентификаторов и десятичных значений (в данном случае id 3 == 12.00). Количество идентификаторов может измениться в любой момент, и десятичные значения могут быть в любом или всех идентификаторах.

В идеальном мире у меня был бы следующий массив:

Array (
   [0] => Array (
             [id]  => 6
             [num] => 
          )
   [1] => Array (
             [id]  => 2
             [num] => 
          ) 
   [2] => Array (
             [id]  => 3
             [num] => 12.00 
          )
   Etc...

Знает ли кто-нибудь из вас, мастера регулярных выражений, как это можно сделать с меньшими ругательствами, чем я мог добиться?

Я пока что смог для извлечения идентификаторов с помощью:

preg_match_all('@\[(.*?)\]@s', $string, $array);

и десятичных знаков с помощью:

preg_match_all('/([0-9]+[,\.]{1}[0-9]{2})/', $string, $array);

, но теряет корреляцию между идентификаторами и значениями.

6
задан shanethehat 15 November 2011 в 17:20
поделиться