Нужно распилить строку на массив. Строка:
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 => '',
),
)
Ищем слово или цифры в квадратных скобках
\w+|\[\d+\]
демо на regex101
демо на eval.in
А чтобы получить цифры без скобок
\w+|(?<=\[)\d+(?=\])\]
демо на eval.in
$string = 'routes[0][0].action.controller[0].class';
preg_match_all('/[a-z0-9]+|\[\d\]/', $string, $matches);
пример
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости