update once
This commit is contained in:
45
pkg/utils/utils.go
Normal file
45
pkg/utils/utils.go
Normal file
@@ -0,0 +1,45 @@
|
||||
package utils
|
||||
|
||||
import "strings"
|
||||
|
||||
func ParseRules(rulesRaw []string) [][]string {
|
||||
var rules [][]string
|
||||
for _, r := range rulesRaw {
|
||||
if r == "" {
|
||||
continue
|
||||
}
|
||||
if !strings.HasSuffix(r, ".") {
|
||||
r += "."
|
||||
}
|
||||
rules = append(rules, strings.Split(r, "."))
|
||||
}
|
||||
return rules
|
||||
}
|
||||
|
||||
func HasMatchedRule(rules [][]string, domain string) bool {
|
||||
var hasMatch bool
|
||||
OUTER:
|
||||
for _, m := range rules {
|
||||
domainSplited := strings.Split(domain, ".")
|
||||
i := len(m) - 1
|
||||
j := len(domainSplited) - 1
|
||||
// 从根域名开始匹配
|
||||
for i >= 0 && j >= 0 {
|
||||
if m[i] != domainSplited[j] && m[i] != "" {
|
||||
continue OUTER
|
||||
}
|
||||
i--
|
||||
j--
|
||||
}
|
||||
// 如果规则中还有剩余,但是域名已经匹配完了,检查规则最后一位是否是任意匹配
|
||||
if j != -1 && i == -1 && m[0] != "" {
|
||||
continue OUTER
|
||||
}
|
||||
hasMatch = i == -1
|
||||
// 如果匹配到了,就不用再匹配了
|
||||
if hasMatch {
|
||||
break
|
||||
}
|
||||
}
|
||||
return hasMatch
|
||||
}
|
||||
Reference in New Issue
Block a user