所以這就是我使用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