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  }