我很难让我的正则表达式执行我想做的事情:(
我希望我的正则表达式执行以下两项操作:
我设法通过以下方式使第一部分起作用:
<?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路径的其余部分,包括出现时的尾部斜杠(顺便说一句-我不要尾部斜杠)。
上提供了第一部分的代码有人可以帮我扩展第二部分的代码吗?
非常感谢!
答案 0 :(得分:0)
我建议将此问题分为两个子问题。
我是说。
我们可以使用此正则表达式做第一个preg_match
(brand|profile)\/(\d+)(.*)
这里有
然后使用完整的URL提醒(第4个捕获组),我们可以使用此正则表达式执行preg_match_all
[^\/]+
这里有所有提醒路径。