首页/开发/正则与编码速查/URL 解析正则的拆分与校验
正则进阶45 条

URL 解析正则的拆分与校验

URL 解析正则适合把协议、主机、端口、路径、查询串、片段切开,或从混杂文本里抽取链接;整体合法性校验应交给语言内置的 URL 解析器。主机部分要排除冒号与斜杠,路径不能用贪婪匹配,否则查询串与片段会被吞进去。

正则与编码速查开发更新于 2026-10-17
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌‌​‌​‌​‌‌‌​​‌​​‌‌​‌‌​​​​‌​‌‌​‌​‌‌‌​​​​​‌‌​​​​‌​‌‌‌​​‌​​‌‌‌​​‌‌​‌‌​​‌​‌​​‌​‌‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

URL 解析正则的拆分与校验

URL 的结构是「协议冒号双斜杠、授权部分、路径、查询串、片段」,正则擅长把这几个部分切开,不擅长判定整体是否合法。原因在于路径里可能带未编码字符、授权部分可能含用户信息与 IPv6 字面量、查询串里的分隔符规则由各协议自行约定。要拿结构就用语言内置的 URL 解析器,要在混杂文本里找出 URL 才用正则。

基本信息

主要字段协议、用户信息、主机、端口、路径、查询串、片段
关键分隔符冒号分协议,双斜杠起授权部分,斜杠起路径,问号起查询串,井号起片段
易错点路径可以包含除问号与井号以外的字符,主机名可被方括号包裹以表示 IPv6
推荐分工解析用内置库,抽取用正则,语义校验用代码

典型使用场景

  • 拆解链接字段:把域名、路径与查询串分别入库,便于统计站点分布
  • 文案与日志中抽取链接:文本里混有标点和中文时,用正则圈出候选 URL 再逐个校验
  • 路由规则匹配:从请求路径里提取标识段,用于灰度或限流规则
  • 查询串取值:从查询串里取出指定参数,注意需要先做解码再比较含义
  • 重写与替换:批量把旧域名替换为新域名,但要求只替换主机部分

拆分写法与抽取写法

拆分写法与抽取写法
# 拆分常用字段:主机里排除冒号、斜杠、问号、井号,路径不含问号与井号,片段到行尾
^(?<scheme>[A-Za-z][A-Za-z0-9+.\-]*)://(?<host>[^/:?#]+)(?::(?<port>\d{1,5}))?(?<path>/[^?#]*)?(?:\?(?<query>[^#]*))?(?:#(?<frag>.*))?$
# 查询串内部再拆分:按和号切分后逐个按等号拆键值
(?:^|&)(?<key>[^=&]+)=(?<val>[^&]*)          # 只取值到下一个和号
# 从混杂文本中抽取候选链接:宽松一些,抽出来再交给解析器
https?://[^\s"'<>]+                          # 遇到空白或引号即停
# 处理 IPv6 字面量:主机部分被方括号包裹,形如 http://[::1]:8080/
\[(?<v6>[0-9A-Fa-f:]+)\]

字段与规则

字段分隔与规则常见错误
协议字母开头,后跟字母数字与加号、点、连字符写成大小写敏感判断
主机不含冒号、斜杠、问号、井号把端口一起吃进主机名
端口两位到五位数字,范围需另行判断不校验 1 到 65535
路径以斜杠起,不含问号与井号用贪婪匹配吃掉查询串
查询串到井号为止,键值对之间用和号直接断言解码后的语义
片段井号之后到结尾误当成服务器可见内容
片段只在浏览器端使用,不会随请求发往服务器;做服务端分析时把它当作客户端状态而不是资源定位的一部分,否则会把同一页面的不同锚点当成不同资源。
百分号编码让字符串书写形式与语义不同:比较参数值前应先做一次解码,但解码后不要再进行二次解码,重复解码是常见的绕过漏洞来源。

易错点

  • 用贪婪的点星匹配路径:查询串与片段会被一起吃进路径字段,后续按路径分组的统计结果全错
  • 忘记锚定就从长文本里取值:会把相邻标点或后续文本截进地址,形似合法却指向错误资源
  • 用正则做「URL 是否合法」的判定:带 IPv6 字面量、带用户信息、带未编码字符的合法链接会被误杀
  • 忽略相对地址与协议相对地址:以双斜杠开头的写法在同一页面语境下合法,单独校验会失败
  • 对未解码的值下结论:参数值经过编码后与原意不同,直接比较会漏掉等价输入

数据来源与参考

  • RFC 3986:URI 通用语法(组成部分与分隔符)
  • MDN:URL API 与 URL 组成部分说明
  • WHATWG URL 标准:主机解析与百分号编码规则

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/regex/url-parse-regex.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌‌​‌​‌​‌‌‌​​‌​​‌‌​‌‌​​​​‌​‌‌​‌​‌‌‌​​​​​‌‌​​​​‌​‌‌‌​​‌​​‌‌‌​​‌‌​‌‌​​‌​‌​​‌​‌‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​