正则表达式匹配特定域名和URL的最后一部分

3
我正在重新设计一个网站,作为其中的一部分,我们已经更改了URL方案,因为我们想将所有旧的URL重定向到新的URL,我正在努力使其工作。
旧的URL类似于:
/shop/category/subcategory1/subcategory2/slug
/shop/category/subcategory3/slug
/shop/category/slug
新的URL看起来像这样:
domain.com/new/slug
我需要一个正则表达式来匹配以“/shop/category”开头的URL,并获取URL的最后一部分,因为它是产品的slug。
我可以使用以下代码获取URL的最后一部分:
([^\/]+$)
并使用以下代码匹配URL的开始部分:
^shop\/category\/
但我无法找到同时执行这两个操作的方法。
谢谢!
1个回答

1

您可以使用

^shop\/category(?:\/.*)?\/([^\/]+)$

查看正则表达式演示详情

  • ^ - 字符串的开头
  • shop\/category - 一个shop/category字符串
  • (?:\/.*)? - 可选出现的/字符,然后是任何零个或多个除了换行符之外的字符尽可能多的匹配
  • \/ - 一个/字符
  • ([^\/]+) - 第一组:一个或多个非/字符
  • $ - 字符串的结尾。

你好 @wiktor-stribiżew,非常感谢!工作得很好,一个问题是有没有办法使用相同的正则表达式来检测URL结尾是否带有或不带有斜杠(/)?我发现一些地方的URL以斜杠结尾,然后正则表达式就无法匹配。 - Pol
@Pol 这很简单,只需在末尾添加一个可选字符,^shop\/category(?:\/.*)?\/([^\/]+)\/?$ - Wiktor Stribiżew
1
非常感谢你,Wiktor。我已经更新了你的帖子,因为一开始我没有足够的声望点数。 - Pol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接