Browse Source

update: clash regex

tokumeikoi 3 năm trước cách đây
mục cha
commit
90f9c181a0
2 tập tin đã thay đổi với 13 bổ sung11 xóa
  1. 12 10
      app/Http/Controllers/Client/Protocols/Clash.php
  2. 1 1
      resources/rules/.gitignore

+ 12 - 10
app/Http/Controllers/Client/Protocols/Clash.php

@@ -55,16 +55,17 @@ class Clash
             $isFilter = false;
             foreach ($config['proxy-groups'][$k]['proxies'] as $src) {
                 foreach ($proxies as $dst) {
+                    if (!$this->isRegex($src)) continue;
+                    $isFilter = true;
+                    $config['proxy-groups'][$k]['proxies'] = array_values(array_diff($config['proxy-groups'][$k]['proxies'], [$src]));
                     if ($this->isMatch($src, $dst)) {
-                        $isFilter = true;
-                        $config['proxy-groups'][$k]['proxies'] = array_diff($config['proxy-groups'][$k]['proxies'], [$src]);
                         array_push($config['proxy-groups'][$k]['proxies'], $dst);
                     }
                 }
+                if ($isFilter) continue;
             }
-            if (!$isFilter) {
-                $config['proxy-groups'][$k]['proxies'] = array_merge($config['proxy-groups'][$k]['proxies'], $proxies);
-            }
+            if ($isFilter) continue;
+            $config['proxy-groups'][$k]['proxies'] = array_merge($config['proxy-groups'][$k]['proxies'], $proxies);
         }
         // Force the current subscription domain to be a direct rule
         $subsDomain = $_SERVER['SERVER_NAME'];
@@ -155,10 +156,11 @@ class Clash
 
     private function isMatch($exp, $str)
     {
-        try {
-            return preg_match($exp, $str);
-        } catch (\Exception $e) {
-            return false;
-        }
+        return @preg_match($exp, $str);
+    }
+
+    private function isRegex($exp)
+    {
+        return @preg_match($exp, null) !== false;
     }
 }

+ 1 - 1
resources/rules/.gitignore

@@ -1 +1 @@
-custom.clash.yaml
+custom.*