我正在研究一个简单的前端控制器,主要用于学习目的。
我喜欢Symfony做路由的方式,在地图中有这样的模式:/news/{category}/{id}
并将类别和id变量传递给控制器。但我的问题是 - 因为我无法使用RegEx - 我不知道,如何将模式与URI匹配。
我该如何匹配
/news/{category}/{id}
到
/news/tech/5784
我应该允许这样的模式:/news/*
- 其中*
匹配所有内容吗?
或者变量与某些垃圾混合的地方,例如/news/{category}_ex/14{id}
?
获取变量和值并不是问题,但是为匹配编写正则表达式是。
提前感谢您的帮助
答案 0 :(得分:5)
最简单的方法是使用名为sub-patterns的(正则表达式)。
$regex = '#^/news/(?P<category>[a-z0-9]+)/(?P<id>[0-9]+)$#';
$path = '/news/tech/5784';
if (preg_match($regex, $path, $matches))
{
$matches['category'] === 'tech';
$matches['id'] === '5784';
}
答案 1 :(得分:1)
您最有可能寻找PHP Subpatterns
$str = '/news/tech/5784';
if (preg_match('~^/news/(?<category>[^/]+)/(?<id>[^/]+)~', $str, $match))
echo $match['category'] . " - " . $match['id'] . "\n";
tech - 5784