import re
regex = re.compile(r"('factories' => )(\[((?>[^\[\]]++|(?2))*)\])", flags=re.MULTILINE)
test_str = ("<?php\n\n"
"namespace Application;\n\n"
"use Laminas\\Router\\Http\\Literal;\n"
"use Laminas\\Router\\Http\\Segment;\n"
"use Laminas\\ServiceManager\\Factory\\InvokableFactory;\n\n"
"return [\n"
" \n"
" 'view_manager' => [\n"
" 'template_path_stack' => [\n"
" \n"
" __DIR__ . '/../view',\n"
" __DIR__ . '/../view/Application/_shared'\n\n"
" ],\n"
" ],\n"
" 'controllers' => [\n"
" 'factories' => [\n"
" dsdsa\n"
" ]\n"
" ],\n"
" \n"
" 'service_manager' => [\n"
" 'factories' => [\n"
" \n"
" 'UsersTableGateway' => function ($sm) {\n"
" $dbAdapter = $sm->get('Laminas\\Db\\Adapter\\Adapter');\n"
" $resultSetPrototype = new \\Laminas\\Db\\ResultSet\\ResultSet();\n"
" //get base url from config\n"
" $config = $sm->get('Config');\n"
" $baseUrl = $config['view_manager']['base_url'];\n"
" \n"
" //pass base url via cnstructor to the User class\n"
" $resultSetPrototype->setArrayObjectPrototype(new Model\\Rowset\\User($baseUrl));\n"
" return new Utils\\TableGateway('users', $dbAdapter, null, $resultSetPrototype);\n"
" },\n"
" 'Application\\Model\\UsersTable' => function($sm) {\n"
" $tableGateway = $sm->get('UsersTableGateway');\n"
" $table = new Model\\UsersTable($tableGateway);\n"
" \n"
" return $table;\n"
" },\n"
" Utils\\Authentication::class => function($sm) {\n"
" $auth = new Utils\\Authentication(\n"
" $sm->get(\\Laminas\\Db\\Adapter\\Adapter::class),\n"
" $sm->get(Utils\\Adapter::class) \n"
" );\n"
" return $auth;\n"
" },\n"
" Utils\\Helper::class => InvokableFactory::class,\n"
" \n"
" SessionManager::class => function ($container) {\n"
" $config = $container->get('config');\n"
" $session = $config['session'];\n"
" $sessionConfig = new $session['config']['class']();\n"
" $sessionConfig->setOptions($session['config']['options']);\n"
" $sessionManager = new Session\\SessionManager(\n"
" $sessionConfig,\n"
" new $session['storage'](),\n"
" null\n"
" );\n"
" \\Laminas\\Session\\Container::setDefaultManager($sessionManager);\n"
" \n"
" return $sessionManager;\n"
" },\n\n"
" ],\n"
" ],\n"
"];")
matches = regex.finditer(test_str)
for match_num, match in enumerate(matches, start=1):
print(f"Match {match_num} was found at {match.start()}-{match.end()}: {match.group()}")
for group_num, group in enumerate(match.groups(), start=1):
print(f"Group {group_num} found at {match.start(group_num)}-{match.end(group_num)}: {group}")
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Python, please visit: https://docs.python.org/3/library/re.html