summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-12-25 11:03:13 +0100
committerDimitri Sokolyuk <demon@dim13.org>2016-12-25 11:03:13 +0100
commitb6158fe79d01268a0033c2b220f1a104193290a4 (patch)
tree0effe2b725d2879c0dee56be569adcb9b7c01f73
parent6f756f7f5e0f196476ea2b7910d38e6bab6e2f47 (diff)
Add RE stub
-rw-r--r--re.go21
-rw-r--r--re_test.go28
2 files changed, 48 insertions, 1 deletions
diff --git a/re.go b/re.go
index 6584c15..714afcf 100644
--- a/re.go
+++ b/re.go
@@ -1,3 +1,22 @@
package main
-// TODO add regexp handler
+import (
+ "regexp"
+ "strings"
+)
+
+func re(s, r string) string {
+ // min: s//
+ if len(r) < 3 || r[0] != 's' {
+ return ""
+ }
+ z := strings.Split(r[2:], string(r[1]))
+ if len(z) < 2 {
+ return ""
+ }
+ re, err := regexp.Compile(z[0])
+ if err != nil {
+ return ""
+ }
+ return re.ReplaceAllString(s, z[1])
+}
diff --git a/re_test.go b/re_test.go
new file mode 100644
index 0000000..447c60f
--- /dev/null
+++ b/re_test.go
@@ -0,0 +1,28 @@
+package main
+
+import "testing"
+
+func TestRE(t *testing.T) {
+ testCases := []struct {
+ r, s, x string
+ }{
+ {"s/ddd/xxx/", "abd ddd xxx", "abd xxx xxx"},
+ {"s,ddd,xxx,", "abd ddd xxx", "abd xxx xxx"},
+ {"s/ddd/xxx", "abd ddd xxx", "abd xxx xxx"},
+ {"s/x$/X", "abd ddd xxx", "abd ddd xxX"},
+ {"s/ /A", "abd ddd xxx", "abdAdddAxxx"},
+ {"s///", "abd ddd xxx", "abd ddd xxx"},
+ {"s//", "abd ddd xxx", "abd ddd xxx"},
+ {"s/", "abd ddd xxx", ""},
+ {"S//", "abd ddd xxx", ""},
+ {"s/^d/X", "abd ddd xxx", "abd ddd xxx"},
+ }
+ for _, tc := range testCases {
+ t.Run(tc.r, func(t *testing.T) {
+ res := re(tc.s, tc.r)
+ if res != tc.x {
+ t.Errorf("got %q, want %q", res, tc.x)
+ }
+ })
+ }
+}