private static function checkRule($rule, $route, $url, $pattern, $option, $depr)
{
// 检查完整规则定义
if (isset($pattern['__url__']) && !preg_match('/^' . $pattern['__url__'] . '/', str_replace('|', $depr, $url))) {
return false;
}
// 检查路由的参数分隔符
if (isset($option['param_depr'])) {
$url = str_replace(['|', $option['param_depr']], [$depr, '|'], $url);
}
$len1 = substr_count($url, '|');
$len2 = substr_count($rule, '/');
// 多余参数是否合并
$merge = !empty($option['merge_extra_vars']) ? true : false;
if ($merge && $len1 > $len2) {
$url = str_replace('|', $depr, $url);
$url = implode('|', explode($depr, $url, $len2 + 1));
}
if ($len1 >= $len2 || strpos($rule, '[')) {
if (!empty($option['complete_match'])) {
// 完整匹配
if (!$merge && $len1 != $len2 && (false === strpos($rule, '[') || $len1 > $len2 || $len1 < $len2 - substr_count($rule, '['))) {
return false;
}
}
$pattern = array_merge(self::$rules['pattern'], $pattern);
if (false !== ($match = self::match($url, $rule, $pattern, $merge))) {
// 匹配到路由规则
return self::parseRule($rule, $route, $url, $option, $match, $merge);
}
}
return false;
}