所以这就是问题所在,我使用 preg_match 来将浏览器中的当前 URI 与 router.php 配置文件中定义的 URI 进行匹配。我正在构建类似于 Django 的 Router/Dispatcher。
我想要的是 preg_match() 仅捕获 $matches 变量中的命名正则表达式。
所以如果我有这样的正则表达式:
^(?<param1>[a-z]+(?:\-[a-z]+)*)\.domain\.com\/[a-z]+(?:\/)?(?<param2>[a-z]+)?\/?$
农村链接:CLICK
当我将当前 URI 与此正则表达式进行比较时,它匹配,但 $matches 变量返回此:
array ( 0 => 'sub.domain.com/page/pageurl/', 'param1' => 'sub', 1 => 'sub', 'param2' => 'pageurl', 2 => 'pageurl', )
是否可以告诉 preg_match()
仅返回命名匹配,并排除那些数字匹配,我想要得到的是关联数组:)
我可以使用foreach()
并循环$match,然后在内部检查它是否是数字......有没有更好的方法?
谢谢
最佳答案
首先,我在 PHP 手册中找不到有关命名子模式的任何内容,但我将进行有根据的猜测,并说您无法阻止结果数组中的数字键。
此猜测的依据是键 0
始终包含完整匹配项,并且无法命名该匹配项。
如果您想删除数字索引,最好的方法可能是 foreach
循环。
关于PHP preg_match,如何仅捕获命名正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9353579/