订阅里有一百多个节点,手写分组名单不现实,而且订阅一更新就失效。
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: true | proxies 段 + 所有 proxy-provider |
include-all-proxies: true | 只有 proxies 段里手写的节点 |
include-all-providers: true | 只有 provider 里的节点 |
use: [provider名] | 指定的 provider |
自建节点写在 proxies 里、订阅节点走 provider 时,这几个选项能帮你精确控制哪些节点进哪个组。
正则基础(够用就行)
按地区分组
最常见的需求。各地区的常见叫法都要覆盖:
# 香港
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.5x、1x、3x)。
# 只要低倍率(省流量)
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 写对了
组是空的,按顺序查:
- 正则里有没有拼写错误(中文节点名注意有没有多余空格)
- 是不是漏了
(?i),而节点名是小写的hk exclude-filter是不是太宽,把要的也排掉了use指向的 provider 加载成功了吗
混进了不该有的节点:
在 exclude-filter 里加上那个节点名的特征词,或者把 filter 写得更精确(加 ^ 或 $ 限定位置)。
常见陷阱
不用 filter 的场景
节点数量少(十几个以内)、名字不规范、或者你想完全掌控每个组里有什么,直接手写节点名也没问题:
- name: "🇭🇰 香港"
type: url-test
proxies:
- "香港 IPLC 01"
- "香港 BGP 02"
interval: 300代价是订阅更新后新增的节点不会自动进来,需要手动维护。
小结
(?i)几乎每次都要加- 单个汉字不要单独当过滤词,会误伤
- 伪节点在 provider 层面统一排除,比每个组写一遍省事
exclude-type比在名字里猜协议可靠- 写完一定要在代理页面数一下节点数量验证
- 专线单独成组用 fallback,给游戏和视频用
相关文档
十几种规则类型的语法、匹配逻辑与性能开销对照表,讲清楚 no-resolve 的作用、规则顺序为什么决定一切,以及怎么用连接页反查命中了哪条规则。
用外部规则集替代几百条手写规则。讲清楚 domain/ipcidr/classical 三种 behavior 的差异、text 与 yaml 格式、更新间隔怎么设,以及规则集不生效时怎么查。