PHP将URI匹配到模式

sza*_*kel 3 php uri front-controller match

我正在研究一个简单的前端控制器,主要用于学习目的.

我喜欢Symfony的路由方式,在你的地图中有这样的模式:/news/{category}/{id}并将类别和id变量传递给控制器​​.但我的问题是 - 因为我无法使用RegEx - 我不知道,如何将模式匹配到URI.

我该怎么配?

/news/{category}/{id}
Run Code Online (Sandbox Code Playgroud)

/news/tech/5784
Run Code Online (Sandbox Code Playgroud)

我应该允许这样的模式:/news/*- 哪里*匹配一切?或者变量与某些垃圾混合在一起,像这样/news/{category}_ex/14{id}

获取变量和值并不是问题,但是为匹配编写正则表达式是.

提前谢谢你的帮助

poz*_*ozs 5

最简单的是使用(正则表达式)命名的子模式.

$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';
}
Run Code Online (Sandbox Code Playgroud)