<?php
$requests = [
"/",
"/alias",
"services",
"services/alias",
"uk",
"uk/alias",
"uk/services",
"/uk/services",
""
];
$patterns = [
"/{context}/{alias?}",
"/{alias?}",
];
function matchRequestToPattern($request, $patterns) {
foreach ($patterns as $pattern) {
$regex = patternToRegex($pattern);
if (preg_match($regex, $request, $matches)) {
return $pattern; // Возвращаем паттерн, если есть совпадение
}
}
return null; // Возвращаем null, если ни один паттерн не подошел
}
function patternToRegex($pattern) {
$regex = '#^';
$parts = explode('/', trim($pattern, '/'));
if (count($parts) > 0 && $parts[0] != '') {
$regex .= '/';
}
foreach ($parts as $part) {
if (strpos($part, '{') === 0 && strpos($part, '}') === strlen($part) - 1) {
$regex .= '([^/]+)';
} elseif (strpos($part, '{') === 0 && strpos($part, '?}') === strlen($part) - 2) {
$regex .= '?([^/]*?)?';
} else {
$regex .= preg_quote($part, '#');
}
if ($part !== end($parts)) {
$regex .= '/';
}
}
$regex .= '/?$#';
return $regex;
}
foreach ($requests as $request) {
$matchedPattern = matchRequestToPattern($request, $patterns);
if ($matchedPattern) {
echo "Запрос: " . $request . " соответствует паттерну: " . $matchedPattern . "\n";
} else {
echo "Запрос: " . $request . " не соответствует ни одному паттерну\n";
}
}