域名正则匹配

导读:

  1. 基本语法格式
  2. 常用正则规则示例
  3. 特殊字符转义
  4. 性能优化建议
  5. 实际配置模板
  6. 调试技巧

在 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-SUFFIXDOMAIN-KEYWORD 更耗性能,建议:

  1. 优先使用简单规则

    # 推荐(性能更好)
    DOMAIN-SUFFIX,google.com,PROXY
    # 避免(除非必要)
    DOMAIN-REGEX,.*\.google\.com$,PROXY
  2. 使用锚点优化

    # 推荐:使用 ^ 和 $ 限定开头结尾
    DOMAIN-REGEX,^.*\.google\.com$,PROXY
    # 避免:过于宽泛的匹配
    DOMAIN-REGEX,google,PROXY
  3. 控制规则数量:正则规则过多会导致配置加载变慢,建议控制在 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

调试技巧

  1. 测试正则有效性:可先在 regex101.com 测试,选择 "PCRE" 或 "Golang" 模式(Shadowrocket 基于 iOS 网络框架,接近 PCRE 语法)

  2. 查看日志:开启 Shadowrocket 的"日志"功能,检查规则是否命中

  3. 避免贪婪匹配:使用 代替 防止过度匹配

注意:Shadowrocket 从 2.1.x 版本开始支持完整的正则语法,但建议保持规则简洁以确保代理性能。

您可以还会对下面的文章感兴趣: