domain_regex.go 845 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package common
  2. import (
  3. C "github.com/metacubex/mihomo/constant"
  4. "github.com/dlclark/regexp2"
  5. )
  6. type DomainRegex struct {
  7. *Base
  8. regex *regexp2.Regexp
  9. adapter string
  10. }
  11. func (dr *DomainRegex) RuleType() C.RuleType {
  12. return C.DomainRegex
  13. }
  14. func (dr *DomainRegex) Match(metadata *C.Metadata) (bool, string) {
  15. domain := metadata.RuleHost()
  16. match, _ := dr.regex.MatchString(domain)
  17. return match, dr.adapter
  18. }
  19. func (dr *DomainRegex) Adapter() string {
  20. return dr.adapter
  21. }
  22. func (dr *DomainRegex) Payload() string {
  23. return dr.regex.String()
  24. }
  25. func NewDomainRegex(regex string, adapter string) (*DomainRegex, error) {
  26. r, err := regexp2.Compile(regex, regexp2.IgnoreCase)
  27. if err != nil {
  28. return nil, err
  29. }
  30. return &DomainRegex{
  31. Base: &Base{},
  32. regex: r,
  33. adapter: adapter,
  34. }, nil
  35. }
  36. //var _ C.Rule = (*DomainRegex)(nil)