Как разбить сложную строку на массив?

264
07 января 2018, 07:37

Нужно распилить строку на массив. Строка:

routes[0][1].action.controller[0].class

Массив:

array(
    [0]=> string(6) "routes",
    [1]=> string(3) "[0]",
    [2]=> string(3) "[1]",
    [3]=> string(6) "action",
    [4]=> string(10) "controller",
    [5]=> string(3) "[0]",
    [6]=> string(5) "class"
)

А еще лучше на:

array(
    [0]=> string(6) "routes",
    [1]=> int(0),
    [2]=> int(1),
    [3]=> string(6) "action",
    [4]=> string(10) "controller",
    [5]=> int(0),
    [6]=> string(5) "class"
)

Вот мой код

preg_match_all(
    '/([a-z0-9_]+)(\[\d+\])*(\.|$)/', 
    'routes[0][0].action.controller[0].class', 
    $matches
);

Но я получаю

array (
  0 => 
  array (
    0 => 'routes[0][1]',
    1 => 'action',
    2 => 'controller[0]',
    3 => 'class',
  ),
  1 => 
  array (
    0 => 'routes',
    1 => 'action',
    2 => 'controller',
    3 => 'class',
  ),
  2 => 
  array (
    0 => '[1]',
    1 => '',
    2 => '[0]',
    3 => '',
  ),
)
Answer 1

Ищем слово или цифры в квадратных скобках

\w+|\[\d+\]

демо на regex101

демо на eval.in

А чтобы получить цифры без скобок

\w+|(?<=\[)\d+(?=\])\]

демо на eval.in

Answer 2
$string = 'routes[0][0].action.controller[0].class';
preg_match_all('/[a-z0-9]+|\[\d\]/', $string, $matches);

пример

READ ALSO
Сносил PHP с Ubuntu. Так вышло, что удалилась папка var/lib/php

Сносил PHP с Ubuntu. Так вышло, что удалилась папка var/lib/php

Сейчас ставлю phpmyadmin, на странице логгина выскакивает предупреждение, что папки var/lib/php/sessions нет, зашёл, чекнулПосле переустановки появилась...

272
проблема с подключением с DB , PHP PDO

проблема с подключением с DB , PHP PDO

Привет всем, у меня проблема с пдо , хочу подключится к базе, --> Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [1045] Access denied for user 'wm65389_rafael'@'localhost' (using...

256
Вопрос по регулярным выражениям

Вопрос по регулярным выражениям

Как мне из "https://laravelcom/docs/5

248
Отправка запросов

Отправка запросов

Хочу сделать страничку для логинаИспользую symphony 3

277