跳到主要内容

首页 / 博客 / 规则分流

节点自动分组的正则写法:filter 与 exclude-filter 实战

规则分流2026-05-241931 字约 5 分钟
节点自动分组的正则写法:filter 与 exclude-filter 实战

订阅里有一百多个节点,手写分组名单不现实,而且订阅一更新就失效。

Mihomo 的 include-all + filter 能让分组自动收编匹配的节点——写对正则是关键。

基本用法

proxy-groups:
  - name: "🇭🇰 香港"
    type: url-test
    include-all: true                       # 纳入所有节点
    filter: "(?i)香港|HK|Hong ?Kong"          # 只保留匹配的
    exclude-filter: "(?i)剩余|到期|官网"       # 再排除掉这些
    url: http://www.gstatic.com/generate_204
    interval: 300
    tolerance: 50

执行顺序:先 include-all 收集全部 → 再 filter 保留匹配 → 最后 exclude-filter 剔除。

三个 include 选项的区别

选项纳入范围
include-all: trueproxies 段 + 所有 proxy-provider
include-all-proxies: true只有 proxies 段里手写的节点
include-all-providers: true只有 provider 里的节点
use: [provider名]指定的 provider

自建节点写在 proxies 里、订阅节点走 provider 时,这几个选项能帮你精确控制哪些节点进哪个组。

正则基础(够用就行)

会这几个符号就够了(?i)忽略大小写,写在最前面。HK 和 hk 都能匹配竖线 pipe或。「香港HK」表示两者任一?前一个字符可有可无。「Hong ?Kong」匹配 HongKong 和 Hong Kong^ 与 $开头与结尾。「^香港」只匹配以「香港」开头的[]字符集合。「[0-9]」匹配任意数字\\d数字简写,等价于 [0-9]

按地区分组

最常见的需求。各地区的常见叫法都要覆盖:

# 香港
filter: "(?i)香港|港|HK|Hong ?Kong|HKG|🇭🇰"

# 台湾
filter: "(?i)台湾|台|TW|Taiwan|TPE|🇹🇼"

# 日本
filter: "(?i)日本|日|JP|Japan|东京|大阪|Tokyo|Osaka|🇯🇵"

# 新加坡
filter: "(?i)新加坡|狮城|SG|Singapore|🇸🇬"

# 美国
filter: "(?i)美国|美|US|USA|United ?States|洛杉矶|圣何塞|西雅图|🇺🇸"

# 韩国
filter: "(?i)韩国|韩|KR|Korea|首尔|Seoul|🇰🇷"

# 英国
filter: "(?i)英国|UK|United ?Kingdom|London|伦敦|🇬🇧"

按倍率筛选

很多订阅在节点名里标了倍率(0.5x1x3x)。

# 只要低倍率(省流量)
filter: "(?i)0\\.[0-9]x|1x|1\\.0x"

# 排除高倍率
exclude-filter: "(?i)[2-9](\\.[0-9])?x|1[0-9]x"

# 只要标了「专线」「IPLC」「IEPL」的(通常质量最好)
filter: "(?i)IPLC|IEPL|专线|内网|高级|premium"

排除伪节点

订阅里那些「剩余流量:128 GB」「距离到期:30 天」的条目,本质上是把信息塞进节点名里显示,它们并不是真节点。

exclude-filter: "(?i)剩余|到期|过期|流量|重置|官网|订阅|网址|群组|发布|防失联|测试|Traffic|Expire|GB|Days?"

按协议筛选

# 只要 Hysteria2(低延迟场景)
filter: "(?i)hy2|hysteria"

# 排除某些协议(Mihomo 提供了专门的字段,更可靠)
exclude-type: "ss|ssr|http"

exclude-type 按实际协议类型过滤,比在节点名里猜协议靠谱得多。

组合条件

正则本身不好表达「且」,但可以用两层过滤实现:

# 香港 且 低倍率
- name: "🇭🇰 香港低倍率"
  type: url-test
  include-all: true
  filter: "(?i)香港|HK"
  exclude-filter: "(?i)[2-9](\\.[0-9])?x|剩余|到期"
  interval: 300

先用 filter 圈定香港,再用 exclude-filter 排掉高倍率和伪节点。

需要更复杂的「且」逻辑,可以用正则的前瞻断言:

# 同时包含「香港」和「IPLC」
filter: "(?i)(?=.*香港)(?=.*IPLC).*"

能不用就不用——可读性太差,后期维护困难。

一套完整模板

proxy-providers:
  main:
    type: http
    url: "你的订阅链接"
    interval: 3600
    path: ./providers/main.yaml
    header: { User-Agent: ["clash.meta"] }
    exclude-filter: "(?i)剩余|到期|过期|流量|重置|官网|订阅|群组|发布|防失联"
    health-check: { enable: true, url: http://www.gstatic.com/generate_204, interval: 300, lazy: true }

proxy-groups:
  # 总开关
  - name: "🚀 节点选择"
    type: select
    proxies: ["♻️ 自动选择", "🇭🇰 香港", "🇯🇵 日本", "🇸🇬 新加坡", "🇺🇸 美国", "🇨🇳 台湾", "💎 专线", DIRECT]

  # 全局自动
  - name: "♻️ 自动选择"
    type: url-test
    use: [main]
    url: http://www.gstatic.com/generate_204
    interval: 300
    tolerance: 50
    lazy: true

  # 地区组
  - name: "🇭🇰 香港"
    type: url-test
    use: [main]
    filter: "(?i)香港|HK|Hong ?Kong|🇭🇰"
    interval: 300
    tolerance: 50
  - name: "🇯🇵 日本"
    type: url-test
    use: [main]
    filter: "(?i)日本|JP|Japan|东京|大阪|🇯🇵"
    interval: 300
    tolerance: 50
  - name: "🇸🇬 新加坡"
    type: url-test
    use: [main]
    filter: "(?i)新加坡|狮城|SG|Singapore|🇸🇬"
    interval: 300
    tolerance: 50
  - name: "🇺🇸 美国"
    type: url-test
    use: [main]
    filter: "(?i)美国|US|USA|United ?States|洛杉矶|圣何塞|🇺🇸"
    interval: 300
    tolerance: 50
  - name: "🇨🇳 台湾"
    type: url-test
    use: [main]
    filter: "(?i)台湾|TW|Taiwan|台北|🇹🇼"
    interval: 300
    tolerance: 50

  # 专线组(质量最好的,给游戏和视频用)
  - name: "💎 专线"
    type: fallback
    use: [main]
    filter: "(?i)IPLC|IEPL|专线|内网"
    interval: 600

  # 按用途
  - name: "🤖 AI 服务"
    type: select
    proxies: ["🇺🇸 美国", "🇯🇵 日本", "🇸🇬 新加坡", "🚀 节点选择"]
  - name: "🎬 流媒体"
    type: select
    proxies: ["🇭🇰 香港", "🇸🇬 新加坡", "💎 专线", "🚀 节点选择"]
  - name: "🎮 游戏"
    type: select
    proxies: ["💎 专线", "🇭🇰 香港", "🇯🇵 日本"]
  - name: "🐟 漏网之鱼"
    type: select
    proxies: ["🚀 节点选择", DIRECT]

怎么验证 filter 写对了

验证流程保存配置并重载客户端里点一下重载打开代理页面找到你写的那个组数一下节点数量和预期对得上吗逐个看节点名有没有混进不该有的
组里一个节点都没有,说明 filter 太严或写错了

组是空的,按顺序查:

  1. 正则里有没有拼写错误(中文节点名注意有没有多余空格)
  2. 是不是漏了 (?i),而节点名是小写的 hk
  3. exclude-filter 是不是太宽,把要的也排掉了
  4. use 指向的 provider 加载成功了吗

混进了不该有的节点

exclude-filter 里加上那个节点名的特征词,或者把 filter 写得更精确(加 ^$ 限定位置)。

常见陷阱

容易出错的地方忘了 (?i) —— 大小写不匹配是最常见原因单个汉字过滤(台、美、日)—— 会误伤,用 ^ 限定或写全称竖线两侧不要加空格 —— 「香港HK」会把空格算进匹配内容中文节点名里的全角空格 —— 和半角空格不是一个字符正则里的点号 . 匹配任意字符 —— 写倍率 0.5x 要转义成 0\\.5xemoji 也能匹配 —— 有些订阅用国旗 emoji 而不是文字

不用 filter 的场景

节点数量少(十几个以内)、名字不规范、或者你想完全掌控每个组里有什么,直接手写节点名也没问题:

- name: "🇭🇰 香港"
  type: url-test
  proxies:
    - "香港 IPLC 01"
    - "香港 BGP 02"
  interval: 300

代价是订阅更新后新增的节点不会自动进来,需要手动维护。

小结

  • (?i) 几乎每次都要加
  • 单个汉字不要单独当过滤词,会误伤
  • 伪节点在 provider 层面统一排除,比每个组写一遍省事
  • exclude-type 比在名字里猜协议可靠
  • 写完一定要在代理页面数一下节点数量验证
  • 专线单独成组用 fallback,给游戏和视频用

相关:策略组类型详解多订阅管理


相关文档