Laravel路由匹配模式中的限制性前缀Slug

9wbgstp7  于 2023-05-30  发布在  其他
关注(0)|答案(1)|浏览(135)

我的问题是,使用这个路由定义:

Route::match(array('GET', 'POST'), '/create/{caller?}', 'create')
   ->name('elot.create')
   ->where('caller', '([sh|br]+-[0-9]+)');
  • http://localhost/create/shxyz-1234 -- works*
  • http://localhost/create/brxyz-1234 -- works*

但我不希望事情变成这样。我只想要这样的比赛
http://localhost/create/sh-26627-- not shxyz-1234
http://localhost/create/br-1525-- not brxyz-1234

mwyxok5s

mwyxok5s1#

您可以使用单词边界\b来防止部分单词匹配,并使用分组而不是方括号(表示字符类)。
该分组不必重复,因为交替|匹配备选方案之一。由于您只进行匹配,因此可以使用非捕获组,表示为(?:

\b(?:sh|br)-[0-9]+\b

请参见regex demo

相关问题