diff --git a/regex/re_test.go b/regex/re_test.go index f085761..b650864 100644 --- a/regex/re_test.go +++ b/regex/re_test.go @@ -488,7 +488,25 @@ var reTests = []struct { {`[b-e]`, nil, `f`, []Group{}}, {`*?`, nil, `-`, nil}, - {`a*?`, nil, `-`, nil}, // non-greedy operators are not supported + {`a.+c`, nil, `abcabc`, []Group{{0, 6}}}, + // Lazy quantifier tests + {`a.+?c`, nil, `abcabc`, []Group{{0, 3}, {3, 6}}}, + {`ab*?bc`, []ReFlag{RE_CASE_INSENSITIVE}, `ABBBBC`, []Group{{0, 6}}}, + {`ab+?bc`, []ReFlag{RE_CASE_INSENSITIVE}, `ABBC`, []Group{{0, 4}}}, + {`ab??bc`, []ReFlag{RE_CASE_INSENSITIVE}, `ABBC`, []Group{{0, 4}}}, + {`ab??bc`, []ReFlag{RE_CASE_INSENSITIVE}, `ABC`, []Group{{0, 3}}}, + {`ab??bc`, []ReFlag{RE_CASE_INSENSITIVE}, `ABBBBC`, []Group{}}, + {`ab??c`, []ReFlag{RE_CASE_INSENSITIVE}, `ABC`, []Group{{0, 3}}}, + {`a.*?c`, []ReFlag{RE_CASE_INSENSITIVE}, `AXYZC`, []Group{{0, 5}}}, + {`a.+?c`, []ReFlag{RE_CASE_INSENSITIVE}, `ABCABC`, []Group{{0, 3}, {3, 6}}}, + {`a.*?c`, []ReFlag{RE_CASE_INSENSITIVE}, `ABCABC`, []Group{{0, 3}, {3, 6}}}, + {`.*?\S *:`, nil, `xx:`, []Group{{0, 3}}}, + {`a[ ]*? (\d+).*`, nil, `a 10`, []Group{{0, 6}}}, + {`a[ ]*? (\d+).*`, nil, `a 10`, []Group{{0, 7}}}, + {`"(?:\\"|[^"])*?"`, nil, `"\""`, []Group{{0, 4}}}, + {`^.*?$`, nil, "one\ntwo\nthree", []Group{}}, + {`a[^>]*?b`, nil, `a>b`, []Group{}}, + {`^a*?$`, nil, `foo`, []Group{}}, // Numeric range tests - this is a feature that I added, and doesn't exist // in any other mainstream regex engine @@ -719,6 +737,18 @@ var groupTests = []struct { // {`(a|ab|c|bcd)*(d*)`, nil, `ababcd`, []Match{[]Group{{0, 6}, {3, 6}, {6, 6}}, []Group{{6, 6}, {6, 6}, {6, 6}}}}, // // Bug - this should give {0,3},{0,3},{0,0},{0,3},{3,3} but it gives {0,3},{0,2},{0,1},{1,2},{2,3} // // {`((a*)(b|abc))(c*)`, nil, `abc`, []Match{[]Group{{0, 3}, {0, 3}, {0, 0}, {0, 3}, {3, 3}}}}, + + // Lazy quantifier tests + {`a(?:b|c|d)+?(.)`, nil, `ace`, []Match{[]Group{{0, 3}, {2, 3}}}}, + {`a(?:b|(c|e){1,2}?|d)+?(.)`, nil, `ace`, []Match{[]Group{{0, 3}, {1, 2}, {2, 3}}}}, + {`(?