[[test]] name = "1" regex = "a" haystack = "aaa" matches = [[0, 1], [1, 2], [2, 3]] [[test]] name = "2" regex = "a" haystack = "aba" matches = [[0, 1], [2, 3]] [[test]] name = "empty1" regex = '' haystack = '' matches = [[0, 0]] [[test]] name = "empty2" regex = '' haystack = 'abc' matches = [[0, 0], [1, 1], [2, 2], [3, 3]] [[test]] name = "empty3" regex = '(?:)' haystack = 'abc' matches = [[0, 0], [1, 1], [2, 2], [3, 3]] [[test]] name = "empty4" regex = '(?:)*' haystack = 'abc' matches = [[0, 0], [1, 1], [2, 2], [3, 3]] [[test]] name = "empty5" regex = '(?:)+' haystack = 'abc' matches = [[0, 0], [1, 1], [2, 2], [3, 3]] [[test]] name = "empty6" regex = '(?:)?' haystack = 'abc' matches = [[0, 0], [1, 1], [2, 2], [3, 3]] [[test]] name = "empty7" regex = '(?:)(?:)' haystack = 'abc' matches = [[0, 0], [1, 1], [2, 2], [3, 3]] [[test]] name = "empty8" regex = '(?:)+|z' haystack = 'abc' matches = [[0, 0], [1, 1], [2, 2], [3, 3]] [[test]] name = "empty9" regex = 'z|(?:)+' haystack = 'abc' matches = [[0, 0], [1, 1], [2, 2], [3, 3]] [[test]] name = "empty10" regex = '(?:)+|b' haystack = 'abc' matches = [[0, 0], [1, 1], [2, 2], [3, 3]] [[test]] name = "empty11" regex = 'b|(?:)+' haystack = 'abc' matches = [[0, 0], [1, 2], [3, 3]] [[test]] name = "start1" regex = "^a" haystack = "a" matches = [[0, 1]] [[test]] name = "start2" regex = "^a" haystack = "aa" matches = [[0, 1]] [[test]] name = "anchored1" regex = "a" haystack = "a" matches = [[0, 1]] anchored = true # This test is pretty subtle. It demonstrates the crucial difference between # '^a' and 'a' compiled in 'anchored' mode. The former regex exclusively # matches at the start of a haystack and nowhere else. The latter regex has # no such restriction, but its automaton is constructed such that it lacks a # `.*?` prefix. So it can actually produce matches at multiple locations. # The anchored3 test drives this point home. [[test]] name = "anchored2" regex = "a" haystack = "aa" matches = [[0, 1], [1, 2]] anchored = true # Unlikely anchored2, this test stops matching anything after it sees `b` # since it lacks a `.*?` prefix. Since it is looking for 'a' but sees 'b', it # determines that there are no remaining matches. [[test]] name = "anchored3" regex = "a" haystack = "aaba" matches = [[0, 1], [1, 2]] anchored = true [[test]] name = "nonempty-followedby-empty" regex = 'abc|.*?' haystack = "abczzz" matches = [[0, 3], [4, 4], [5, 5], [6, 6]] [[test]] name = "nonempty-followedby-oneempty" regex = 'abc|.*?' haystack = "abcz" matches = [[0, 3], [4, 4]] [[test]] name = "nonempty-followedby-onemixed" regex = 'abc|.*?' haystack = "abczabc" matches = [[0, 3], [4, 7]] [[test]] name = "nonempty-followedby-twomixed" regex = 'abc|.*?' haystack = "abczzabc" matches = [[0, 3], [4, 4], [5, 8]]