<?php
function extractRouteParameterComponents($routeParameter) {
$regexPattern = "/^{(\w+)(?::(.+))?}(\?)?$/";
if (preg_match($regexPattern, $routeParameter, $matches)) {
// This group always exists
$name = $matches[1];
// If the group was not present, we use [^/] as a default
$pattern = empty($matches[2]) ? "[^/]" : $matches[2];
// The parameter is optional if the last capturing group
// (which is a plain question mark) was found
$optional = isset($matches[3]);
return [$name, $pattern, $optional];
}
}
$routeParameter = "{id:[0-9]+}?";
list($name, $pattern, $optional) = extractRouteParameterComponents($routeParameter);
var_dump($name, $pattern, $optional);