我需要创建一个响应任何以'@'字符开头的字符串的路由。路线如下例:
www.mywebsite.com/@john
www.mywebsite.com/@jack
www.mywebsite.com/@something
所以我写道:
Route::get('{something}','SomeController@someMethod')->where('something','/@^/');
但是当我测试它时,我面对404找不到找到的页面。
这是什么正确的正则表达式?
答案 0 :(得分:2)
Route::get('/{tag}', 'SomeController@someMethod')->where('tag', '^@.*');
答案 1 :(得分:2)
这也有效:
Route::get('@{something}', 'SomeController@someMethod');
答案 2 :(得分:0)
你可以写这个
Route::pattern('tag', '@[a-zA-Z]');
Route::get('{tag}', 'SomeController@someMethod');
通过这种方式,你可以分离正则表达式和路由的逻辑,它可以按你的需要工作
答案 3 :(得分:0)
注意@^
模式意味着@
应该跟在字符串的开头,这是不可能的,并且模式永远不会匹配任何字符串。 '^@'
模式断言字符串开头的位置,只有它才会尝试匹配@
。
此外,通常的/
正则表达式分隔符应该从此模式中删除,因为它们被视为此处模式的一部分。
因此,在您的情况下,您可以只交换锚点和@
char:
Route::get('{something}','SomeController@someMethod')->where('something','^@');