update: add clash regex filter

This commit is contained in:
tokumeikoi 2021-12-13 14:26:05 +08:00
parent b392fa3345
commit bbfabdb72f

View File

@ -52,7 +52,19 @@ class Clash
$config['proxies'] = array_merge($config['proxies'] ? $config['proxies'] : [], $proxy); $config['proxies'] = array_merge($config['proxies'] ? $config['proxies'] : [], $proxy);
foreach ($config['proxy-groups'] as $k => $v) { foreach ($config['proxy-groups'] as $k => $v) {
if (!is_array($config['proxy-groups'][$k]['proxies'])) continue; if (!is_array($config['proxy-groups'][$k]['proxies'])) continue;
$config['proxy-groups'][$k]['proxies'] = array_merge($config['proxy-groups'][$k]['proxies'], $proxies); $isFilter = false;
foreach ($config['proxy-groups'][$k]['proxies'] as $srcProxie) {
foreach ($proxies as $dstProxie) {
if ($this->isMatch($srcProxie, $dstProxie)) {
$isFilter = true;
$config['proxy-groups'][$k]['proxies'] = array_diff($config['proxy-groups'][$k]['proxies'], [$srcProxie]);
array_push($config['proxy-groups'][$k]['proxies'], $dstProxie);
}
}
}
if (!$isFilter) {
$config['proxy-groups'][$k]['proxies'] = array_merge($config['proxy-groups'][$k]['proxies'], $proxies);
}
} }
// Force the current subscription domain to be a direct rule // Force the current subscription domain to be a direct rule
$subsDomain = $_SERVER['SERVER_NAME']; $subsDomain = $_SERVER['SERVER_NAME'];
@ -134,4 +146,13 @@ class Clash
if (!empty($server['allow_insecure'])) $array['skip-cert-verify'] = ($server['allow_insecure'] ? true : false); if (!empty($server['allow_insecure'])) $array['skip-cert-verify'] = ($server['allow_insecure'] ? true : false);
return $array; return $array;
} }
private function isMatch($exp, $str)
{
try {
return preg_match($exp, $str);
} catch (\Exception $e) {
return false;
}
}
} }