github.com/onsi/gomega@v1.32.0/matchers/match_regexp_matcher.go (about) 1 package matchers 2 3 import ( 4 "fmt" 5 "regexp" 6 7 "github.com/onsi/gomega/format" 8 ) 9 10 type MatchRegexpMatcher struct { 11 Regexp string 12 Args []interface{} 13 } 14 15 func (matcher *MatchRegexpMatcher) Match(actual interface{}) (success bool, err error) { 16 actualString, ok := toString(actual) 17 if !ok { 18 return false, fmt.Errorf("RegExp matcher requires a string or stringer.\nGot:%s", format.Object(actual, 1)) 19 } 20 21 match, err := regexp.Match(matcher.regexp(), []byte(actualString)) 22 if err != nil { 23 return false, fmt.Errorf("RegExp match failed to compile with error:\n\t%s", err.Error()) 24 } 25 26 return match, nil 27 } 28 29 func (matcher *MatchRegexpMatcher) FailureMessage(actual interface{}) (message string) { 30 return format.Message(actual, "to match regular expression", matcher.regexp()) 31 } 32 33 func (matcher *MatchRegexpMatcher) NegatedFailureMessage(actual interface{}) (message string) { 34 return format.Message(actual, "not to match regular expression", matcher.regexp()) 35 } 36 37 func (matcher *MatchRegexpMatcher) regexp() string { 38 re := matcher.Regexp 39 if len(matcher.Args) > 0 { 40 re = fmt.Sprintf(matcher.Regexp, matcher.Args...) 41 } 42 return re 43 }