Перейти к содержимому
RU

Главная / Блог / Правила и маршрутизация

Регулярные выражения для автоматической группировки узлов — filter и exclude-filter на практике

Правила и маршрутизация2026-05-241195 слов3 мин чтения
Регулярные выражения для автоматической группировки узлов — filter и exclude-filter на практике

Подписка с сотней с лишним узлов делает написание состава групп вручную непрактичным, и всё ломается, как только подписка обновится.

include-all вместе с filter в Mihomo позволяет группе собирать подходящие узлы автоматически — весь фокус в том, чтобы правильно написать регулярное выражение.

Основы

proxy-groups:
  - name: "🇭🇰 Гонконг"
    type: url-test
    include-all: true                         # взять всё
    filter: "(?i)HK|Hong ?Kong"               # оставить только совпавшее
    exclude-filter: "(?i)remaining|expire|website"   # затем выбросить это
    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Только узлы из провайдеров
use: [имя провайдера]Названные провайдеры

Когда ваши собственные серверы живут в proxies, а узлы подписки приходят из провайдера, эти опции дают точный контроль над тем, что в какую группу попадёт.

Основы регулярных выражений (сколько нужно)

Этих нескольких символов достаточно(?i)игнорировать регистр, пишется в начале. Подходит и HK, и hkвертикальная чертаили. "TokyoJP" совпадает с любым?предыдущий символ необязателен. "Hong ?Kong" совпадает с HongKong и Hong Kong^ и $начало и конец. "^HK" совпадает только с именами, начинающимися на HK[]набор символов. "[0-9]" совпадает с любой цифрой\\dсокращение для цифры, то же что [0-9]

Группировка по регионам

Самая частая задача. Охватите разные названия каждого региона:

# Гонконг
filter: "(?i)HK|Hong ?Kong|HKG|🇭🇰"

# Тайвань
filter: "(?i)TW|Taiwan|Taipei|TPE|🇹🇼"

# Япония
filter: "(?i)JP|Japan|Tokyo|Osaka|🇯🇵"

# Сингапур
filter: "(?i)SG|Singapore|🇸🇬"

# США
filter: "(?i)US|USA|United ?States|Los ?Angeles|San ?Jose|Seattle|🇺🇸"

# Южная Корея
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"

# только узлы, помеченные как выделенные линии (обычно лучшее качество)
filter: "(?i)IPLC|IEPL|dedicated|premium"

Исключение псевдоузлов

Записи вроде «Остаток: 128 ГБ» или «Истекает через 30 дней» — это информация, засунутая в имена узлов ради отображения; настоящими узлами они не являются.

exclude-filter: "(?i)remaining|expire|expired|traffic|reset|website|subscription|url|group|announcement|backup|test|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|Hong ?Kong"
  exclude-filter: "(?i)[2-9](\\.[0-9])?x|remaining|expire"
  interval: 300

filter сужает до Гонконга, затем exclude-filter убирает высокие множители и псевдоузлы.

Для действительно сложного «и» подойдёт опережающая проверка:

# содержит и "Hong Kong", и "IPLC"
filter: "(?i)(?=.*Hong ?Kong)(?=.*IPLC).*"

Избегайте этого, где можно: читаемость сильно страдает, а поддержка становится мучительной.

Полный шаблон

proxy-providers:
  main:
    type: http
    url: "адрес вашей подписки"
    interval: 3600
    path: ./providers/main.yaml
    header: { User-Agent: ["clash.meta"] }
    exclude-filter: "(?i)remaining|expire|expired|traffic|reset|website|subscription|group|announcement|backup"
    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|Tokyo|Osaka|🇯🇵"
    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|Los ?Angeles|San ?Jose|🇺🇸"
    interval: 300
    tolerance: 50
  - name: "🇹🇼 Тайвань"
    type: url-test
    use: [main]
    filter: "(?i)TW|Taiwan|Taipei|🇹🇼"
    interval: 300
    tolerance: 50

  # выделенные линии (лучшее качество, для игр и видео)
  - name: "💎 Выделенные"
    type: fallback
    use: [main]
    filter: "(?i)IPLC|IEPL|dedicated|premium"
    interval: 600

  # по назначению
  - name: "🤖 Сервисы ИИ"
    type: select
    proxies: ["🇺🇸 США", "🇯🇵 Япония", "🇸🇬 Сингапур", "🚀 Выбор"]
  - name: "🎬 Стриминг"
    type: select
    proxies: ["🇭🇰 Гонконг", "🇸🇬 Сингапур", "💎 Выделенные", "🚀 Выбор"]
  - name: "🎮 Игры"
    type: select
    proxies: ["💎 Выделенные", "🇭🇰 Гонконг", "🇯🇵 Япония"]
  - name: "🐟 Прочее"
    type: select
    proxies: ["🚀 Выбор", DIRECT]

Как убедиться, что фильтр верен

Цикл проверкиСохранить конфигурацию и перезагрузитьнажать перезагрузку в клиентеОткрыть страницу проксинайти написанную вами группуПосчитать узлысовпадает ли с ожиданиемПрочитать имена узловне пролезло ли что-то лишнее
Пустая группа означает слишком строгий или попросту неверный фильтр

Группа пуста — проверяйте по порядку:

  1. Нет ли опечатки в регулярке (следите за лишними пробелами в именах узлов)
  2. Не забыли ли (?i), когда имена узлов написаны строчными hk
  3. Не слишком ли широк exclude-filter, убравший нужное
  4. Загрузился ли провайдер, указанный в use

Пролезли лишние узлы:

Добавьте характерное слово из имени этого узла в exclude-filter либо сделайте filter точнее, привязав его через ^ или $.

Частые ловушки

Где обычно ошибаютсяЗабыли (?i) — несовпадение регистра самая частая причинаФильтр по двухбуквенному фрагменту (US, SG, JP) — он перебирает, так что привязывайте его или пишите название целикомПробелы вокруг вертикальной черты — "Hong KongHK" затягивает пробелы в совпадениеПолноширинные пробелы в именах узлов — это не тот же символ, что обычный пробелТочка в регулярке совпадает с любым символом — множитель вроде 0.5x надо экранировать как 0\\.5xЭмодзи тоже совпадают — часть подписок использует флаги вместо слов

Когда фильтр не нужен

При небольшом числе узлов (десяток-другой), нерегулярных именах или желании полностью контролировать состав каждой группы прописывать имена руками совершенно нормально:

- name: "🇭🇰 Гонконг"
  type: url-test
  proxies:
    - "Hong Kong IPLC 01"
    - "Hong Kong BGP 02"
  interval: 300

Цена в том, что новые узлы после обновления подписки автоматически не присоединяются и требуют ручной работы.

Коротко

  • (?i) нужен почти всегда
  • Не используйте двухбуквенный фрагмент как фильтр сам по себе — он перебирает
  • Исключайте псевдоузлы один раз на уровне провайдера, а не в каждой группе
  • exclude-type лучше угадывания протокола по имени
  • Написав фильтр, обязательно посчитайте узлы на странице прокси для проверки
  • Выделенным линиям дайте отдельную группу fallback для игр и видео

Смотрите также: пять типов proxy-groups и управление несколькими подписками.


Смежные документы

Справочник по типам правил Clash — DOMAIN, IP-CIDR, GEOIP, PROCESS-NAME и остальные
Правила и маршрутизация Справочник по типам правил Clash — DOMAIN, IP-CIDR, GEOIP, PROCESS-NAME и остальные

Синтаксис, логика сопоставления и относительная стоимость каждого типа правил, что на самом деле делает no-resolve, почему порядок правил решает всё, и как узнать, какое правило сработало.

2026-07-251168 слов3 мин чтения
Удалённые наборы правил через rule-providers — behavior, format и стратегия обновления
Правила и маршрутизация Удалённые наборы правил через rule-providers — behavior, format и стратегия обновления

Как заменить сотни написанных руками правил внешними списками. Разница между behavior domain, ipcidr и classical, text против yaml, как задавать интервал обновления и что проверять, когда набор не работает.

2026-07-211118 слов3 мин чтения
Раздельное туннелирование на практике — корпоративная сеть, локальный доступ и зарубежный прокси вместе
Правила и маршрутизация Раздельное туннелирование на практике — корпоративная сеть, локальный доступ и зарубежный прокси вместе

Полная конфигурация, обслуживающая одновременно корпоративный VPN, прямой локальный доступ и проксируемые зарубежные сервисы: домены и диапазоны IP, маршрутизация DNS и типичные конфликты.

2026-07-171165 слов3 мин чтения