导读:
在 Shadowrocket(小火箭)中,正则表达式(Regex)主要用于域名匹配和 URL 匹配,可以实现更灵活的流量分流规则。
基本语法格式
# URL 正则匹配
URL-REGEX,正则表达式,策略
常用正则规则示例
域名匹配 (DOMAIN-REGEX)
# 匹配所有 .cn 域名 DOMAIN-REGEX,^.*\.cn$,DIRECT # 匹配包含 google 的域名(如 google.com, googleapis.com) DOMAIN-REGEX,.*google.*,PROXY # 匹配特定二级域名(如 www.example.com, api.example.com) DOMAIN-REGEX,^.*\.example\.com$,PROXY # 匹配数字开头的域名(如 1.abc.com, 123.def.com) DOMAIN-REGEX,^[0-9]+\..*$,DIRECT # 匹配特定后缀组合 DOMAIN-REGEX,.*\.(cn|com\.cn|net\.cn)$,DIRECT
URL 匹配 (URL-REGEX)
# 匹配视频文件 URL-REGEX,.*\.(mp4|mkv|avi|mov)$,PROXY # 匹配特定路径 URL-REGEX,.*\/api\/v1\/.*,PROXY # 匹配包含 tracking 的 URL URL-REGEX,.*(tracking|analytics).*REJECT # 匹配特定域名下的图片 URL-REGEX,^https?://.*\.googleusercontent\.com.*\.(jpg|png)$,PROXY
特殊字符转义
正则中的特殊字符需要转义(加反斜杠 \):
| 字符 | 转义写法 | 含义 |
|---|---|---|
\. |
匹配点号本身(不是任意字符) | |
\* |
匹配星号本身 | |
\? |
匹配问号本身 | |
\/ |
匹配斜杠(URL 匹配中常用) | |
\ |
\\ |
匹配反斜杠本身 |
错误示例:.*.google.com(点号未转义,会匹配任意字符)
正确示例:.*\.google\.com
性能优化建议
⚠️ 重要提示:正则表达式匹配比 DOMAIN-SUFFIX 或 DOMAIN-KEYWORD 更耗性能,建议:
-
优先使用简单规则:
# 推荐(性能更好) DOMAIN-SUFFIX,google.com,PROXY # 避免(除非必要) DOMAIN-REGEX,.*\.google\.com$,PROXY
-
使用锚点优化:
# 推荐:使用 ^ 和 $ 限定开头结尾 DOMAIN-REGEX,^.*\.google\.com$,PROXY # 避免:过于宽泛的匹配 DOMAIN-REGEX,google,PROXY
-
控制规则数量:正则规则过多会导致配置加载变慢,建议控制在 50 条以内。
实际配置模板
[Rule] # 国内域名直连(正则版) DOMAIN-REGEX,^.*\.(cn|com\.cn|net\.cn|org\.cn|gov\.cn)$,DIRECT DOMAIN-REGEX,^.*\.(baidu|alipay|taobao|tmall|jd)\.com$,DIRECT # 广告拦截 DOMAIN-REGEX,.*(ads|tracking|analytics|metrics).*,REJECT URL-REGEX,.*\.(gif|png|jpg)\?.*track.*,REJECT # 流媒体 DOMAIN-REGEX,^.*\.(netflix|nflxvideo)\.com$,NETFLIX DOMAIN-REGEX,^.*\.(youtube|ytimg|googlevideo)\.com$,YouTube # 兜底规则 FINAL,PROXY
调试技巧
-
测试正则有效性:可先在 regex101.com 测试,选择 "PCRE" 或 "Golang" 模式(Shadowrocket 基于 iOS 网络框架,接近 PCRE 语法)
-
查看日志:开启 Shadowrocket 的"日志"功能,检查规则是否命中
-
避免贪婪匹配:使用 代替 防止过度匹配
注意:Shadowrocket 从 2.1.x 版本开始支持完整的正则语法,但建议保持规则简洁以确保代理性能。