说我有以下网址:
/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"
答案 0 :(得分:4)
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+个字符,后跟-
。这将减少正则表达式引擎需要回溯的次数。