You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

URL路径提取问题:如何用正则表达式单独解析多段路径

提取URL中的各段路径(支持0或n段)

我明白你想要从URL里精准提取每一段路径,不管是1段、3段还是0段,还要跳过前面的域名部分。先说说你之前尝试的问题:你写的http://(.*?)/(.*?)(?:/(.*?)/(.*?))?$之所以在两段路径时失效,是因为这个正则硬编码了路径段的可能数量,不够灵活,没法适配任意段数的情况。

给你两个实用的解决方案,根据你的正则引擎支持情况选:

方案一:全局匹配直接提取所有路径段

如果你的正则引擎支持正向预查和全局匹配(比如JavaScript、Python的re.findall、Java的Pattern.Matcher),可以用这个正则:

(?<=https?://[^/]+/)([^/]+)(?=/?|$)

正则拆解:

  • (?<=https?://[^/]+/):正向断言,确保我们要匹配的内容紧跟在http:///https://+域名(到第一个斜杠为止)之后,直接跳过域名部分。
  • ([^/]+):核心捕获组,匹配一个或多个非斜杠字符,也就是单个路径段。
  • (?=/?|$):正向断言,确保当前路径段后面要么是可选的斜杠,要么是字符串结尾,就算URL末尾带斜杠也能正确匹配。

测试你的示例URL:

  • 对于 http://www.example.com/first-path/second-path/third-path,全局匹配会得到:first-path、second-path、third-path
  • 对于 http://www.example.com/first-path,得到:first-path
  • 对于 http://www.example.com/first-path/second-path,得到:first-path、second-path
  • 对于 http://www.example.com/ 或 http://www.example.com,没有匹配结果(对应路径数量为0的情况)

方案二:先剥离域名,再拆分路径

如果你的正则引擎不支持正向预查,可以分两步走:

  1. 先用正则提取域名后的所有路径内容:
    ^https?://[^/]+/(.*)$
    
    捕获组$1会得到整个路径字符串(比如first-path/second-path/third-path、first-path或者空字符串)。
  2. 把捕获到的$1用/分割,再过滤掉空字符串(比如URL末尾带斜杠时,分割后会多出一个空元素),就能得到每一段路径。

比如用Python代码示例(只是演示逻辑,你可以对应到自己的语言):

import re

url = "http://www.example.com/first-path/second-path/"
match = re.match(r"^https?://[^/]+/(.*)$", url)
if match:
    path_str = match.group(1)
    path_segments = [seg for seg in path_str.split("/") if seg]
    print(path_segments)  # 输出: ['first-path', 'second-path']

这个方案兼容性更强,几乎所有正则引擎都支持。

内容的提问来源于stack exchange,提问作者Kermit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:05:07