diff options
| author | Paul Buetow <note20@mx.buetow.org> | 2020-08-30 14:38:43 +0300 |
|---|---|---|
| committer | Paul Buetow <note20@mx.buetow.org> | 2020-08-30 14:38:43 +0300 |
| commit | 2bb621846f784d8ef66a4ffa1a6412e996d7b615 (patch) | |
| tree | 056a8b38db5a07b924bf2a026e783c960fc1f921 /internal/regex | |
| parent | c5a0ba7d29da7effa0ae18bffa10fc0be359b8e7 (diff) | |
initial regex package
Diffstat (limited to 'internal/regex')
| -rw-r--r-- | internal/regex/regex.go | 69 | ||||
| -rw-r--r-- | internal/regex/regex_test.go | 16 |
2 files changed, 85 insertions, 0 deletions
diff --git a/internal/regex/regex.go b/internal/regex/regex.go new file mode 100644 index 0000000..35685a2 --- /dev/null +++ b/internal/regex/regex.go @@ -0,0 +1,69 @@ +package regex + +import ( + "regexp" +) + +type Flag int + +const ( + // Default is the default regex mode (positive matching) + Default = iota + // Negative negates the regex + Negative = iota + // Noop means no regex matching enabled, all defaults to true + Noop = iota +) + +type Regex struct { + str string + re *regexp.Regexp + flag Flag +} + +func (r Regex) Noop() Regex { + return Regex{ + flag: Noop, + } +} + +func New(str string, flag Flag) (Regex, error) { + r := Regex{ + str: str, + flag: flag, + } + + re, err := regexp.Compile(str) + + if err != nil { + return r, err + } + + r.re = re + return r, nil +} + +func (r Regex) MatchString(str string) bool { + switch r.flag { + case Default: + return r.re.MatchString(str) + case Negative: + return !r.re.MatchString(str) + case Noop: + return true + default: + return false + } +} + +/* +func (r Regex) Serialize() string { + // TODO: Serialize to hex encoded str + return fmt.Sprintf("%b,%s",r.negate,r,str) +} + +func (r Regex) Deserialize(input string) (Regex, error) { + +} + +*/ diff --git a/internal/regex/regex_test.go b/internal/regex/regex_test.go new file mode 100644 index 0000000..a90aee2 --- /dev/null +++ b/internal/regex/regex_test.go @@ -0,0 +1,16 @@ +package regex + +import "testing" + +func TestRegex(t *testing.T) { + + input := "hello" + r, err := New(".hello", Default) + if err != nil { + t.Errorf("error: unable to create regex: %v\n", err) + } + + if r.MatchString(input) { + t.Errorf("error: expected to match string '%s' with regex '%v' but didnt\n", input, r) + } +} |
