我正在构建一个路由系统,因此需要接收路由变量。问题是它完美地工作,直到我有类似"/post/edit/some-stuff-to-check"
( "-"
char)
看这个
$pattern = 'post/edit/(\w+)';
$pattern = '/' . str_replace('/', '\/', $pattern) . '/i';
// Note, the "test" is a variable here
$uri = 'post/edit/test';
if (preg_match($pattern, $uri, $params)) {
// It works, outputs exactly what I need
// Array ( [0] => post/edit/test [1] => test ) Array ( )
print_r($params);
}
但是当一个 uri 包含一个变量 like/post/edit/foo-bar-test
时,它就不再起作用了。所以我尝试通过正则表达式类显式匹配,而不是这样:
$pattern = 'post/edit/(\w+)';
我用这个:
$pattern = 'post/edit/[a-zA-Z0-9_-]';
但没有运气。
所以问题是,如何正确匹配包含[A-Za-z0-9_-]
在URI
字符串中的变量?