导读:
在 Shadowrocket(小火箭)中,正则表达式主要用于 URL-REGEX 规则类型,用于匹配请求的完整 URL(包括协议、域名、路径和参数),实现精细化的流量分流。
基本语法格式
URL-REGEX,正则表达式,策略(Proxy/Direct/Reject等)
核心规则与语法
基础匹配规则
- 无需分隔符:直接写正则内容,不需要
/pattern/或/pattern/g - 匹配对象:完整的 URL 字符串(如
https://api.example.com/v1/user?id=123) - 默认行为:部分匹配(即正则匹配 URL 的任意部分即生效)
常用元字符
| 符号 | 含义 | 示例 |
|---|---|---|
^ |
开头锚点 | ^https:// 匹配所有 https 请求 |
| 结尾锚点 | \.jpg$ 匹配以 jpg 结尾的 URL |
|
| 任意字符(0或多个) | .*google.* 匹配包含 google 的 URL |
|
\. |
转义点号 | \.com 匹配 .com 而非任意字符 |
\d |
数字 | \d+ 匹配一个或多个数字 |
| 分组 | (jpg\|png) 匹配 jpg 或 png |
实用配置示例
媒体平台匹配
# 匹配 Netflix 相关域名
URL-REGEX,^https?:\/\/.*\.netflix\.com,Proxy
# 匹配 Spotify
URL-REGEX,^https?:\/\/.*\.(spotify\.com\|scdn\.co),Proxy
广告拦截
# 拦截常见广告域名 URL-REGEX,^https?:\/\/.*\.(doubleclick\.net\|googleadservices\.com),REJECT # 拦截带广告参数的请求 URL-REGEX,^https?:\/\/.*\?.*ad.*=,REJECT
文件类型分流
# 图片直连(避免代理浪费流量) URL-REGEX,^https?:\/\/.*\.(jpg\|jpeg\|png\|gif\|webp\|svg)$,DIRECT # 视频文件代理 URL-REGEX,^https?:\/\/.*\.(mp4\|m3u8\|ts\|flv)$,Proxy
API 特定路径
# 特定 API 走代理 URL-REGEX,^https?:\/\/api\.github\.com\/.*,Proxy # 特定路径直连 URL-REGEX,^https?:\/\/.*\.example\.com\/(static\|assets)\/.*,DIRECT
重要注意事项
性能优化(关键)
-
避免过度使用:正则匹配比
DOMAIN或DOMAIN-SUFFIX慢 10-100 倍 -
优先使用简单规则:
# 推荐(高效) DOMAIN-SUFFIX,google.com,Proxy # 避免(低效) URL-REGEX,^https?:\/\/.*\.google\.com,Proxy
转义字符
- URL 中的 需要转义为
\/ - 需要转义为
\.(否则匹配任意字符) - 需要转义为
\?(否则表示可选)
iOS 限制
- 避免使用过于复杂的正则(如嵌套分组过多)
- 正则长度建议控制在 200 字符以内
- 不支持正则表达式修饰符(如
i忽略大小写需用(?i))
调试技巧
在 Shadowrocket 中开启日志记录(设置 → 日志),查看实际请求的 URL 是否被规则匹配:
- 绿色 = 匹配成功
- 灰色 = 未匹配
进阶技巧
排除特定路径
# 匹配 google.com 但不匹配 /maps URL-REGEX,^https?:\/\/[^\/]*google\.com\/(?!maps),Proxy
匹配特定 User-Agent(结合使用)
虽然 URL-REGEX 只匹配 URL,但可以配合 USER-AGENT 规则:
# 先匹配 UA,再匹配 URL USER-AGENT,*AppName*,Proxy URL-REGEX,^https?:\/\/api\.specific\.com\/.*,Proxy
大小写不敏感
# 使用 (?i) 修饰符(部分版本支持) URL-REGEX,(?i)^https?:\/\/.*\.google\.com,Proxy
建议:仅在无法通过 DOMAIN、DOMAIN-SUFFIX 或 DOMAIN-KEYWORD 实现需求时,才使用 URL-REGEX,以保证代理效率。