PHP preg_match,如何仅捕获命名正则表达式?

标签 php

所以这就是问题所在,我使用 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/

相关文章:

php - Laravel 删除查询生成器

php - 使用 jquery ajax 和 PHP 浏览器 'back button' 的工作

php - 如何在 php 中访问 youtube 数据 api json 响应 $t 变量?

PHP多文件上传

php - 将 Google API 响应保存在 php 变量中

php - 使用 MySQL 和/或 PHP 的数学运算

php - 检查 token 是否在 Laravel 中过期

php - IN array in where 子句 mysql php pdo

php - 如何在其他 Controller 中假脱机发送电子邮件(在任务中)并发送普通电子邮件?

PHP 如何根据字符串内容将字符串列表(数组)转换为嵌套数组