regex - 模式匹配后结果数组的 URL 路径的剩余部分
问题描述
我很难让我的正则表达式做我想做的事情:(
我希望我的正则表达式做以下两件事:
- 在“品牌”或“个人资料”的模式匹配之后找到作为下一个 URL 路径部分的 ID
- 除了将 ID 之后的 URL 路径部分的其余部分拆分为匹配数组中的单独项目之外,ID 之后的 URL 路径部分的数量可以从无到多个不等,并且尾部斜杠并不总是存在
我设法通过以下方式使第一部分工作:
<?php
$url = 'https://demo.com/show/profile/123/slug/etc/';
$pattern = '/\/(brand|profile)?\/([\d]+)/';
preg_match($pattern, $url, $matches);
var_dump($matches);
适用于所有这些测试字符串:
https://demo.com/show/profile/123
https://demo.com/show/profile/123/
https://demo.com/show/profile/123/slug
https://demo.com/show/profile/123/slug/
https://demo.com/show/profile/123/slug/etc
https://demo.com/show/profile/123/slug/etc/
但我似乎无法解决第二部分,即使在寻找了几天的解决方案之后。到目前为止,我最“成功”的尝试是:
\/(brand|profile)?\/([\d]+)\/?(.*)?\/?
该模式将 URL 路径的其余部分全部捕获,包括尾部斜杠(顺便说一句 - 我不想要尾部斜杠)。
我有第一部分的代码:phpliveregex.com/p/pMO
有人可以帮助我如何使用第二部分的代码来扩展它吗?
非常感激!
解决方案
我建议将此问题拆分为两个子问题。
我是说。
我们可以先preg_match
用这个正则表达式吗
(brand|profile)\/(\d+)(.*)
在这里我们有
- 在第一个捕获组中,全场比赛。
- 在第二个捕获组中,您的标签(品牌或个人资料)
- 在第三个捕获组中,我们有 ID(数字)
- 并在第 4 个捕获组中的 URL 提醒
然后使用完整的 URL 提醒(第 4 个捕获组),我们可以preg_match_all
使用这个正则表达式
[^\/]+
在这里,您拥有所有提醒路径。
推荐阅读
- html - 你如何减少段落之间的空间
- reactjs - React fetch - 根据用户角色获取字段
- php - Laravel Voyager Breadcrumb 子域问题
- android - 无法在 Android Studio 4.0 中创建活动,没有创建文件,没有错误
- reactjs - 如何在使用 Enzyme 测试 React 组件时设置状态
- r - 在 dplyr 中创建具有动态位置数的滞后/领先变量
- spring-boot - 如何遍历 Web 应用程序中的文件
- apache-zeppelin - 启动 Zeppelin 失败
- c++ - 在 Linux 中存储语言环境名称的缓冲区大小应该是多少?
- javascript - CentOS 7 中 curl 请求得到的响应不同