(卡住!)帮助理解PHP

时间:2016-06-25 13:12:29

标签: php regex preg-replace preg-match

我正在尝试使用前端控制器和路由系统制作MVC框架。

路由系统通过定义这样的路径来工作......

$route->add('{controller}/{action}'); // default path
$route->add('admin/{controller}/{action}'); // admin path

为此,我首先从预定义路线构建正则表达式。

然后我使用URL查询字符串(例如home / index)并使用preg_match();

查看它是否与正则表达式匹配

以下是示例代码...

$route = 'admin/{controller}/{action}';
$url = 'admin/controller/action';

echo $route . '<br>';
$route = preg_replace('/\//', '\\/', $route); // repaces '/' with '\/'
echo $route . '<br>';
$route = preg_replace('/{([a-z]+)}/', '(?P<\1>[a-z-]+)', $route); // for each path segment in curly {} gets replaced with a regular expression and named according to what is in the braces
echo $route . '<br>';
$route = '/^' . $route . '$/i'; // encapsulating the reg_exp
echo $route . '<br>';

preg_match($route, $url, $matches);

echo '<pre>', print_r($matches);

这将输出以下代码...您可以看到如何根据我定义的路径构建正则表达式... {controller} / {action}

enter image description here

现在,我根本不理解的部分是:

?P<\1>

这是如何工作的,以便输出数组键以{controller}和{action}命名?我无法找到有关此语法的任何信息,并且完全混淆了!

0 个答案:

没有答案