Php 自定义路由器问题,匹配“/汽车/{make};及/cars/under-{under}quot;

Php 自定义路由器问题,匹配“/汽车/{make};及/cars/under-{under}quot;,php,Php,这是我当前的路由匹配脚本,它工作得很好,但是现在我得到了一个在-{under}下的路由,脚本正在崩溃 if (preg_match('/{([^}]*)}/', $route[$i], $match)) { $urlWithoutParameter = preg_replace('/{([^}]*)}/', '', $route[$i]); $value = str_replace($urlWithoutParameter, '', $url[$i]); $params[

这是我当前的路由匹配脚本,它工作得很好,但是现在我得到了一个
在-{under}
下的路由,脚本正在崩溃

if (preg_match('/{([^}]*)}/', $route[$i], $match)) {
    $urlWithoutParameter = preg_replace('/{([^}]*)}/', '', $route[$i]);
    $value = str_replace($urlWithoutParameter, '', $url[$i]);
    $params[$match[1]] = $value;
    continue;
}
以下是我的路线:

Route::get('/cars/under-{under}', [' controller' => 'Controller::index']);
Route::get('/cars/{make}', [ 'controller' => 'Controller::index']);
因此,如果我转到
localhost/used/cars/audi
,由于正则表达式匹配,第一条路线是匹配的,但是它不应该匹配,因为该路线包含-下的

我怎样才能解决这个问题

编辑 我试图研究Laravel是如何做到这一点的,但它似乎会为每条路线生成一个正则表达式,我不明白这是如何做到的,这是一个示例:

#^/website/(?p[^/]+)/legacy \-locations$#sD

这是路线:

website/{website?}/legacy locations