正则表达式删除 URL 中第四个斜杠之后的所有内容

发布于 2024-12-26 03:58:26 字数 276 浏览 2 评论 0原文

我正在 PHP 中使用以下形式的友好 URL 路径:

/2011/09/here-is-the-title
/2011/09/here-is-the-title/2

我需要标准化这些 URL 路径以删除 4 个斜杠之后的任何内容,包括斜杠本身。第四个斜杠后面的值有时是数字,但也可以是任何参数。

关于我如何做到这一点有什么想法吗?我想正则表达式可以处理它,但我对此很糟糕。我还认为 strpos 和 substr 的组合可能能够处理它,但无法完全弄清楚。

I'm working in PHP with friendly URL paths in the form of:

/2011/09/here-is-the-title
/2011/09/here-is-the-title/2

I need to standardize these URL paths to remove anything after the 4 slash including the slash itself. The value after the 4th slash is sometimes a number, but can also be any parameter.

Any thoughts on how I could do this? I imagine regex could handle it, but I'm terrible with it. I also thought a combination of strpos and substr might be able to handle it, but cannot quite figure it out.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

乙白 2025-01-02 03:58:26

您可以使用 explode() 函数:

$parts  = explode('/', '/2011/09/here-is-the-title/2');
$output = implode('/', array_slice($parts, 0, 4));

You can use explode() function:

$parts  = explode('/', '/2011/09/here-is-the-title/2');
$output = implode('/', array_slice($parts, 0, 4));
‘画卷フ 2025-01-02 03:58:26

替换

%^((/[^/]*){3}).*%g

为 1 美元。

有关实例,请参阅 http://regexr.com?2vlr8

Replace

%^((/[^/]*){3}).*%g

with $1.

see http://regexr.com?2vlr8 for a live example

§普罗旺斯的薰衣草 2025-01-02 03:58:26

如果您的正则表达式实现支持任意长度的后向断言,您可以

(?<=^[^/]*(/[^/]*){3})/.*$

用空字符串替换。
如果没有,您可以替换

 ^([^/]*(?:/[^/]*){3})/.*$

为第一个捕获组的内容。第二个示例的 PHP 示例可以在 ideone.com 中找到。

If your regex implementation support arbitrary length look-behind assertions you could replace

(?<=^[^/]*(/[^/]*){3})/.*$

with an empty string.
If it does not, you can replace

 ^([^/]*(?:/[^/]*){3})/.*$

with the contents of the first capturing group. A PHP example for the second one can be found at ideone.com.

提笔落墨 2025-01-02 03:58:26

你也可以使用循环:

result="";
for char c in URL:
    if(c is a slash) count++;
    if(count<4) result=result+c;
    else break;

you could also use a loop:

result="";
for char c in URL:
    if(c is a slash) count++;
    if(count<4) result=result+c;
    else break;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文