模式匹配后结果数组的URL路径的剩余部分



我很难让我的regex做我想做的事情:(

我希望我的regex做以下两件事:

  1. 找到ID,该ID是"brand"或"profile"模式匹配后的下一个URL路径部分
  2. 与在匹配数组中将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路径的其余部分,包括存在的尾部斜杠(顺便说一句,我不想要尾部斜杠(。

我有第一部分的代码,可在以下网站上获得:phplivergex.com/p/pMO

有人能帮我用第二部分的代码来扩展它吗?

非常感谢!

我建议把这个问题分成两个子问题。

我是说。

我们能用这个正则表达式做第一个preg_match

(brand|profile)/(d+)(.*)

这里有

  • 在第一个捕获组中进行了完整的比赛
  • 在第二个捕获组中,您的标签(品牌或个人资料(
  • 在第三个捕获组中,我们有ID(数字(
  • 在第4个捕获组中,URL提醒

然后有了完整的URL提醒(第四个捕获组(,我们可以用这个regex 进行preg_match_all

[^/]+

这里有所有的提醒路径。

最新更新