matchers.go 919 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package strmatcher
  2. import (
  3. "regexp"
  4. "strings"
  5. )
  6. type fullMatcher string
  7. func (m fullMatcher) Match(s string) bool {
  8. return string(m) == s
  9. }
  10. func (m fullMatcher) String() string {
  11. return "full:" + string(m)
  12. }
  13. type substrMatcher string
  14. func (m substrMatcher) Match(s string) bool {
  15. return strings.Contains(s, string(m))
  16. }
  17. func (m substrMatcher) String() string {
  18. return "keyword:" + string(m)
  19. }
  20. type domainMatcher string
  21. func (m domainMatcher) Match(s string) bool {
  22. pattern := string(m)
  23. if !strings.HasSuffix(s, pattern) {
  24. return false
  25. }
  26. return len(s) == len(pattern) || s[len(s)-len(pattern)-1] == '.'
  27. }
  28. func (m domainMatcher) String() string {
  29. return "domain:" + string(m)
  30. }
  31. type regexMatcher struct {
  32. pattern *regexp.Regexp
  33. }
  34. func (m *regexMatcher) Match(s string) bool {
  35. return m.pattern.MatchString(s)
  36. }
  37. func (m *regexMatcher) String() string {
  38. return "regexp:" + m.pattern.String()
  39. }