#AUTHOR: Dr. Alistair Ward #DESCRIPTION: Designed to be read by the module "FunctionAlley.RegExChar.Assert.RegExOptsChar". #Based on ("abracadabra$", [("abracadabracadabra", [(7,11)])]) ("a...b", [("abababbb", [(2,5)])]) ("XXXXXX", [("..XXXXXX", [(2,6)])]) ("\\)", [("()", [(1,1)])]) ("a]", [("a]a", [(0,2)])]) ("\\}", [("}", [(0,1)])]) ("\\]", [("]", [(0,1)])]) ("]", [("]", [(0,1)])]) #("{", [("{", [(0,1)])]) #Text.Regex.Posix dies on this. ("}", [("}", [(0,1)])]) ("^a", [("ax", [(0,1)])]) ("\\^a", [("a^a", [(1,2)])]) ("a\\^", [("a^", [(0,2)])]) ("a$", [("aa", [(1,1)])]) ("a\\$", [("a$", [(0,2)])]) ("^$", [("", [(0,0)])]) ("$^", [("", [(0,0)])]) ("a($)", [("aa", [(1,1),(2,0)])]) ("a*(^a)", [("aa", [(0,1),(0,1)])]) ("(..)*(...)*", [("a", [(0,0)]), ("abcd", [(0,4),(2,2)])]) #1st test returns [(0,0),(0,0),(0,0)] (presumable the /last/ match of the repeatable group doesn't exist). ("(ab|a)(bc|c)", [("abc", [(0,3),(0,2),(2,1)])]) ("(ab)c|abc", [("abc", [(0,3),(0,2)])]) #Returns [(0,3)] (wrong choice amongst potential matches). ("a{0}b", [("ab", [(1,1)])]) ("(a*)(b?)(b+)b{3}", [("aaabbbbbbb", [(0,10),(0,3),(3,1),(4,3)])]) ("(a*)(b{0,1})(b{1,})b{3}", [("aaabbbbbbb", [(0,10),(0,3),(3,1),(4,3)])]) ("((a|a)|a)", [("a", [(0,1),(0,1),(0,1)])]) #Returns [(0,1),(0,1)] (wrong choice amongst potential matches). ("(a*)(a|aa)", [("aaaa", [(0,4),(0,3),(3,1)])]) ("a*(a.|aa)", [("aaaa", [(0,4),(2,2)])]) ("a(b)|c(d)|a(e)f", [("aef", [(0,3),(1,1)])]) ("(a|b)?.*", [("b", [(0,1),(0,1)])]) ("(a|b)c|a(b|c)", [("ac", [(0,2),(0,1)]), ("ab", [(0,2),(1,1)])]) #1st test returns [(0,2),(1,1)] (wrong choice amongst potential matches). ("(a|b)*c|(a|ab)*c", [("abc", [(0,3),(1,1)]), ("xc", [(1,1)])]) #1st test returns [(0,3),(0,2)] (by selecting the 2nd alternative). ("(.a|.b).*|.*(.a|.b)", [("xa", [(0,2),(0,2)])]) ("a?(ab|ba)ab", [("abab", [(0,4),(0,2)])]) ("a?(ac{0}b|ba)ab", [("abab", [(0,4),(0,2)])]) ("ab|abab", [("abbabab", [(0,2)])]) ("aba|bab|bba", [("baaabbbaba", [(5,3)])]) ("aba|bab", [("baaabbbaba", [(6,3)])]) ("(aa|aaa)*|(a|aaaaa)", [("aa", [(0,2),(0,2)])]) ("(a.|.a.)*|(a|.a...)", [("aa", [(0,2),(0,2)])]) ("ab|a", [("xabc", [(1,2)]), ("xxabc", [(2,2)])]) #("(Ab|cD)*", [("aBcD", [(0,4),(2,2)])]) #Relies on case-insensitivity. ("[^-]", [("--a", [(2,1)])]) ("[a-]*", [("--a", [(0,3)])]) ("[a-m-]*", [("--amoma--", [(0,4)])]) (":::1:::0:|:::1:1:0:", [(":::0:::1:::1:::0:", [(8,9)])]) (":::1:::0:|:::1:1:1:", [(":::0:::1:::1:::0:", [(8,9)])]) ("[[:upper:]]", [("A", [(0,1)])]) ("[[:lower:]]+", [("`az{", [(1,2)])]) ("[[:upper:]]+", [("@AZ[", [(1,2)])]) ("[[-]]", [("[[-]]", [(2,2)])]) ("\n", [("\n", [(0,1)])]) ("[^a]", [("\n", [(0,1)])]) ("\na", [("\na", [(0,2)])]) ("(a)(b)(c)", [("abc", [(0,3),(0,1),(1,1),(2,1)])]) ("xxx", [("xxx", [(0,3)])]) ("(^|[ (,;])((([Ff]eb[^ ]* *|0*2/|\\* */?)0*[6-7]))([^0-9]|$)", [("feb 6,", [(0,6),(0,0),(0,5),(0,5),(0,4),(5,1)]), ("2/7", [(0,3),(0,0),(0,3),(0,3),(0,2),(3,0)]), ("feb 1,Feb 6", [(5,6),(5,1),(6,5),(6,5),(6,4),(11,0)])]) ("((((((((((((((((((((((((((((((x))))))))))))))))))))))))))))))", [("x", [(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1)])]) ("((((((((((((((((((((((((((((((x))))))))))))))))))))))))))))))*", [("xx", [(0,2),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1)])]) ("a?(ab|ba)*", [("ababababababababababababababababababababababababababababababababababababababababa", [(0,81),(79,2)])]) ("abaa|abbaa|abbbaa|abbbbaa", [("ababbabbbabbbabbbbabbbbaa", [(18,7)]), ("ababbabbbabbbabbbbabaa", [(18,4)])]) ("aaac|aabc|abac|abbc|baac|babc|bbac|bbbc", [("baaabbbabac", [(7,4)])]) (".*", [("\x01\xff", [(0,2)])]) ("aaaa|bbbb|cccc|ddddd|eeeeee|fffffff|gggg|hhhh|iiiii|jjjjj|kkkkk|llll", [("XaaaXbbbXcccXdddXeeeXfffXgggXhhhXiiiXjjjXkkkXlllXcbaXaaaa", [(53,4)])]) ("a*a*a*a*a*b", [("aaaaaaaaab", [(0,10)])]) ("^", [("", [(0,0)]), ("abc", [(0,0)])]) ("$", [("", [(0,0)]), ("abc", [(3,0)])]) ("^$", [("", [(0,0)])]) ("^a$", [("a", [(0,1)])]) ("abc", [("abc", [(0,3)]), ("xabcy", [(1,3)]), ("ababc", [(2,3)])]) ("ab*c", [("abc", [(0,3)])]) ("ab*bc", [("abc", [(0,3)]), ("abbc", [(0,4)]), ("abbbbc", [(0,6)])]) ("ab+bc", [("abbc", [(0,4)]), ("abbbbc", [(0,6)])]) ("ab?bc", [("abbc", [(0,4)]), ("abc", [(0,3)])]) ("ab?c", [("abc", [(0,3)])]) ("^abc$", [("abc", [(0,3)])]) ("^abc", [("abcc", [(0,3)])]) ("abc$", [("aabc", [(1,3)])]) ("a.c", [("abc", [(0,3)]), ("axc", [(0,3)])]) ("a.*c", [("axyzc", [(0,5)])]) ("a[bc]d", [("abd", [(0,3)])]) ("a[b-d]e", [("ace", [(0,3)])]) ("a[b-d]", [("aac", [(1,2)])]) ("a[-b]", [("a-", [(0,2)])]) ("a[b-]", [("a-", [(0,2)])]) ("a]", [("a]", [(0,2)])]) ("a[]]b", [("a]b", [(0,3)])]) ("a[^bc]d", [("aed", [(0,3)])]) ("a[^-b]c", [("adc", [(0,3)])]) ("a[^]b]c", [("adc", [(0,3)])]) ("ab|cd", [("abc", [(0,2)]), ("abcd", [(0,2)])]) ("a\\(b", [("a(b", [(0,3)])]) ("a\\(*b", [("ab", [(0,2)]), ("a((b", [(0,4)])]) ("((a))", [("abc", [(0,1),(0,1),(0,1)])]) ("(a)b(c)", [("abc", [(0,3),(0,1),(2,1)])]) ("a+b+c", [("aabbabc", [(4,3)])]) ("a*", [("aaa", [(0,3)])]) ("(a*)*", [("-", [(0,0),(0,0)])]) ("(a*)+", [("-", [(0,0),(0,0)])]) ("(a*|b)*", [("-", [(0,0),(0,0)])]) ("(a+|b)*", [("ab", [(0,2),(1,1)])]) ("(a+|b)+", [("ab", [(0,2),(1,1)])]) ("(a+|b)?", [("ab", [(0,1),(0,1)])]) ("[^ab]*", [("cde", [(0,3)])]) ("(^)*", [("-", [(0,0),(0,0)])]) ("a*", [("", [(0,0)])]) ("([abc])*d", [("abbbcd", [(0,6),(4,1)])]) ("([abc])*bcd", [("abcd", [(0,4),(0,1)])]) ("a|b|c|d|e", [("e", [(0,1)])]) ("(a|b|c|d|e)f", [("ef", [(0,2),(0,1)])]) ("((a*|b))*", [("-", [(0,0),(0,0),(0,0)])]) ("abcd*efg", [("abcdefg", [(0,7)])]) ("ab*", [("xabyabbbz", [(1,2)]), ("xayabbbz", [(1,1)])]) ("(ab|cd)e", [("abcde", [(2,3),(2,2)])]) ("[abhgefdc]ij", [("hij", [(0,3)])]) ("(a|b)c*d", [("abcd", [(1,3),(1,1)])]) ("(ab|ab*)bc", [("abc", [(0,3),(0,1)])]) ("a([bc]*)c*", [("abc", [(0,3),(1,2)])]) ("a([bc]*)(c*d)", [("abcd", [(0,4),(1,2),(3,1)])]) ("a([bc]+)(c*d)", [("abcd", [(0,4),(1,2),(3,1)])]) ("a([bc]*)(c+d)", [("abcd", [(0,4),(1,1),(2,2)])]) ("a[bcd]*dcdcde", [("adcdcde", [(0,7)])]) ("(ab|a)b*c", [("abc", [(0,3),(0,2)])]) ("((a)(b)c)(d)", [("abcd", [(0,4),(0,3),(0,1),(1,1),(3,1)])]) ("[A-Za-z_][A-Za-z0-9_]*", [("alpha", [(0,5)])]) ("^a(bc+|b[eh])g|.h$", [("abh", [(1,2)])]) ("(bc+d$|ef*g.|h?i(j|k))", [("effgz", [(0,5),(0,5)]), ("ij", [(0,2),(0,2),(1,1)]), ("reffgz", [(1,5),(1,5)])]) ("(((((((((a)))))))))", [("a", [(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1),(0,1)])]) ("multiple words", [("multiple words yeah", [(0,14)])]) ("(.*)c(.*)", [("abcde", [(0,5),(0,2),(3,2)])]) ("abcd", [("abcd", [(0,4)])]) ("a(bc)d", [("abcd", [(0,4),(1,2)])]) ("a[-]?c", [("ac", [(0,3)])]) ("M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]", [("Muammar Qaddafi", [(0,15),(-1,0),(10,2)]), ("Mo'ammar Gadhafi", [(0,16),(-1,0),(11,2)]), ("Muammar Kaddafi", [(0,15),(-1,0),(10,2)]), ("Muammar Qadhafi", [(0,15),(-1,0),(10,2)]), ("Muammar Gadafi", [(0,14),(-1,0),(10,1)]), ("Mu'ammar Qadafi", [(0,15),(-1,0),(11,1)]), ("Moamar Gaddafi", [(0,14),(-1,0),(9,2)]), ("Mu'ammar Qadhdhafi", [(0,18),(-1,0),(13,2)]), ("Muammar Khaddafi", [(0,16),(-1,0),(11,2)]), ("Muammar Ghaddafy", [(0,16),(-1,0),(11,2)]), ("Muammar Ghadafi", [(0,15),(-1,0),(11,1)]), ("Muammar Ghaddafi", [(0,16),(-1,0),(11,2)]), ("Muamar Kaddafi", [(0,14),(-1,0),(9,2)]), ("Muammar Quathafi", [(0,16),(-1,0),(11,2)]), ("Muammar Gheddafi", [(0,16),(-1,0),(11,2)]), ("Moammar Khadafy", [(0,15),(-1,0),(11,1)]), ("Moammar Qudhafi", [(0,15),(-1,0),(10,2)])]) ("a+(b|c)*d+", [("aabcdd", [(0,6),(3,1)])]) ("^.+$", [("vivi", [(0,4)])]) ("^(.+)$", [("vivi", [(0,4),(0,4)])]) ("^([^!.]+).att.com!(.+)$", [("gryphon.att.com!eby", [(0,19),(0,7),(16,3)])]) ("^([^!]+!)?([^!]+)$", [("bas", [(0,3),(-1,0),(0,3)]), ("bar!bas", [(0,7),(0,4),(4,3)]), ("foo!bas", [(0,7),(0,4),(4,3)])]) ("^.+!([^!]+!)([^!]+)$", [("foo!bar!bas", [(0,11),(4,4),(8,3)])]) ("((foo)|(bar))!bas", [("bar!bas", [(0,7),(0,3),(-1,0),(0,3)]), ("foo!bar!bas", [(4,7),(4,3),(-1,0),(4,3)]), ("foo!bas", [(0,7),(0,3),(0,3)])]) #NULL matches aren't found in 1st two tests. ("((foo)|bar)!bas", [("bar!bas", [(0,7),(0,3)]), ("foo!bar!bas", [(4,7),(4,3)]), ("foo!bas", [(0,7),(0,3),(0,3)])]) ("(foo|(bar))!bas", [("bar!bas", [(0,7),(0,3),(0,3)]), ("foo!bar!bas", [(4,7),(4,3),(4,3)]), ("foo!bas", [(0,7),(0,3)])]) ("(foo|bar)!bas", [("bar!bas", [(0,7),(0,3)]), ("foo!bar!bas", [(4,7),(4,3)]), ("foo!bas", [(0,7),(0,3)])]) ("^(([^!]+!)?([^!]+)|.+!([^!]+!)([^!]+))$", [("bas", [(0,3),(0,3),(0,0),(0,3)]), ("bar!bas", [(0,7),(0,7),(0,4),(4,3)]), ("foo!bar!bas", [(0,11),(0,11),(0,0),(0,0),(4,4),(8,3)]), ("foo!bas", [(0,7),(0,7),(0,4),(4,3)])]) #4th fails; doesn't capture NULL groups defined in unselected (1st) alternative. ("^([^!]+!)?([^!]+)$|^.+!([^!]+!)([^!]+)$", [("bas", [(0,3),(-1,0),(0,3)]), ("bar!bas", [(0,7),(0,4),(4,3)]), ("foo!bar!bas", [(0,11),(1,0),(-1,0),(4,4),(8,3)]), ("foo!bas", [(0,7),(0,4),(4,3)])]) #3rd fails. (".*(/XXX).*", [("/XXX", [(0,4),(0,4)])]) (".*(\\\\XXX).*", [("\\XXX", [(0,4),(0,4)])]) ("\\\\XXX", [("\\XXX", [(0,4)])]) (".*(/000).*", [("/000", [(0,4),(0,4)])]) (".*(\\\\000).*", [("\\000", [(0,4),(0,4)])]) ("\\\\000", [("\\000", [(0,4)])])