最后一个连字符之后的拉拉维尔路线


Laravel route after the last hyphen

假设我有以下网址:

/blog/this-is-a-post-20

我想这样分开它:

$urlTitle = "this-is-a-post";
$id = 20;


我目前正在尝试以下方法:

Route::get('blog/{urlTitle}-{id}', function($urlTitle, $id)

但它不起作用,它给了我:

$urlTitle = "this";
$id = "-is-a-post-20"
Route::get('blog/{urlTitle}-{id}', function($urlTitle, $id) {
    var_dump($urlTitle); // this-is-a-post
    var_dump($id);       // 20
})->where('urlTitle', '.*');

这将使urlTitle匹配 0+ 字符的正则表达式。 表达式尝试尽可能匹配。 这意味着它将首先尝试匹配this-is-a-post-20并失败,因为路由无法继续匹配-{id}。 它会"回溯",直到它也能找到-{id}

为了提高效率,请将.*正则表达式替换为 .*(?=-),该正则表达式将匹配 0+ 字符,后跟一个-。 这将减少正则表达式引擎需要回溯的次数。