github.com/Axway/agent-sdk@v1.1.101/pkg/filter/expr_matchregex.go (about) 1 package filter 2 3 import ( 4 "errors" 5 "regexp" 6 ) 7 8 // MatchRegExExpr - MatchRegEx implementation. Performs a regular expression match for argument against value of specified filter data 9 type MatchRegExExpr struct { 10 FilterType string 11 Name string 12 Arg *regexp.Regexp 13 } 14 15 func newMatchRegExExpr(filterType, name, regexStr string) (CallExpr, error) { 16 regExArg, err := regexp.Compile(regexStr) 17 if err != nil { 18 return nil, errors.New("Invalid regular expression(" + err.Error() + ") in MatchRegEx call") 19 } 20 return &MatchRegExExpr{ 21 FilterType: filterType, 22 Name: name, 23 Arg: regExArg, 24 }, nil 25 } 26 27 // GetType - Returns the CallType 28 func (e *MatchRegExExpr) GetType() CallType { 29 return MATCHREGEX 30 } 31 32 // Execute - Returns true if the regular expression in argument matches the value for specified filter data 33 func (e *MatchRegExExpr) Execute(data Data) (interface{}, error) { 34 if e.Name == "" { 35 for _, key := range data.GetKeys(e.FilterType) { 36 if e.Arg.MatchString(key) { 37 return true, nil 38 } 39 } 40 } 41 42 valueToMatch, ok := data.GetValue(e.FilterType, e.Name) 43 if !ok { 44 return false, nil 45 } 46 return e.Arg.MatchString(valueToMatch), nil 47 } 48 49 func (e *MatchRegExExpr) String() string { 50 return e.FilterType + "." + e.Name + ".MatchRegEx(\"" + e.Arg.String() + "\")" 51 }