所以这就是我使用preg_match将浏览器中的当前URI与我的router.php配置文件中定义的URL进行匹配的问题。我建立类似于Django的Router/Dispatcher。PHP的preg_match,如何捕获只命名的正则表达式?
我想要的是,preg_match()只捕获$ matches变量中的命名正则表达式。
所以如果我有regexs这样的:
^(?<param1>[a-z]+(?:\-[a-z]+)*)\.domain\.com\/[a-z]+(?:\/)?(?<param2>[a-z]+)?\/?$
Rubural链接:CLICK
当我比较当前URI与此regexs匹配,但$变量返回此匹配:
array (0 => 'sub.domain.com/page/pageurl/', 'param1' => 'sub', 1 => 'sub', 'param2' => 'pageurl', 2 => 'pageurl',)
是否可以告知preg_match()
仅返回指定的匹配项,并排除那些数字,我想得到的是关联数组:)
我可以使用foreach()
并通过$匹配循环,然后在里面检查它的数字或不...有没有更好的办法?
感谢
没有一个'array_filter_keys'功能,所以你可能是最好的只是做循环。 – lonesomeday 2012-02-19 21:52:09
array_filter_keys可以这样做:'array_intersect_key($ matches,array_flip(array('param1','param2')))' – 2012-06-29 14:51:36