pcre-light-0.1: tests/testdata/regex7.tests
testRegex "abc" []
["abc",
"",
"/ab*c/",
"abc",
"abbbbc",
"ac",
"",
"/ab+c/",
"abc",
"abbbbbbc",
"*** Failers ",
"ac",
"ab",
"",
"/a*/",
"a",
"aaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\F ",
"",
"/(a|abcd|african)/",
"a",
"abcd",
"african",
"",
"/^abc/",
"abcdef",
"*** Failers",
"xyzabc",
"xyz\\nabc ",
"",
"/^abc/m",
"abcdef",
"xyz\\nabc ",
"*** Failers",
"xyzabc",
"",
"/\\Aabc/",
"abcdef",
"*** Failers",
"xyzabc",
"xyz\\nabc ",
"",
"/\\Aabc/m",
"abcdef",
"*** Failers",
"xyzabc",
"xyz\\nabc ",
"",
"/\\Gabc/",
"abcdef",
"xyzabc\\>3",
"*** Failers",
"xyzabc ",
"xyzabc\\>2 ",
"",
"/x\\dy\\Dz/",
"x9yzz",
"x0y+z",
"*** Failers",
"xyz",
"xxy0z ",
"",
"/x\\sy\\Sz/",
"x yzz",
"x y+z",
"*** Failers",
"xyz",
"xxyyz",
"",
"/x\\wy\\Wz/",
"xxy+z",
"*** Failers",
"xxy0z",
"x+y+z ",
"",
"/x.y/",
"x+y",
"x-y",
"*** Failers",
"x\\ny",
"",
"/x.y/s",
"x+y",
"x-y",
"x\\ny"]
[Just [" 0: abc"],
Just ["/ab*c/"],
Just [" 0: abc"],
Just [" 0: abbbbc"],
Just [" 0: ac"],
Just ["/ab+c/"],
Just [" 0: abc"],
Just [" 0: abbbbbbc"],
Nothing,
Nothing,
Nothing,
Just ["/a*/"],
Just [" 0: a"],
Just [" 1: "],
Just [" 0: aaaaaaaaaaaaaaaaa"],
Just [" 1: aaaaaaaaaaaaaaaa"],
Just [" 2: aaaaaaaaaaaaaaa"],
Just [" 3: aaaaaaaaaaaaaa"],
Just [" 4: aaaaaaaaaaaaa"],
Just [" 5: aaaaaaaaaaaa"],
Just [" 6: aaaaaaaaaaa"],
Just [" 7: aaaaaaaaaa"],
Just [" 8: aaaaaaaaa"],
Just [" 9: aaaaaaaa"],
Just ["10: aaaaaaa"],
Just ["11: aaaaaa"],
Just ["12: aaaaa"],
Just ["13: aaaa"],
Just ["14: aaa"],
Just ["15: aa"],
Just ["16: a"],
Just ["17: "],
Just ["Matched, but too many subsidiary matches"],
Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
Just [" 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
Just [" 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
Just [" 3: aaaaaaaaaaaaaaaaaaaaaaaaaaa"],
Just [" 4: aaaaaaaaaaaaaaaaaaaaaaaaaa"],
Just [" 5: aaaaaaaaaaaaaaaaaaaaaaaaa"],
Just [" 6: aaaaaaaaaaaaaaaaaaaaaaaa"],
Just [" 7: aaaaaaaaaaaaaaaaaaaaaaa"],
Just [" 8: aaaaaaaaaaaaaaaaaaaaaa"],
Just [" 9: aaaaaaaaaaaaaaaaaaaaa"],
Just ["10: aaaaaaaaaaaaaaaaaaaa"],
Just ["11: aaaaaaaaaaaaaaaaaaa"],
Just ["12: aaaaaaaaaaaaaaaaaa"],
Just ["13: aaaaaaaaaaaaaaaaa"],
Just ["14: aaaaaaaaaaaaaaaa"],
Just ["15: aaaaaaaaaaaaaaa"],
Just ["16: aaaaaaaaaaaaaa"],
Just ["17: aaaaaaaaaaaaa"],
Just ["18: aaaaaaaaaaaa"],
Just ["19: aaaaaaaaaaa"],
Just ["20: aaaaaaaaaa"],
Just ["21: aaaaaaaaa"],
Just [" 0: "],
Just ["/(a|abcd|african)/"],
Just [" 0: a"],
Just [" 0: abcd"],
Just [" 1: a"],
Just [" 0: african"],
Just [" 1: a"],
Just ["/^abc/"],
Just [" 0: abc"],
Nothing,
Nothing,
Nothing,
Just ["/^abc/m"],
Just [" 0: abc"],
Just [" 0: abc"],
Nothing,
Nothing,
Just ["/\\Aabc/"],
Just [" 0: abc"],
Nothing,
Nothing,
Nothing,
Just ["/\\Aabc/m"],
Just [" 0: abc"],
Nothing,
Nothing,
Nothing,
Just ["/\\Gabc/"],
Just [" 0: abc"],
Just [" 0: abc"],
Nothing,
Nothing,
Nothing,
Just ["/x\\dy\\Dz/"],
Just [" 0: x9yzz"],
Just [" 0: x0y+z"],
Nothing,
Nothing,
Nothing,
Just ["/x\\sy\\Sz/"],
Just [" 0: x yzz"],
Just [" 0: x y+z"],
Nothing,
Nothing,
Nothing,
Just ["/x\\wy\\Wz/"],
Just [" 0: xxy+z"],
Nothing,
Nothing,
Nothing,
Just ["/x.y/"],
Just [" 0: x+y"],
Just [" 0: x-y"],
Nothing,
Nothing,
Just ["/x.y/s"],
Just [" 0: x+y"],
Just [" 0: x-y"],
Just [" 0: x\\x0ay"]]
,
testRegex "(a.b(?s)c.d|x.y)p.q" []
["a+bc+dp+q",
"a+bc\\ndp+q",
"x\\nyp+q ",
"*** Failers ",
"a\\nbc\\ndp+q",
"a+bc\\ndp\\nq",
"x\\nyp\\nq "]
[Just [" 0: a+bc+dp+q"],
Just [" 0: a+bc\\x0adp+q"],
Just [" 0: x\\x0ayp+q"],
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "a\\d\\z" []
["ba0",
"*** Failers",
"ba0\\n",
"ba0\\ncd "]
[Just [" 0: a0"],
Nothing,
Nothing,
Nothing]
,
testRegex "a\\d\\z" [ERROR]
["ba0",
"*** Failers",
"ba0\\n",
"ba0\\ncd "]
[Just [" 0: a0"],
Nothing,
Nothing,
Nothing]
,
testRegex "a\\d\\Z" []
["ba0",
"ba0\\n",
"*** Failers",
"ba0\\ncd "]
[Just [" 0: a0"],
Just [" 0: a0"],
Nothing,
Nothing]
,
testRegex "a\\d\\Z" [ERROR]
["ba0",
"ba0\\n",
"*** Failers",
"ba0\\ncd "]
[Just [" 0: a0"],
Just [" 0: a0"],
Nothing,
Nothing]
,
testRegex "a\\d$" []
["ba0",
"ba0\\n",
"*** Failers",
"ba0\\ncd "]
[Just [" 0: a0"],
Just [" 0: a0"],
Nothing,
Nothing]
,
testRegex "a\\d$" [ERROR]
["ba0",
"ba0\\n",
"ba0\\ncd ",
"*** Failers"]
[Just [" 0: a0"],
Just [" 0: a0"],
Just [" 0: a0"],
Nothing]
,
testRegex "abc" [caseless]
["abc",
"aBc",
"ABC",
"",
"/[^a]/",
"abcd",
"",
"/ab?\\w/",
"abz",
"abbz",
"azz "]
[Just [" 0: abc"],
Just [" 0: aBc"],
Just [" 0: ABC"],
Just ["/[^a]/"],
Just [" 0: b"],
Just ["/ab?\\w/"],
Just [" 0: abz"],
Just [" 1: ab"],
Just [" 0: abb"],
Just [" 1: ab"],
Just [" 0: az"]]
,
testRegex "x{0,3}yz" []
["ayzq",
"axyzq",
"axxyz",
"axxxyzq",
"axxxxyzq",
"*** Failers",
"ax",
"axx ",
"",
"/x{3}yz/",
"axxxyzq",
"axxxxyzq",
"*** Failers",
"ax",
"axx ",
"ayzq",
"axyzq",
"axxyz",
"",
"/x{2,3}yz/",
"axxyz",
"axxxyzq",
"axxxxyzq",
"*** Failers",
"ax",
"axx ",
"ayzq",
"axyzq",
"",
"/[^a]+/",
"bac",
"bcdefax",
"*** Failers",
"aaaaa "]
[Just [" 0: yz"],
Just [" 0: xyz"],
Just [" 0: xxyz"],
Just [" 0: xxxyz"],
Just [" 0: xxxyz"],
Nothing,
Nothing,
Nothing,
Just ["/x{3}yz/"],
Just [" 0: xxxyz"],
Just [" 0: xxxyz"],
Nothing,
Nothing,
Nothing,
Nothing,
Nothing,
Nothing,
Just ["/x{2,3}yz/"],
Just [" 0: xxyz"],
Just [" 0: xxxyz"],
Just [" 0: xxxyz"],
Nothing,
Nothing,
Nothing,
Nothing,
Nothing,
Just ["/[^a]+/"],
Just [" 0: b"],
Just [" 0: bcdef"],
Just [" 1: bcde"],
Just [" 2: bcd"],
Just [" 3: bc"],
Just [" 4: b"],
Just [" 0: *** F"],
Just [" 1: *** "],
Just [" 2: ***"],
Just [" 3: **"],
Just [" 4: *"],
Nothing]
,
testRegex "[^a]*" []
["bac",
"bcdefax",
"*** Failers",
"aaaaa ",
"",
"/[^a]{3,5}/",
"xyz",
"awxyza",
"abcdefa",
"abcdefghijk",
"*** Failers",
"axya",
"axa",
"aaaaa "]
[Just [" 0: b"],
Just [" 1: "],
Just [" 0: bcdef"],
Just [" 1: bcde"],
Just [" 2: bcd"],
Just [" 3: bc"],
Just [" 4: b"],
Just [" 5: "],
Just [" 0: *** F"],
Just [" 1: *** "],
Just [" 2: ***"],
Just [" 3: **"],
Just [" 4: *"],
Just [" 5: "],
Just [" 0: "],
Just ["/[^a]{3,5}/"],
Just [" 0: xyz"],
Just [" 0: wxyz"],
Just [" 1: wxy"],
Just [" 0: bcdef"],
Just [" 1: bcde"],
Just [" 2: bcd"],
Just [" 0: bcdef"],
Just [" 1: bcde"],
Just [" 2: bcd"],
Just [" 0: *** F"],
Just [" 1: *** "],
Just [" 2: ***"],
Nothing,
Nothing,
Nothing]
,
testRegex "\\d*" []
["1234b567",
"xyz",
"",
"/\\D*/",
"a1234b567",
"xyz",
"",
"/\\d+/",
"ab1234c56",
"*** Failers",
"xyz",
"",
"/\\D+/",
"ab123c56",
"*** Failers",
"789",
"",
"/\\d?A/",
"045ABC",
"ABC",
"*** Failers",
"XYZ",
"",
"/\\D?A/",
"ABC",
"BAC",
"9ABC ",
"*** Failers"]
[Just [" 0: 1234"],
Just [" 1: 123"],
Just [" 2: 12"],
Just [" 3: 1"],
Just [" 4: "],
Just [" 0: "],
Just ["/\\D*/"],
Just [" 0: a"],
Just [" 1: "],
Just [" 0: xyz"],
Just [" 1: xy"],
Just [" 2: x"],
Just [" 3: "],
Just ["/\\d+/"],
Just [" 0: 1234"],
Just [" 1: 123"],
Just [" 2: 12"],
Just [" 3: 1"],
Nothing,
Nothing,
Just ["/\\D+/"],
Just [" 0: ab"],
Just [" 1: a"],
Just [" 0: *** Failers"],
Just [" 1: *** Failer"],
Just [" 2: *** Faile"],
Just [" 3: *** Fail"],
Just [" 4: *** Fai"],
Just [" 5: *** Fa"],
Just [" 6: *** F"],
Just [" 7: *** "],
Just [" 8: ***"],
Just [" 9: **"],
Just ["10: *"],
Nothing,
Just ["/\\d?A/"],
Just [" 0: 5A"],
Just [" 0: A"],
Nothing,
Nothing,
Just ["/\\D?A/"],
Just [" 0: A"],
Just [" 0: BA"],
Just [" 0: A"],
Nothing]
,
testRegex "a+" []
["aaaa"]
[Just [" 0: aaaa"],
Just [" 1: aaa"],
Just [" 2: aa"],
Just [" 3: a"]]
,
testRegex "^.*xyz" []
["xyz",
"ggggggggxyz",
"",
"/^.+xyz/",
"abcdxyz",
"axyz",
"*** Failers",
"xyz",
"",
"/^.?xyz/",
"xyz",
"cxyz "]
[Just [" 0: xyz"],
Just [" 0: ggggggggxyz"],
Just ["/^.+xyz/"],
Just [" 0: abcdxyz"],
Just [" 0: axyz"],
Nothing,
Nothing,
Just ["/^.?xyz/"],
Just [" 0: xyz"],
Just [" 0: cxyz"]]
,
testRegex "^\\d{2,3}X" []
["12X",
"123X",
"*** Failers",
"X",
"1X",
"1234X "]
[Just [" 0: 12X"],
Just [" 0: 123X"],
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "^[abcd]\\d" []
["a45",
"b93",
"c99z",
"d04",
"*** Failers",
"e45",
"abcd ",
"abcd1234",
"1234 "]
[Just [" 0: a4"],
Just [" 0: b9"],
Just [" 0: c9"],
Just [" 0: d0"],
Nothing,
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "^[abcd]*\\d" []
["a45",
"b93",
"c99z",
"d04",
"abcd1234",
"1234 ",
"*** Failers",
"e45",
"abcd "]
[Just [" 0: a4"],
Just [" 0: b9"],
Just [" 0: c9"],
Just [" 0: d0"],
Just [" 0: abcd1"],
Just [" 0: 1"],
Nothing,
Nothing,
Nothing]
,
testRegex "^[abcd]+\\d" []
["a45",
"b93",
"c99z",
"d04",
"abcd1234",
"*** Failers",
"1234 ",
"e45",
"abcd "]
[Just [" 0: a4"],
Just [" 0: b9"],
Just [" 0: c9"],
Just [" 0: d0"],
Just [" 0: abcd1"],
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "^a+X" []
["aX",
"aaX "]
[Just [" 0: aX"],
Just [" 0: aaX"]]
,
testRegex "^[abcd]?\\d" []
["a45",
"b93",
"c99z",
"d04",
"1234 ",
"*** Failers",
"abcd1234",
"e45"]
[Just [" 0: a4"],
Just [" 0: b9"],
Just [" 0: c9"],
Just [" 0: d0"],
Just [" 0: 1"],
Nothing,
Nothing,
Nothing]
,
testRegex "^[abcd]{2,3}\\d" []
["ab45",
"bcd93",
"*** Failers",
"1234 ",
"a36 ",
"abcd1234",
"ee45"]
[Just [" 0: ab4"],
Just [" 0: bcd9"],
Nothing,
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "^(abc)*\\d" []
["abc45",
"abcabcabc45",
"42xyz ",
"*** Failers"]
[Just [" 0: abc4"],
Just [" 0: abcabcabc4"],
Just [" 0: 4"],
Nothing]
,
testRegex "^(abc)+\\d" []
["abc45",
"abcabcabc45",
"*** Failers",
"42xyz "]
[Just [" 0: abc4"],
Just [" 0: abcabcabc4"],
Nothing,
Nothing]
,
testRegex "^(abc)?\\d" []
["abc45",
"42xyz ",
"*** Failers",
"abcabcabc45"]
[Just [" 0: abc4"],
Just [" 0: 4"],
Nothing,
Nothing]
,
testRegex "^(abc){2,3}\\d" []
["abcabc45",
"abcabcabc45",
"*** Failers",
"abcabcabcabc45",
"abc45",
"42xyz "]
[Just [" 0: abcabc4"],
Just [" 0: abcabcabc4"],
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "1(abc|xyz)2(?1)3" []
["1abc2abc3456",
"1abc2xyz3456 "]
[Just [" 0: 1abc2abc3"],
Just [" 0: 1abc2xyz3"]]
,
testRegex "^(a*\\w|ab)=(a*\\w|ab)" []
["ab=ab"]
[Just [" 0: ab=ab"],
Just [" 1: ab=a"]]
,
testRegex "^(a*\\w|ab)=(?1)" []
["ab=ab"]
[Just [" 0: ab=ab"]]
,
testRegex "^([^()]|\\((?1)*\\))*$" []
["abc",
"a(b)c",
"a(b(c))d ",
"*** Failers)",
"a(b(c)d "]
[Just [" 0: abc"],
Just [" 0: a(b)c"],
Just [" 0: a(b(c))d"],
Nothing,
Nothing]
,
testRegex "^>abc>([^()]|\\((?1)*\\))*<xyz<$" []
[">abc>123<xyz<",
">abc>1(2)3<xyz<",
">abc>(1(2)3)<xyz<"]
[Just [" 0: >abc>123<xyz<"],
Just [" 0: >abc>1(2)3<xyz<"],
Just [" 0: >abc>(1(2)3)<xyz<"]]
,
testRegex "^(?>a*)\\d" []
["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9876",
"*** Failers ",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
[Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9"],
Nothing,
Nothing]
,
testRegex "< (?: (?(R) \\d++ | [^<>]*+) | (?R)) * >" [ERROR]
["<>",
"<abcd>",
"<abc <123> hij>",
"<abc <def> hij>",
"<abc<>def> ",
"<abc<> ",
"*** Failers",
"<abc"]
[Just [" 0: <>"],
Just [" 0: <abcd>"],
Just [" 0: <abc <123> hij>"],
Just [" 0: <def>"],
Just [" 0: <abc<>def>"],
Just [" 0: <>"],
Nothing,
Nothing]
,
testRegex "^(?(?=abc)\\w{3}:|\\d\\d)$" [ERROR]
["abc: ",
"12 ",
"*** Failers ",
"123 ",
"xyz ",
"",
"/^(?(?!abc)\\d\\d|\\w{3}:)$/ ",
"abc: ",
"12 ",
"*** Failers",
"123",
"xyz "]
[Just [" 0: abc:"],
Just [" 0: 12"],
Nothing,
Nothing,
Nothing,
Just ["/^(?(?!abc)\\d\\d|\\w{3}:)$/ "],
Just [" 0: abc:"],
Just [" 0: 12"],
Nothing,
Nothing,
Nothing]
,
testRegex "^(?=abc)\\w{5}:$" [ERROR]
["abcde: ",
"*** Failers ",
"abc.. ",
"123 ",
"vwxyz ",
"",
"/^(?!abc)\\d\\d$/ ",
"12 ",
"*** Failers",
"abcde:",
"abc.. ",
"123",
"vwxyz "]
[Just [" 0: abcde:"],
Nothing,
Nothing,
Nothing,
Nothing,
Just ["/^(?!abc)\\d\\d$/ "],
Just [" 0: 12"],
Nothing,
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "(?<=abc|xy)123" []
["abc12345",
"wxy123z",
"*** Failers",
"123abc"]
[Just [" 0: 123"],
Just [" 0: 123"],
Nothing,
Nothing]
,
testRegex "(?<!abc|xy)123" []
["123abc",
"mno123456 ",
"*** Failers",
"abc12345",
"wxy123z"]
[Just [" 0: 123"],
Just [" 0: 123"],
Nothing,
Nothing,
Nothing]
,
testRegex "abc(?C1)xyz" []
["abcxyz",
"123abcxyz999 "]
[Just ["--->abcxyz"],
Just [" 0: abcxyz"],
Just ["--->123abcxyz999"],
Just [" 0: abcxyz"]]
,
testRegex "(ab|cd){3,4}" [ERROR]
["ababab",
"abcdabcd",
"abcdcdcdcdcd "]
[Just ["--->ababab"],
Just [" +0 ^ (ab|cd){3,4}"],
Just [" +1 ^ a"],
Just [" +4 ^ c"],
Just [" +2 ^^ b"],
Just [" +3 ^ ^ |"],
Just [" +1 ^ ^ a"],
Just [" +4 ^ ^ c"],
Just [" +2 ^ ^ b"],
Just [" +3 ^ ^ |"],
Just [" +1 ^ ^ a"],
Just [" +4 ^ ^ c"],
Just [" +2 ^ ^ b"],
Just [" +3 ^ ^ |"],
Just ["+12 ^ ^ "],
Just [" +1 ^ ^ a"],
Just [" +4 ^ ^ c"],
Just [" 0: ababab"],
Just ["--->abcdabcd"],
Just [" +0 ^ (ab|cd){3,4}"],
Just [" +1 ^ a"],
Just [" +4 ^ c"],
Just [" +2 ^^ b"],
Just [" +3 ^ ^ |"],
Just [" +1 ^ ^ a"],
Just [" +4 ^ ^ c"],
Just [" +5 ^ ^ d"],
Just [" +6 ^ ^ )"],
Just [" +1 ^ ^ a"],
Just [" +4 ^ ^ c"],
Just [" +2 ^ ^ b"],
Just [" +3 ^ ^ |"],
Just ["+12 ^ ^ "],
Just [" +1 ^ ^ a"],
Just [" +4 ^ ^ c"],
Just [" +5 ^ ^ d"],
Just [" +6 ^ ^ )"],
Just ["+12 ^ ^ "],
Just [" 0: abcdabcd"],
Just [" 1: abcdab"],
Just ["--->abcdcdcdcdcd"],
Just [" +0 ^ (ab|cd){3,4}"],
Just [" +1 ^ a"],
Just [" +4 ^ c"],
Just [" +2 ^^ b"],
Just [" +3 ^ ^ |"],
Just [" +1 ^ ^ a"],
Just [" +4 ^ ^ c"],
Just [" +5 ^ ^ d"],
Just [" +6 ^ ^ )"],
Just [" +1 ^ ^ a"],
Just [" +4 ^ ^ c"],
Just [" +5 ^ ^ d"],
Just [" +6 ^ ^ )"],
Just ["+12 ^ ^ "],
Just [" +1 ^ ^ a"],
Just [" +4 ^ ^ c"],
Just [" +5 ^ ^ d"],
Just [" +6 ^ ^ )"],
Just ["+12 ^ ^ "],
Just [" 0: abcdcdcd"],
Just [" 1: abcdcd"]]
,
testRegex "^abc" []
["abcdef",
"*** Failers",
"abcdef\\B "]
[Just [" 0: abc"],
Nothing,
Nothing]
,
testRegex "^(a*|xyz)" []
["bcd",
"aaabcd",
"xyz",
"xyz\\N ",
"*** Failers",
"bcd\\N ",
"",
"/xyz$/",
"xyz",
"xyz\\n",
"*** Failers",
"xyz\\Z",
"xyz\\n\\Z ",
"",
"/xyz$/m",
"xyz",
"xyz\\n ",
"abcxyz\\npqr ",
"abcxyz\\npqr\\Z ",
"xyz\\n\\Z ",
"*** Failers",
"xyz\\Z"]
[Just [" 0: "],
Just [" 0: aaa"],
Just [" 1: aa"],
Just [" 2: a"],
Just [" 3: "],
Just [" 0: xyz"],
Just [" 1: "],
Just [" 0: xyz"],
Just [" 0: "],
Nothing,
Just ["/xyz$/"],
Just [" 0: xyz"],
Just [" 0: xyz"],
Nothing,
Nothing,
Nothing,
Just ["/xyz$/m"],
Just [" 0: xyz"],
Just [" 0: xyz"],
Just [" 0: xyz"],
Just [" 0: xyz"],
Just [" 0: xyz"],
Nothing,
Nothing]
,
testRegex "\\Gabc" []
["abcdef",
"defabcxyz\\>3 ",
"*** Failers ",
"defabcxyz"]
[Just [" 0: abc"],
Just [" 0: abc"],
Nothing,
Nothing]
,
testRegex "^abcdef" []
["ab\\P",
"abcde\\P",
"abcdef\\P",
"*** Failers",
"abx\\P "]
[Just ["Partial match: ab"],
Just ["Partial match: abcde"],
Just [" 0: abcdef"],
Nothing,
Nothing]
,
testRegex "^a{2,4}\\d+z" []
["a\\P",
"aa\\P",
"aa2\\P ",
"aaa\\P",
"aaa23\\P ",
"aaaa12345\\P",
"aa0z\\P",
"aaaa4444444444444z\\P ",
"*** Failers",
"az\\P ",
"aaaaa\\P ",
"a56\\P "]
[Just ["Partial match: a"],
Just ["Partial match: aa"],
Just ["Partial match: aa2"],
Just ["Partial match: aaa"],
Just ["Partial match: aaa23"],
Just ["Partial match: aaaa12345"],
Just [" 0: aa0z"],
Just [" 0: aaaa4444444444444z"],
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "^abcdef" []
["abc\\P",
"def\\R ",
"",
"/(?<=foo)bar/",
"xyzfo\\P ",
"foob\\P\\>2 ",
"foobar...\\R\\P\\>4 ",
"xyzfo\\P",
"foobar\\>2 ",
"*** Failers",
"xyzfo\\P",
"obar\\R "]
[Just ["Partial match: abc"],
Just [" 0: def"],
Just ["/(?<=foo)bar/"],
Nothing,
Just ["Partial match: b"],
Just [" 0: ar"],
Nothing,
Just [" 0: bar"],
Nothing,
Nothing,
Nothing]
,
testRegex "(ab*(cd|ef))+X" []
["adfadadaklhlkalkajhlkjahdfasdfasdfladsfjkj\\P\\Z",
"lkjhlkjhlkjhlkjhabbbbbbcdaefabbbbbbbefa\\P\\B\\Z",
"cdabbbbbbbb\\P\\R\\B\\Z",
"efabbbbbbbbbbbbbbbb\\P\\R\\B\\Z",
"bbbbbbbbbbbbcdXyasdfadf\\P\\R\\B\\Z "]
[Nothing,
Just ["Partial match: abbbbbbcdaefabbbbbbbefa"],
Just ["Partial match: cdabbbbbbbb"],
Just ["Partial match: efabbbbbbbbbbbbbbbb"],
Just [" 0: bbbbbbbbbbbbcdX"]]
,
testRegex "(a|b)" [ERROR]
["<testsavedregex",
"abc",
"** Failers",
"def ",
"",
"/the quick brown fox/",
"the quick brown fox",
"The quick brown FOX",
"What do you know about the quick brown fox?",
"What do you know about THE QUICK BROWN FOX?"]
[Just ["Compiled regex written to testsavedregex"],
Just ["Study data written to testsavedregex"],
Just ["<testsavedregex"],
Just ["Compiled regex (byte-inverted) loaded from testsavedregex"],
Just ["Study data loaded from testsavedregex"],
Just [" 0: a"],
Just [" 0: a"],
Nothing,
Just ["/the quick brown fox/"],
Just [" 0: the quick brown fox"],
Nothing,
Just [" 0: the quick brown fox"],
Nothing]
,
testRegex "The quick brown fox" [caseless]
["the quick brown fox",
"The quick brown FOX",
"What do you know about the quick brown fox?",
"What do you know about THE QUICK BROWN FOX?"]
[Just [" 0: the quick brown fox"],
Just [" 0: The quick brown FOX"],
Just [" 0: the quick brown fox"],
Just [" 0: THE QUICK BROWN FOX"]]
,
testRegex "abcd\\t\\n\\r\\f\\a\\e\\071\\x3b\\$\\\\\\?caxyz" []
["abcd\\t\\n\\r\\f\\a\\e9;\\$\\\\?caxyz"]
[Just [" 0: abcd\\x09\\x0a\\x0d\\x0c\\x07\\x1b9;$\\?caxyz"]]
,
testRegex "a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz" []
["abxyzpqrrrabbxyyyypqAzz",
"abxyzpqrrrabbxyyyypqAzz",
"aabxyzpqrrrabbxyyyypqAzz",
"aaabxyzpqrrrabbxyyyypqAzz",
"aaaabxyzpqrrrabbxyyyypqAzz",
"abcxyzpqrrrabbxyyyypqAzz",
"aabcxyzpqrrrabbxyyyypqAzz",
"aaabcxyzpqrrrabbxyyyypAzz",
"aaabcxyzpqrrrabbxyyyypqAzz",
"aaabcxyzpqrrrabbxyyyypqqAzz",
"aaabcxyzpqrrrabbxyyyypqqqAzz",
"aaabcxyzpqrrrabbxyyyypqqqqAzz",
"aaabcxyzpqrrrabbxyyyypqqqqqAzz",
"aaabcxyzpqrrrabbxyyyypqqqqqqAzz",
"aaaabcxyzpqrrrabbxyyyypqAzz",
"abxyzzpqrrrabbxyyyypqAzz",
"aabxyzzzpqrrrabbxyyyypqAzz",
"aaabxyzzzzpqrrrabbxyyyypqAzz",
"aaaabxyzzzzpqrrrabbxyyyypqAzz",
"abcxyzzpqrrrabbxyyyypqAzz",
"aabcxyzzzpqrrrabbxyyyypqAzz",
"aaabcxyzzzzpqrrrabbxyyyypqAzz",
"aaaabcxyzzzzpqrrrabbxyyyypqAzz",
"aaaabcxyzzzzpqrrrabbbxyyyypqAzz",
"aaaabcxyzzzzpqrrrabbbxyyyyypqAzz",
"aaabcxyzpqrrrabbxyyyypABzz",
"aaabcxyzpqrrrabbxyyyypABBzz",
">>>aaabxyzpqrrrabbxyyyypqAzz",
">aaaabxyzpqrrrabbxyyyypqAzz",
">>>>abcxyzpqrrrabbxyyyypqAzz",
"*** Failers",
"abxyzpqrrabbxyyyypqAzz",
"abxyzpqrrrrabbxyyyypqAzz",
"abxyzpqrrrabxyyyypqAzz",
"aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz",
"aaaabcxyzzzzpqrrrabbbxyyypqAzz",
"aaabcxyzpqrrrabbxyyyypqqqqqqqAzz"]
[Just [" 0: abxyzpqrrrabbxyyyypqAzz"],
Just [" 0: abxyzpqrrrabbxyyyypqAzz"],
Just [" 0: aabxyzpqrrrabbxyyyypqAzz"],
Just [" 0: aaabxyzpqrrrabbxyyyypqAzz"],
Just [" 0: aaaabxyzpqrrrabbxyyyypqAzz"],
Just [" 0: abcxyzpqrrrabbxyyyypqAzz"],
Just [" 0: aabcxyzpqrrrabbxyyyypqAzz"],
Just [" 0: aaabcxyzpqrrrabbxyyyypAzz"],
Just [" 0: aaabcxyzpqrrrabbxyyyypqAzz"],
Just [" 0: aaabcxyzpqrrrabbxyyyypqqAzz"],
Just [" 0: aaabcxyzpqrrrabbxyyyypqqqAzz"],
Just [" 0: aaabcxyzpqrrrabbxyyyypqqqqAzz"],
Just [" 0: aaabcxyzpqrrrabbxyyyypqqqqqAzz"],
Just [" 0: aaabcxyzpqrrrabbxyyyypqqqqqqAzz"],
Just [" 0: aaaabcxyzpqrrrabbxyyyypqAzz"],
Just [" 0: abxyzzpqrrrabbxyyyypqAzz"],
Just [" 0: aabxyzzzpqrrrabbxyyyypqAzz"],
Just [" 0: aaabxyzzzzpqrrrabbxyyyypqAzz"],
Just [" 0: aaaabxyzzzzpqrrrabbxyyyypqAzz"],
Just [" 0: abcxyzzpqrrrabbxyyyypqAzz"],
Just [" 0: aabcxyzzzpqrrrabbxyyyypqAzz"],
Just [" 0: aaabcxyzzzzpqrrrabbxyyyypqAzz"],
Just [" 0: aaaabcxyzzzzpqrrrabbxyyyypqAzz"],
Just [" 0: aaaabcxyzzzzpqrrrabbbxyyyypqAzz"],
Just [" 0: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz"],
Just [" 0: aaabcxyzpqrrrabbxyyyypABzz"],
Just [" 0: aaabcxyzpqrrrabbxyyyypABBzz"],
Just [" 0: aaabxyzpqrrrabbxyyyypqAzz"],
Just [" 0: aaaabxyzpqrrrabbxyyyypqAzz"],
Just [" 0: abcxyzpqrrrabbxyyyypqAzz"],
Nothing,
Nothing,
Nothing,
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "^(abc){1,2}zz" []
["abczz",
"abcabczz",
"*** Failers",
"zz",
"abcabcabczz",
">>abczz"]
[Just [" 0: abczz"],
Just [" 0: abcabczz"],
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "^(b+?|a){1,2}?c" []
["bc",
"bbc",
"bbbc",
"bac",
"bbac",
"aac",
"abbbbbbbbbbbc",
"bbbbbbbbbbbac",
"*** Failers",
"aaac",
"abbbbbbbbbbbac"]
[Just [" 0: bc"],
Just [" 0: bbc"],
Just [" 0: bbbc"],
Just [" 0: bac"],
Just [" 0: bbac"],
Just [" 0: aac"],
Just [" 0: abbbbbbbbbbbc"],
Just [" 0: bbbbbbbbbbbac"],
Nothing,
Nothing,
Nothing]
,
testRegex "^(b+|a){1,2}c" []
["bc",
"bbc",
"bbbc",
"bac",
"bbac",
"aac",
"abbbbbbbbbbbc",
"bbbbbbbbbbbac",
"*** Failers",
"aaac",
"abbbbbbbbbbbac"]
[Just [" 0: bc"],
Just [" 0: bbc"],
Just [" 0: bbbc"],
Just [" 0: bac"],
Just [" 0: bbac"],
Just [" 0: aac"],
Just [" 0: abbbbbbbbbbbc"],
Just [" 0: bbbbbbbbbbbac"],
Nothing,
Nothing,
Nothing]
,
testRegex "^(b+|a){1,2}?bc" []
["bbc"]
[Just [" 0: bbc"]]
,
testRegex "^(b*|ba){1,2}?bc" []
["babc",
"bbabc",
"bababc",
"*** Failers",
"bababbc",
"babababc"]
[Just [" 0: babc"],
Just [" 0: bbabc"],
Just [" 0: bababc"],
Nothing,
Nothing,
Nothing]
,
testRegex "^(ba|b*){1,2}?bc" []
["babc",
"bbabc",
"bababc",
"*** Failers",
"bababbc",
"babababc"]
[Just [" 0: babc"],
Just [" 0: bbabc"],
Just [" 0: bababc"],
Nothing,
Nothing,
Nothing]
,
testRegex "^\\ca\\cA\\c[\\c{\\c:" []
["\\x01\\x01\\e;z"]
[Just [" 0: \\x01\\x01\\x1b;z"]]
,
testRegex "^[ab\\]cde]" []
["athing",
"bthing",
"]thing",
"cthing",
"dthing",
"ething",
"*** Failers",
"fthing",
"[thing",
"\\\\thing"]
[Just [" 0: a"],
Just [" 0: b"],
Just [" 0: ]"],
Just [" 0: c"],
Just [" 0: d"],
Just [" 0: e"],
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "^[]cde]" []
["]thing",
"cthing",
"dthing",
"ething",
"*** Failers",
"athing",
"fthing"]
[Just [" 0: ]"],
Just [" 0: c"],
Just [" 0: d"],
Just [" 0: e"],
Nothing,
Nothing,
Nothing]
,
testRegex "^[^ab\\]cde]" []
["fthing",
"[thing",
"\\\\thing",
"*** Failers",
"athing",
"bthing",
"]thing",
"cthing",
"dthing",
"ething"]
[Just [" 0: f"],
Just [" 0: ["],
Just [" 0: \\"],
Just [" 0: *"],
Nothing,
Nothing,
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "^[^]cde]" []
["athing",
"fthing",
"*** Failers",
"]thing",
"cthing",
"dthing",
"ething"]
[Just [" 0: a"],
Just [" 0: f"],
Just [" 0: *"],
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "^\\\129" []
["\129"]
[Just [" 0: \\x81"]]
,
testRegex "^\255" []
["\255"]
[Just [" 0: \\xff"]]
,
testRegex "^[0-9]+$" []
["0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"100",
"*** Failers",
"abc"]
[Just [" 0: 0"],
Just [" 0: 1"],
Just [" 0: 2"],
Just [" 0: 3"],
Just [" 0: 4"],
Just [" 0: 5"],
Just [" 0: 6"],
Just [" 0: 7"],
Just [" 0: 8"],
Just [" 0: 9"],
Just [" 0: 10"],
Just [" 0: 100"],
Nothing,
Nothing]
,
testRegex "^.*nter" []
["enter",
"inter",
"uponter"]
[Just [" 0: enter"],
Just [" 0: inter"],
Just [" 0: uponter"]]
,
testRegex "^xxx[0-9]+$" []
["xxx0",
"xxx1234",
"*** Failers",
"xxx"]
[Just [" 0: xxx0"],
Just [" 0: xxx1234"],
Nothing,
Nothing]
,
testRegex "^.+[0-9][0-9][0-9]$" []
["x123",
"xx123",
"123456",
"*** Failers",
"123",
"x1234"]
[Just [" 0: x123"],
Just [" 0: xx123"],
Just [" 0: 123456"],
Nothing,
Nothing,
Just [" 0: x1234"]]
,
testRegex "^.+?[0-9][0-9][0-9]$" []
["x123",
"xx123",
"123456",
"*** Failers",
"123",
"x1234"]
[Just [" 0: x123"],
Just [" 0: xx123"],
Just [" 0: 123456"],
Nothing,
Nothing,
Just [" 0: x1234"]]
,
testRegex "^([^!]+)!(.+)=apquxz\\.ixr\\.zzz\\.ac\\.uk$" []
["abc!pqr=apquxz.ixr.zzz.ac.uk",
"*** Failers",
"!pqr=apquxz.ixr.zzz.ac.uk",
"abc!=apquxz.ixr.zzz.ac.uk",
"abc!pqr=apquxz:ixr.zzz.ac.uk",
"abc!pqr=apquxz.ixr.zzz.ac.ukk"]
[Just [" 0: abc!pqr=apquxz.ixr.zzz.ac.uk"],
Nothing,
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex ":" []
["Well, we need a colon: somewhere",
"*** Fail if we don't"]
[Just [" 0: :"],
Nothing]
,
testRegex "([\\da-f:]+)$" [caseless]
["0abc",
"abc",
"fed",
"E",
"::",
"5f03:12C0::932e",
"fed def",
"Any old stuff",
"*** Failers",
"0zzz",
"gzzz",
"fed\\x20",
"Any old rubbish"]
[Just [" 0: 0abc"],
Just [" 0: abc"],
Just [" 0: fed"],
Just [" 0: E"],
Just [" 0: ::"],
Just [" 0: 5f03:12C0::932e"],
Just [" 0: def"],
Just [" 0: ff"],
Nothing,
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "^.*\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$" []
[".1.2.3",
"A.12.123.0",
"*** Failers",
".1.2.3333",
"1.2.3",
"1234.2.3"]
[Just [" 0: .1.2.3"],
Just [" 0: A.12.123.0"],
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "^(\\d+)\\s+IN\\s+SOA\\s+(\\S+)\\s+(\\S+)\\s*\\(\\s*$" []
["1 IN SOA non-sp1 non-sp2(",
"1 IN SOA non-sp1 non-sp2 (",
"*** Failers",
"1IN SOA non-sp1 non-sp2("]
[Just [" 0: 1 IN SOA non-sp1 non-sp2("],
Just [" 0: 1 IN SOA non-sp1 non-sp2 ("],
Nothing,
Nothing]
,
testRegex "^[a-zA-Z\\d][a-zA-Z\\d\\-]*(\\.[a-zA-Z\\d][a-zA-z\\d\\-]*)*\\.$" []
["a.",
"Z.",
"2.",
"ab-c.pq-r.",
"sxk.zzz.ac.uk.",
"x-.y-.",
"*** Failers",
"-abc.peq."]
[Just [" 0: a."],
Just [" 0: Z."],
Just [" 0: 2."],
Just [" 0: ab-c.pq-r."],
Just [" 0: sxk.zzz.ac.uk."],
Just [" 0: x-.y-."],
Nothing,
Nothing]
,
testRegex "^\\*\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?(\\.[a-z]([a-z\\-\\d]*[a-z\\d]+)?)*$" []
["*.a",
"*.b0-a",
"*.c3-b.c",
"*.c-a.b-c",
"*** Failers",
"*.0",
"*.a-",
"*.a-b.c-",
"*.c-a.0-c"]
[Just [" 0: *.a"],
Just [" 0: *.b0-a"],
Just [" 0: *.c3-b.c"],
Just [" 0: *.c-a.b-c"],
Nothing,
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "^(?=ab(de))(abd)(e)" []
["abde"]
[Just [" 0: abde"]]
,
testRegex "^(?!(ab)de|x)(abd)(f)" []
["abdf"]
[Just [" 0: abdf"]]
,
testRegex "^(?=(ab(cd)))(ab)" []
["abcd"]
[Just [" 0: ab"]]
,
testRegex "^[\\da-f](\\.[\\da-f])*$" [caseless]
["a.b.c.d",
"A.B.C.D",
"a.b.c.1.2.3.C"]
[Just [" 0: a.b.c.d"],
Just [" 0: A.B.C.D"],
Just [" 0: a.b.c.1.2.3.C"]]
,
testRegex "^\\\".*\\\"\\s*(;.*)?$" []
["\\\"1234\\\"",
"\\\"abcd\\\" ;",
"\\\"\\\" ; rhubarb",
"*** Failers",
"\\\"1234\\\" : things"]
[Just [" 0: \"1234\""],
Just [" 0: \"abcd\" ;"],
Just [" 0: \"\" ; rhubarb"],
Nothing,
Nothing]
,
testRegex "^$" []
["\\",
"*** Failers"]
[Just [" 0: "],
Nothing]
,
testRegex " ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)" [ERROR]
["ab c",
"*** Failers",
"abc",
"ab cde"]
[Just [" 0: ab c"],
Nothing,
Nothing,
Nothing]
,
testRegex "(?x) ^ a (?# begins with a) b\\sc (?# then b c) $ (?# then end)" []
["ab c",
"*** Failers",
"abc",
"ab cde"]
[Just [" 0: ab c"],
Nothing,
Nothing,
Nothing]
,
testRegex "^ a\\ b[c ]d $" [ERROR]
["a bcd",
"a b d",
"*** Failers",
"abcd",
"ab d"]
[Just [" 0: a bcd"],
Just [" 0: a b d"],
Nothing,
Nothing,
Nothing]
,
testRegex "^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$" []
["abcdefhijklm"]
[Just [" 0: abcdefhijklm"]]
,
testRegex "^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$" []
["abcdefhijklm"]
[Just [" 0: abcdefhijklm"]]
,
testRegex "^[\\w][\\W][\\s][\\S][\\d][\\D][\\b][\\n][\\c]][\\022]" []
["a+ Z0+\\x08\\n\\x1d\\x12"]
[Just [" 0: a+ Z0+\\x08\\x0a\\x1d\\x12"]]
,
testRegex "^[.^$|()*+?{,}]+" []
[".^\\$(*+)|{?,?}"]
[Just [" 0: .^$(*+)|{?,?}"],
Just [" 1: .^$(*+)|{?,?"],
Just [" 2: .^$(*+)|{?,"],
Just [" 3: .^$(*+)|{?"],
Just [" 4: .^$(*+)|{"],
Just [" 5: .^$(*+)|"],
Just [" 6: .^$(*+)"],
Just [" 7: .^$(*+"],
Just [" 8: .^$(*"],
Just [" 9: .^$("],
Just ["10: .^$"],
Just ["11: .^"],
Just ["12: ."]]
,
testRegex "^a*\\w" []
["z",
"az",
"aaaz",
"a",
"aa",
"aaaa",
"a+",
"aa+"]
[Just [" 0: z"],
Just [" 0: az"],
Just [" 1: a"],
Just [" 0: aaaz"],
Just [" 1: aaa"],
Just [" 2: aa"],
Just [" 3: a"],
Just [" 0: a"],
Just [" 0: aa"],
Just [" 1: a"],
Just [" 0: aaaa"],
Just [" 1: aaa"],
Just [" 2: aa"],
Just [" 3: a"],
Just [" 0: a"],
Just [" 0: aa"],
Just [" 1: a"]]
,
testRegex "^a*?\\w" []
["z",
"az",
"aaaz",
"a",
"aa",
"aaaa",
"a+",
"aa+"]
[Just [" 0: z"],
Just [" 0: az"],
Just [" 1: a"],
Just [" 0: aaaz"],
Just [" 1: aaa"],
Just [" 2: aa"],
Just [" 3: a"],
Just [" 0: a"],
Just [" 0: aa"],
Just [" 1: a"],
Just [" 0: aaaa"],
Just [" 1: aaa"],
Just [" 2: aa"],
Just [" 3: a"],
Just [" 0: a"],
Just [" 0: aa"],
Just [" 1: a"]]
,
testRegex "^a+\\w" []
["az",
"aaaz",
"aa",
"aaaa",
"aa+"]
[Just [" 0: az"],
Just [" 0: aaaz"],
Just [" 1: aaa"],
Just [" 2: aa"],
Just [" 0: aa"],
Just [" 0: aaaa"],
Just [" 1: aaa"],
Just [" 2: aa"],
Just [" 0: aa"]]
,
testRegex "^a+?\\w" []
["az",
"aaaz",
"aa",
"aaaa",
"aa+"]
[Just [" 0: az"],
Just [" 0: aaaz"],
Just [" 1: aaa"],
Just [" 2: aa"],
Just [" 0: aa"],
Just [" 0: aaaa"],
Just [" 1: aaa"],
Just [" 2: aa"],
Just [" 0: aa"]]
,
testRegex "^\\d{8}\\w{2,}" []
["1234567890",
"12345678ab",
"12345678__",
"*** Failers",
"1234567"]
[Just [" 0: 1234567890"],
Just [" 0: 12345678ab"],
Just [" 0: 12345678__"],
Nothing,
Nothing]
,
testRegex "^[aeiou\\d]{4,5}$" []
["uoie",
"1234",
"12345",
"aaaaa",
"*** Failers",
"123456"]
[Just [" 0: uoie"],
Just [" 0: 1234"],
Just [" 0: 12345"],
Just [" 0: aaaaa"],
Nothing,
Nothing]
,
testRegex "^[aeiou\\d]{4,5}?" []
["uoie",
"1234",
"12345",
"aaaaa",
"123456"]
[Just [" 0: uoie"],
Just [" 0: 1234"],
Just [" 0: 12345"],
Just [" 1: 1234"],
Just [" 0: aaaaa"],
Just [" 1: aaaa"],
Just [" 0: 12345"],
Just [" 1: 1234"]]
,
testRegex "^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]" []
["From abcd Mon Sep 01 12:33:02 1997"]
[Just [" 0: From abcd Mon Sep 01 12:33"]]
,
testRegex "^From\\s+\\S+\\s+([a-zA-Z]{3}\\s+){2}\\d{1,2}\\s+\\d\\d:\\d\\d" []
["From abcd Mon Sep 01 12:33:02 1997",
"From abcd Mon Sep 1 12:33:02 1997",
"*** Failers",
"From abcd Sep 01 12:33:02 1997"]
[Just [" 0: From abcd Mon Sep 01 12:33"],
Just [" 0: From abcd Mon Sep 1 12:33"],
Nothing,
Nothing]
,
testRegex "^12.34" [ERROR]
["12\\n34",
"12\\r34"]
[Just [" 0: 12\\x0a34"],
Just [" 0: 12\\x0d34"]]
,
testRegex "\\w+(?=\\t)" []
["the quick brown\\t fox"]
[Just [" 0: brown"]]
,
testRegex "foo(?!bar)(.*)" []
["foobar is foolish see?"]
[Just [" 0: foolish see?"],
Just [" 1: foolish see"],
Just [" 2: foolish se"],
Just [" 3: foolish s"],
Just [" 4: foolish "],
Just [" 5: foolish"],
Just [" 6: foolis"],
Just [" 7: fooli"],
Just [" 8: fool"],
Just [" 9: foo"]]
,
testRegex "(?:(?!foo)...|^.{0,2})bar(.*)" []
["foobar crowbar etc",
"barrel",
"2barrel",
"A barrel"]
[Just [" 0: rowbar etc"],
Just [" 1: rowbar et"],
Just [" 2: rowbar e"],
Just [" 3: rowbar "],
Just [" 4: rowbar"],
Just [" 0: barrel"],
Just [" 1: barre"],
Just [" 2: barr"],
Just [" 3: bar"],
Just [" 0: 2barrel"],
Just [" 1: 2barre"],
Just [" 2: 2barr"],
Just [" 3: 2bar"],
Just [" 0: A barrel"],
Just [" 1: A barre"],
Just [" 2: A barr"],
Just [" 3: A bar"]]
,
testRegex "^(\\D*)(?=\\d)(?!123)" []
["abc456",
"*** Failers",
"abc123"]
[Just [" 0: abc"],
Nothing,
Nothing]
,
testRegex "ERROR" []
["inside)/",
"1234"]
[Just [" 0: 1234"]]
,
testRegex "ERROR" []
["/x",
"1234"]
[Just [" 0: 1234"]]
,
testRegex "ERROR" []
["abcd/x",
"abcd"]
[Just [" 0: abcd"]]
,
testRegex "^abcd#rhubarb" [ERROR]
["abcd"]
[Just [" 0: abcd"]]
,
testRegex "(?!^)abc" []
["the abc",
"*** Failers",
"abc"]
[Just [" 0: abc"],
Nothing,
Nothing]
,
testRegex "(?=^)abc" []
["abc",
"*** Failers",
"the abc"]
[Just [" 0: abc"],
Nothing,
Nothing]
,
testRegex "^[ab]{1,3}(ab*|b)" []
["aabbbbb"]
[Just [" 0: aabbbbb"],
Just [" 1: aabbbb"],
Just [" 2: aabbb"],
Just [" 3: aabb"],
Just [" 4: aab"],
Just [" 5: aa"]]
,
testRegex "^[ab]{1,3}?(ab*|b)" []
["aabbbbb"]
[Just [" 0: aabbbbb"],
Just [" 1: aabbbb"],
Just [" 2: aabbb"],
Just [" 3: aabb"],
Just [" 4: aab"],
Just [" 5: aa"]]
,
testRegex "^[ab]{1,3}?(ab*?|b)" []
["aabbbbb"]
[Just [" 0: aabbbbb"],
Just [" 1: aabbbb"],
Just [" 2: aabbb"],
Just [" 3: aabb"],
Just [" 4: aab"],
Just [" 5: aa"]]
,
testRegex "^[ab]{1,3}(ab*?|b)" []
["aabbbbb"]
[Just [" 0: aabbbbb"],
Just [" 1: aabbbb"],
Just [" 2: aabbb"],
Just [" 3: aabb"],
Just [" 4: aab"],
Just [" 5: aa"]]
,
testRegex "ERROR" []
["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* # optional leading comment",
"(?: (?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"|",
"\" (?: # opening quote...",
"[^\\\\\\x80-\\xff\\n\\015\"] # Anything except backslash and quote",
"| # or",
"\\\\ [^\\x80-\\xff] # Escaped something (something != CR)",
")* \" # closing quote",
") # initial word",
"(?: (?: [\\040\\t] | \\(",
"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* \\. (?: [\\040\\t] | \\(",
"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* (?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"|",
"\" (?: # opening quote...",
"[^\\\\\\x80-\\xff\\n\\015\"] # Anything except backslash and quote",
"| # or",
"\\\\ [^\\x80-\\xff] # Escaped something (something != CR)",
")* \" # closing quote",
") )* # further okay, if led by a period",
"(?: [\\040\\t] | \\(",
"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* @ (?: [\\040\\t] | \\(",
"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* (?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"| \\[ # [",
"(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff",
"\\] # ]",
") # initial subdomain",
"(?: #",
"(?: [\\040\\t] | \\(",
"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* \\. # if led by a period...",
"(?: [\\040\\t] | \\(",
"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* (?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"| \\[ # [",
"(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff",
"\\] # ]",
") # ...further okay",
")*",
"# address",
"| # or",
"(?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"|",
"\" (?: # opening quote...",
"[^\\\\\\x80-\\xff\\n\\015\"] # Anything except backslash and quote",
"| # or",
"\\\\ [^\\x80-\\xff] # Escaped something (something != CR)",
")* \" # closing quote",
") # one word, optionally followed by....",
"(?:",
"[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037] | # atom and space parts, or...",
"\\(",
"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) | # comments, or..."]
[Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* # optional leading comment"],
Just ["(?: (?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["|"],
Just ["\" (?: # opening quote..."],
Just ["[^\\\\\\x80-\\xff\\n\\015\"] # Anything except backslash and quote"],
Just ["| # or"],
Just ["\\\\ [^\\x80-\\xff] # Escaped something (something != CR)"],
Just [")* \" # closing quote"],
Just [") # initial word"],
Just ["(?: (?: [\\040\\t] | \\("],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* \\. (?: [\\040\\t] | \\("],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* (?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["|"],
Just ["\" (?: # opening quote..."],
Just ["[^\\\\\\x80-\\xff\\n\\015\"] # Anything except backslash and quote"],
Just ["| # or"],
Just ["\\\\ [^\\x80-\\xff] # Escaped something (something != CR)"],
Just [")* \" # closing quote"],
Just [") )* # further okay, if led by a period"],
Just ["(?: [\\040\\t] | \\("],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* @ (?: [\\040\\t] | \\("],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* (?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["| \\[ # ["],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff"],
Just ["\\] # ]"],
Just [") # initial subdomain"],
Just ["(?: #"],
Just ["(?: [\\040\\t] | \\("],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* \\. # if led by a period..."],
Just ["(?: [\\040\\t] | \\("],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* (?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["| \\[ # ["],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff"],
Just ["\\] # ]"],
Just [") # ...further okay"],
Just [")*"],
Just ["# address"],
Just ["| # or"],
Just ["(?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["|"],
Just ["\" (?: # opening quote..."],
Just ["[^\\\\\\x80-\\xff\\n\\015\"] # Anything except backslash and quote"],
Just ["| # or"],
Just ["\\\\ [^\\x80-\\xff] # Escaped something (something != CR)"],
Just [")* \" # closing quote"],
Just [") # one word, optionally followed by...."],
Just ["(?:"],
Just ["[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037] | # atom and space parts, or..."],
Just ["\\("],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) | # comments, or..."]]
,
testRegex "ERROR" []
["[^\\\\\\x80-\\xff\\n\\015\"] # Anything except backslash and quote",
"| # or",
"\\\\ [^\\x80-\\xff] # Escaped something (something != CR)",
")* \" # closing quote",
"# quoted strings",
")*",
"< (?: [\\040\\t] | \\(",
"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* # leading <",
"(?: @ (?: [\\040\\t] | \\(",
"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* (?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"| \\[ # [",
"(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff",
"\\] # ]",
") # initial subdomain",
"(?: #",
"(?: [\\040\\t] | \\(",
"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* \\. # if led by a period...",
"(?: [\\040\\t] | \\(",
"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* (?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"| \\[ # [",
"(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff",
"\\] # ]",
") # ...further okay",
")*"]
[Just ["[^\\\\\\x80-\\xff\\n\\015\"] # Anything except backslash and quote"],
Just ["| # or"],
Just ["\\\\ [^\\x80-\\xff] # Escaped something (something != CR)"],
Just [")* \" # closing quote"],
Just ["# quoted strings"],
Just [")*"],
Just ["< (?: [\\040\\t] | \\("],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* # leading <"],
Just ["(?: @ (?: [\\040\\t] | \\("],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* (?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["| \\[ # ["],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff"],
Just ["\\] # ]"],
Just [") # initial subdomain"],
Just ["(?: #"],
Just ["(?: [\\040\\t] | \\("],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* \\. # if led by a period..."],
Just ["(?: [\\040\\t] | \\("],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* (?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["| \\[ # ["],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff"],
Just ["\\] # ]"],
Just [") # ...further okay"],
Just [")*"]]
,
testRegex "ERROR" []
["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* , (?: [\\040\\t] | \\(",
"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* @ (?: [\\040\\t] | \\(",
"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* (?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"| \\[ # [",
"(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff",
"\\] # ]",
") # initial subdomain",
"(?: #",
"(?: [\\040\\t] | \\(",
"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* \\. # if led by a period...",
"(?: [\\040\\t] | \\(",
"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* (?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"| \\[ # [",
"(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff",
"\\] # ]",
") # ...further okay",
")*",
")* # further okay, if led by comma",
": # closing colon",
"(?: [\\040\\t] | \\(",
"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* )? # optional route",
"(?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"|",
"\" (?: # opening quote...",
"[^\\\\\\x80-\\xff\\n\\015\"] # Anything except backslash and quote",
"| # or",
"\\\\ [^\\x80-\\xff] # Escaped something (something != CR)",
")* \" # closing quote",
") # initial word",
"(?: (?: [\\040\\t] | \\(",
"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* \\. (?: [\\040\\t] | \\(",
"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* (?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"|",
"\" (?: # opening quote...",
"[^\\\\\\x80-\\xff\\n\\015\"] # Anything except backslash and quote",
"| # or",
"\\\\ [^\\x80-\\xff] # Escaped something (something != CR)",
")* \" # closing quote",
") )* # further okay, if led by a period",
"(?: [\\040\\t] | \\(",
"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* @ (?: [\\040\\t] | \\(",
"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* (?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"| \\[ # [",
"(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff",
"\\] # ]",
") # initial subdomain",
"(?: #",
"(?: [\\040\\t] | \\(",
"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* \\. # if led by a period...",
"(?: [\\040\\t] | \\(",
"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* (?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"| \\[ # [",
"(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff",
"\\] # ]",
") # ...further okay",
")*",
"# address spec",
"(?: [\\040\\t] | \\(",
"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* > # trailing >",
"# name and address",
") (?: [\\040\\t] | \\(",
"(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*",
"\\) )* # optional trailing comment",
"/x",
"Alan Other <user\\@dom.ain>",
"<user\\@dom.ain>",
"user\\@dom.ain",
"\\\"A. Other\\\" <user.1234\\@dom.ain> (a comment)",
"A. Other <user.1234\\@dom.ain> (a comment)",
"\\\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\\\"\\@x400-re.lay",
"A missing angle <user\\@some.where",
"*** Failers",
"The quick brown fox"]
[Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* , (?: [\\040\\t] | \\("],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* @ (?: [\\040\\t] | \\("],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* (?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["| \\[ # ["],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff"],
Just ["\\] # ]"],
Just [") # initial subdomain"],
Just ["(?: #"],
Just ["(?: [\\040\\t] | \\("],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* \\. # if led by a period..."],
Just ["(?: [\\040\\t] | \\("],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* (?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["| \\[ # ["],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff"],
Just ["\\] # ]"],
Just [") # ...further okay"],
Just [")*"],
Just [")* # further okay, if led by comma"],
Just [": # closing colon"],
Just ["(?: [\\040\\t] | \\("],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* )? # optional route"],
Just ["(?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["|"],
Just ["\" (?: # opening quote..."],
Just ["[^\\\\\\x80-\\xff\\n\\015\"] # Anything except backslash and quote"],
Just ["| # or"],
Just ["\\\\ [^\\x80-\\xff] # Escaped something (something != CR)"],
Just [")* \" # closing quote"],
Just [") # initial word"],
Just ["(?: (?: [\\040\\t] | \\("],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* \\. (?: [\\040\\t] | \\("],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* (?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["|"],
Just ["\" (?: # opening quote..."],
Just ["[^\\\\\\x80-\\xff\\n\\015\"] # Anything except backslash and quote"],
Just ["| # or"],
Just ["\\\\ [^\\x80-\\xff] # Escaped something (something != CR)"],
Just [")* \" # closing quote"],
Just [") )* # further okay, if led by a period"],
Just ["(?: [\\040\\t] | \\("],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* @ (?: [\\040\\t] | \\("],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* (?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["| \\[ # ["],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff"],
Just ["\\] # ]"],
Just [") # initial subdomain"],
Just ["(?: #"],
Just ["(?: [\\040\\t] | \\("],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* \\. # if led by a period..."],
Just ["(?: [\\040\\t] | \\("],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* (?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["| \\[ # ["],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff"],
Just ["\\] # ]"],
Just [") # ...further okay"],
Just [")*"],
Just ["# address spec"],
Just ["(?: [\\040\\t] | \\("],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* > # trailing >"],
Just ["# name and address"],
Just [") (?: [\\040\\t] | \\("],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] | \\( (?: [^\\\\\\x80-\\xff\\n\\015()] | \\\\ [^\\x80-\\xff] )* \\) )*"],
Just ["\\) )* # optional trailing comment"],
Just ["/x"],
Just [" 0: Alan Other <user@dom.ain>"],
Just [" 0: user@dom.ain"],
Just [" 1: user@dom"],
Just [" 0: user@dom.ain"],
Just [" 1: user@dom"],
Just [" 0: \"A. Other\" <user.1234@dom.ain> (a comment)"],
Just [" 1: \"A. Other\" <user.1234@dom.ain> "],
Just [" 2: \"A. Other\" <user.1234@dom.ain>"],
Just [" 0: Other <user.1234@dom.ain> (a comment)"],
Just [" 1: Other <user.1234@dom.ain> "],
Just [" 2: Other <user.1234@dom.ain>"],
Just [" 0: \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"@x400-re.lay"],
Just [" 1: \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"@x400-re"],
Just [" 0: user@some.where"],
Just [" 1: user@some"],
Nothing,
Nothing]
,
testRegex "ERROR" []
["(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"# optional leading comment",
"(?:",
"(?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"# Atom",
"| # or",
"\" # \"",
"[^\\\\\\x80-\\xff\\n\\015\"] * # normal",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015\"] * )* # ( special normal* )*",
"\" # \"",
"# Quoted string",
")",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"(?:",
"\\.",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"(?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"# Atom",
"| # or",
"\" # \"",
"[^\\\\\\x80-\\xff\\n\\015\"] * # normal",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015\"] * )* # ( special normal* )*",
"\" # \"",
"# Quoted string",
")",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"# additional words",
")*",
"@",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"(?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"|",
"\\[ # [",
"(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff",
"\\] # ]",
")",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"# optional trailing comments",
"(?:",
"\\.",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"(?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"|",
"\\[ # [",
"(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff",
"\\] # ]",
")",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"# optional trailing comments",
")*",
"# address",
"| # or",
"(?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"# Atom",
"| # or",
"\" # \"",
"[^\\\\\\x80-\\xff\\n\\015\"] * # normal",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015\"] * )* # ( special normal* )*",
"\" # \"",
"# Quoted string",
")",
"# leading word",
"[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037] * # \"normal\" atoms and or spaces",
"(?:",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"|",
"\" # \"",
"[^\\\\\\x80-\\xff\\n\\015\"] * # normal",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015\"] * )* # ( special normal* )*",
"\" # \"",
") # \"special\" comment or quoted string",
"[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037] * # more \"normal\"",
")*",
"<",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"# <",
"(?:",
"@",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"(?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"|",
"\\[ # [",
"(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff",
"\\] # ]",
")",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"# optional trailing comments",
"(?:",
"\\.",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"(?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"|",
"\\[ # [",
"(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff",
"\\] # ]",
")",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"# optional trailing comments",
")*",
"(?: ,",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"@",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"(?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"|",
"\\[ # [",
"(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff",
"\\] # ]",
")",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"# optional trailing comments",
"(?:",
"\\.",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"(?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"|",
"\\[ # [",
"(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff",
"\\] # ]",
")",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"# optional trailing comments",
")*",
")* # additional domains",
":",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"# optional trailing comments",
")? # optional route",
"(?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"# Atom",
"| # or",
"\" # \"",
"[^\\\\\\x80-\\xff\\n\\015\"] * # normal",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015\"] * )* # ( special normal* )*",
"\" # \"",
"# Quoted string",
")",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"(?:",
"\\.",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"(?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"# Atom",
"| # or",
"\" # \"",
"[^\\\\\\x80-\\xff\\n\\015\"] * # normal",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015\"] * )* # ( special normal* )*",
"\" # \"",
"# Quoted string",
")",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"# additional words",
")*",
"@",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"(?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"|",
"\\[ # [",
"(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff",
"\\] # ]",
")",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"# optional trailing comments",
"(?:",
"\\.",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"(?:",
"[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters...",
"(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom",
"|",
"\\[ # [",
"(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff",
"\\] # ]",
")",
"[\\040\\t]* # Nab whitespace.",
"(?:",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: # (",
"(?: \\\\ [^\\x80-\\xff] |",
"\\( # (",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
"(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*",
"\\) # )",
") # special",
"[^\\\\\\x80-\\xff\\n\\015()] * # normal*",
")* # )*",
"\\) # )",
"[\\040\\t]* )* # If comment found, allow more spaces.",
"# optional trailing comments",
")*",
"# address spec",
"> # >",
"# name and address",
")",
"/x",
"Alan Other <user\\@dom.ain>",
"<user\\@dom.ain>",
"user\\@dom.ain",
"\\\"A. Other\\\" <user.1234\\@dom.ain> (a comment)",
"A. Other <user.1234\\@dom.ain> (a comment)",
"\\\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\\\"\\@x400-re.lay",
"A missing angle <user\\@some.where",
"*** Failers",
"The quick brown fox"]
[Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["# optional leading comment"],
Just ["(?:"],
Just ["(?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["# Atom"],
Just ["| # or"],
Just ["\" # \""],
Just ["[^\\\\\\x80-\\xff\\n\\015\"] * # normal"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015\"] * )* # ( special normal* )*"],
Just ["\" # \""],
Just ["# Quoted string"],
Just [")"],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["(?:"],
Just ["\\."],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["(?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["# Atom"],
Just ["| # or"],
Just ["\" # \""],
Just ["[^\\\\\\x80-\\xff\\n\\015\"] * # normal"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015\"] * )* # ( special normal* )*"],
Just ["\" # \""],
Just ["# Quoted string"],
Just [")"],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["# additional words"],
Just [")*"],
Just ["@"],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["(?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["|"],
Just ["\\[ # ["],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff"],
Just ["\\] # ]"],
Just [")"],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["# optional trailing comments"],
Just ["(?:"],
Just ["\\."],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["(?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["|"],
Just ["\\[ # ["],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff"],
Just ["\\] # ]"],
Just [")"],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["# optional trailing comments"],
Just [")*"],
Just ["# address"],
Just ["| # or"],
Just ["(?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["# Atom"],
Just ["| # or"],
Just ["\" # \""],
Just ["[^\\\\\\x80-\\xff\\n\\015\"] * # normal"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015\"] * )* # ( special normal* )*"],
Just ["\" # \""],
Just ["# Quoted string"],
Just [")"],
Just ["# leading word"],
Just ["[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037] * # \"normal\" atoms and or spaces"],
Just ["(?:"],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["|"],
Just ["\" # \""],
Just ["[^\\\\\\x80-\\xff\\n\\015\"] * # normal"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015\"] * )* # ( special normal* )*"],
Just ["\" # \""],
Just [") # \"special\" comment or quoted string"],
Just ["[^()<>@,;:\".\\\\\\[\\]\\x80-\\xff\\000-\\010\\012-\\037] * # more \"normal\""],
Just [")*"],
Just ["<"],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["# <"],
Just ["(?:"],
Just ["@"],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["(?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["|"],
Just ["\\[ # ["],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff"],
Just ["\\] # ]"],
Just [")"],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["# optional trailing comments"],
Just ["(?:"],
Just ["\\."],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["(?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["|"],
Just ["\\[ # ["],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff"],
Just ["\\] # ]"],
Just [")"],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["# optional trailing comments"],
Just [")*"],
Just ["(?: ,"],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["@"],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["(?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["|"],
Just ["\\[ # ["],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff"],
Just ["\\] # ]"],
Just [")"],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["# optional trailing comments"],
Just ["(?:"],
Just ["\\."],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["(?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["|"],
Just ["\\[ # ["],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff"],
Just ["\\] # ]"],
Just [")"],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["# optional trailing comments"],
Just [")*"],
Just [")* # additional domains"],
Just [":"],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["# optional trailing comments"],
Just [")? # optional route"],
Just ["(?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["# Atom"],
Just ["| # or"],
Just ["\" # \""],
Just ["[^\\\\\\x80-\\xff\\n\\015\"] * # normal"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015\"] * )* # ( special normal* )*"],
Just ["\" # \""],
Just ["# Quoted string"],
Just [")"],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["(?:"],
Just ["\\."],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["(?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["# Atom"],
Just ["| # or"],
Just ["\" # \""],
Just ["[^\\\\\\x80-\\xff\\n\\015\"] * # normal"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015\"] * )* # ( special normal* )*"],
Just ["\" # \""],
Just ["# Quoted string"],
Just [")"],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["# additional words"],
Just [")*"],
Just ["@"],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["(?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["|"],
Just ["\\[ # ["],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff"],
Just ["\\] # ]"],
Just [")"],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["# optional trailing comments"],
Just ["(?:"],
Just ["\\."],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["(?:"],
Just ["[^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]+ # some number of atom characters..."],
Just ["(?![^(\\040)<>@,;:\".\\\\\\[\\]\\000-\\037\\x80-\\xff]) # ..not followed by something that could be part of an atom"],
Just ["|"],
Just ["\\[ # ["],
Just ["(?: [^\\\\\\x80-\\xff\\n\\015\\[\\]] | \\\\ [^\\x80-\\xff] )* # stuff"],
Just ["\\] # ]"],
Just [")"],
Just ["[\\040\\t]* # Nab whitespace."],
Just ["(?:"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: # ("],
Just ["(?: \\\\ [^\\x80-\\xff] |"],
Just ["\\( # ("],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just ["(?: \\\\ [^\\x80-\\xff] [^\\\\\\x80-\\xff\\n\\015()] * )* # (special normal*)*"],
Just ["\\) # )"],
Just [") # special"],
Just ["[^\\\\\\x80-\\xff\\n\\015()] * # normal*"],
Just [")* # )*"],
Just ["\\) # )"],
Just ["[\\040\\t]* )* # If comment found, allow more spaces."],
Just ["# optional trailing comments"],
Just [")*"],
Just ["# address spec"],
Just ["> # >"],
Just ["# name and address"],
Just [")"],
Just ["/x"],
Just [" 0: Alan Other <user@dom.ain>"],
Just [" 0: user@dom.ain"],
Just [" 1: user@dom"],
Just [" 0: user@dom.ain"],
Just [" 1: user@dom"],
Just [" 0: \"A. Other\" <user.1234@dom.ain>"],
Just [" 0: Other <user.1234@dom.ain>"],
Just [" 0: \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"@x400-re.lay"],
Just [" 1: \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"@x400-re"],
Just [" 0: user@some.where"],
Just [" 1: user@some"],
Nothing,
Nothing]
,
testRegex "abc\\0def\\00pqr\\000xyz\\0000AB" []
["abc\\0def\\00pqr\\000xyz\\0000AB",
"abc456 abc\\0def\\00pqr\\000xyz\\0000ABCDE"]
[Just [" 0: abc\\x00def\\x00pqr\\x00xyz\\x000AB"],
Just [" 0: abc\\x00def\\x00pqr\\x00xyz\\x000AB"]]
,
testRegex "abc\\x0def\\x00pqr\\x000xyz\\x0000AB" []
["abc\\x0def\\x00pqr\\x000xyz\\x0000AB",
"abc456 abc\\x0def\\x00pqr\\x000xyz\\x0000ABCDE"]
[Just [" 0: abc\\x0def\\x00pqr\\x000xyz\\x0000AB"],
Just [" 0: abc\\x0def\\x00pqr\\x000xyz\\x0000AB"]]
,
testRegex "^[\\000-\\037]" []
["\\0A",
"\\01B",
"\\037C"]
[Just [" 0: \\x00"],
Just [" 0: \\x01"],
Just [" 0: \\x1f"]]
,
testRegex "\\0*" []
["\\0\\0\\0\\0"]
[Just [" 0: \\x00\\x00\\x00\\x00"],
Just [" 1: \\x00\\x00\\x00"],
Just [" 2: \\x00\\x00"],
Just [" 3: \\x00"],
Just [" 4: "]]
,
testRegex "A\\x0{2,3}Z" []
["The A\\x0\\x0Z",
"An A\\0\\x0\\0Z",
"*** Failers",
"A\\0Z",
"A\\0\\x0\\0\\x0Z"]
[Just [" 0: A\\x00\\x00Z"],
Just [" 0: A\\x00\\x00\\x00Z"],
Nothing,
Nothing,
Nothing]
,
testRegex "^\\s" []
["\\040abc",
"\\x0cabc",
"\\nabc",
"\\rabc",
"\\tabc",
"*** Failers",
"abc"]
[Just [" 0: "],
Just [" 0: \\x0c"],
Just [" 0: \\x0a"],
Just [" 0: \\x0d"],
Just [" 0: \\x09"],
Nothing,
Nothing]
,
testRegex "ERROR" []
["c/x",
"abc"]
[Just [" 0: abc"]]
,
testRegex "ab{1,3}bc" []
["abbbbc",
"abbbc",
"abbc",
"*** Failers",
"abc",
"abbbbbc"]
[Just [" 0: abbbbc"],
Just [" 0: abbbc"],
Just [" 0: abbc"],
Nothing,
Nothing,
Nothing]
,
testRegex "([^.]*)\\.([^:]*):[T ]+(.*)" []
["track1.title:TBlah blah blah"]
[Just [" 0: track1.title:TBlah blah blah"],
Just [" 1: track1.title:TBlah blah bla"],
Just [" 2: track1.title:TBlah blah bl"],
Just [" 3: track1.title:TBlah blah b"],
Just [" 4: track1.title:TBlah blah "],
Just [" 5: track1.title:TBlah blah"],
Just [" 6: track1.title:TBlah bla"],
Just [" 7: track1.title:TBlah bl"],
Just [" 8: track1.title:TBlah b"],
Just [" 9: track1.title:TBlah "],
Just ["10: track1.title:TBlah"],
Just ["11: track1.title:TBla"],
Just ["12: track1.title:TBl"],
Just ["13: track1.title:TB"],
Just ["14: track1.title:T"]]
,
testRegex "([^.]*)\\.([^:]*):[T ]+(.*)" [caseless]
["track1.title:TBlah blah blah"]
[Just [" 0: track1.title:TBlah blah blah"],
Just [" 1: track1.title:TBlah blah bla"],
Just [" 2: track1.title:TBlah blah bl"],
Just [" 3: track1.title:TBlah blah b"],
Just [" 4: track1.title:TBlah blah "],
Just [" 5: track1.title:TBlah blah"],
Just [" 6: track1.title:TBlah bla"],
Just [" 7: track1.title:TBlah bl"],
Just [" 8: track1.title:TBlah b"],
Just [" 9: track1.title:TBlah "],
Just ["10: track1.title:TBlah"],
Just ["11: track1.title:TBla"],
Just ["12: track1.title:TBl"],
Just ["13: track1.title:TB"],
Just ["14: track1.title:T"]]
,
testRegex "([^.]*)\\.([^:]*):[t ]+(.*)" [caseless]
["track1.title:TBlah blah blah"]
[Just [" 0: track1.title:TBlah blah blah"],
Just [" 1: track1.title:TBlah blah bla"],
Just [" 2: track1.title:TBlah blah bl"],
Just [" 3: track1.title:TBlah blah b"],
Just [" 4: track1.title:TBlah blah "],
Just [" 5: track1.title:TBlah blah"],
Just [" 6: track1.title:TBlah bla"],
Just [" 7: track1.title:TBlah bl"],
Just [" 8: track1.title:TBlah b"],
Just [" 9: track1.title:TBlah "],
Just ["10: track1.title:TBlah"],
Just ["11: track1.title:TBla"],
Just ["12: track1.title:TBl"],
Just ["13: track1.title:TB"],
Just ["14: track1.title:T"]]
,
testRegex "^[W-c]+$" []
["WXY_^abc",
"*** Failers",
"wxy"]
[Just [" 0: WXY_^abc"],
Nothing,
Nothing]
,
testRegex "^[W-c]+$" [caseless]
["WXY_^abc",
"wxy_^ABC"]
[Just [" 0: WXY_^abc"],
Just [" 0: wxy_^ABC"]]
,
testRegex "^[\\x3f-\\x5F]+$" [caseless]
["WXY_^abc",
"wxy_^ABC"]
[Just [" 0: WXY_^abc"],
Just [" 0: wxy_^ABC"]]
,
testRegex "^abc$" [ERROR]
["abc",
"qqq\\nabc",
"abc\\nzzz",
"qqq\\nabc\\nzzz"]
[Just [" 0: abc"],
Just [" 0: abc"],
Just [" 0: abc"],
Just [" 0: abc"]]
,
testRegex "^abc$" []
["abc",
"*** Failers",
"qqq\\nabc",
"abc\\nzzz",
"qqq\\nabc\\nzzz"]
[Just [" 0: abc"],
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "\\Aabc\\Z" [ERROR]
["abc",
"abc\\n ",
"*** Failers",
"qqq\\nabc",
"abc\\nzzz",
"qqq\\nabc\\nzzz",
"",
"/\\A(.)*\\Z/s",
"abc\\ndef"]
[Just [" 0: abc"],
Just [" 0: abc"],
Nothing,
Nothing,
Nothing,
Nothing,
Just ["/\\A(.)*\\Z/s"],
Just [" 0: abc\\x0adef"]]
,
testRegex "\\A(.)*\\Z" [ERROR]
["*** Failers",
"abc\\ndef"]
[Just [" 0: *** Failers"],
Nothing]
,
testRegex "(?:b)|(?::+)" []
["b::c",
"c::b"]
[Just [" 0: b"],
Just [" 0: ::"],
Just [" 1: :"]]
,
testRegex "[-az]+" []
["az-",
"*** Failers",
"b"]
[Just [" 0: az-"],
Just [" 1: az"],
Just [" 2: a"],
Just [" 0: a"],
Nothing]
,
testRegex "[az-]+" []
["za-",
"*** Failers",
"b"]
[Just [" 0: za-"],
Just [" 1: za"],
Just [" 2: z"],
Just [" 0: a"],
Nothing]
,
testRegex "[a\\-z]+" []
["a-z",
"*** Failers",
"b"]
[Just [" 0: a-z"],
Just [" 1: a-"],
Just [" 2: a"],
Just [" 0: a"],
Nothing]
,
testRegex "[a-z]+" []
["abcdxyz"]
[Just [" 0: abcdxyz"],
Just [" 1: abcdxy"],
Just [" 2: abcdx"],
Just [" 3: abcd"],
Just [" 4: abc"],
Just [" 5: ab"],
Just [" 6: a"]]
,
testRegex "[\\d-]+" []
["12-34",
"*** Failers",
"aaa"]
[Just [" 0: 12-34"],
Just [" 1: 12-3"],
Just [" 2: 12-"],
Just [" 3: 12"],
Just [" 4: 1"],
Nothing,
Nothing]
,
testRegex "[\\d-z]+" []
["12-34z",
"*** Failers",
"aaa"]
[Just [" 0: 12-34z"],
Just [" 1: 12-34"],
Just [" 2: 12-3"],
Just [" 3: 12-"],
Just [" 4: 12"],
Just [" 5: 1"],
Nothing,
Nothing]
,
testRegex "\\x5c" []
["\\\\"]
[Just [" 0: \\"]]
,
testRegex "\\x20Z" []
["the Zoo",
"*** Failers",
"Zulu"]
[Just [" 0: Z"],
Nothing,
Nothing]
,
testRegex "ab{3cd" []
["ab{3cd"]
[Just [" 0: ab{3cd"]]
,
testRegex "ab{3,cd" []
["ab{3,cd"]
[Just [" 0: ab{3,cd"]]
,
testRegex "ab{3,4a}cd" []
["ab{3,4a}cd"]
[Just [" 0: ab{3,4a}cd"]]
,
testRegex "{4,5a}bc" []
["{4,5a}bc"]
[Just [" 0: {4,5a}bc"]]
,
testRegex "^a.b" [ERROR]
["a\\rb",
"*** Failers",
"a\\nb"]
[Just [" 0: a\\x0db"],
Nothing,
Nothing]
,
testRegex "abc$" []
["abc",
"abc\\n",
"*** Failers",
"abc\\ndef"]
[Just [" 0: abc"],
Just [" 0: abc"],
Nothing,
Nothing]
,
testRegex "(abc)\\123" []
["abc\\x53"]
[Just [" 0: abcS"]]
,
testRegex "(abc)\\223" []
["abc\\x93"]
[Just [" 0: abc\\x93"]]
,
testRegex "(abc)\\323" []
["abc\\xd3"]
[Just [" 0: abc\\xd3"]]
,
testRegex "(abc)\\100" []
["abc\\x40",
"abc\\100"]
[Just [" 0: abc@"],
Just [" 0: abc@"]]
,
testRegex "(abc)\\1000" []
["abc\\x400",
"abc\\x40\\x30",
"abc\\1000",
"abc\\100\\x30",
"abc\\100\\060",
"abc\\100\\60"]
[Just [" 0: abc@0"],
Just [" 0: abc@0"],
Just [" 0: abc@0"],
Just [" 0: abc@0"],
Just [" 0: abc@0"],
Just [" 0: abc@0"]]
,
testRegex "abc\\81" []
["abc\\081",
"abc\\0\\x38\\x31"]
[Just [" 0: abc\\x0081"],
Just [" 0: abc\\x0081"]]
,
testRegex "abc\\91" []
["abc\\091",
"abc\\0\\x39\\x31"]
[Just [" 0: abc\\x0091"],
Just [" 0: abc\\x0091"]]
,
testRegex "(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\\12\\123" []
["abcdefghijk\\12S"]
[Just [" 0: abcdefghijk\\x0aS"]]
,
testRegex "ab\\idef" []
["abidef"]
[Just [" 0: abidef"]]
,
testRegex "a{0}bc" []
["bc"]
[Just [" 0: bc"]]
,
testRegex "(a|(bc)){0,0}?xyz" []
["xyz"]
[Just [" 0: xyz"]]
,
testRegex "abc[\\10]de" []
["abc\\010de"]
[Just [" 0: abc\\x08de"]]
,
testRegex "abc[\\1]de" []
["abc\\1de"]
[Just [" 0: abc\\x01de"]]
,
testRegex "(abc)[\\1]de" []
["abc\\1de"]
[Just [" 0: abc\\x01de"]]
,
testRegex "(?s)a.b" []
["a\\nb"]
[Just [" 0: a\\x0ab"]]
,
testRegex "^([^a])([^\\b])([^c]*)([^d]{3,4})" []
["baNOTccccd",
"baNOTcccd",
"baNOTccd",
"bacccd",
"*** Failers",
"anything",
"b\\bc ",
"baccd"]
[Just [" 0: baNOTcccc"],
Just [" 1: baNOTccc"],
Just [" 2: baNOTcc"],
Just [" 3: baNOTc"],
Just [" 4: baNOT"],
Just [" 0: baNOTccc"],
Just [" 1: baNOTcc"],
Just [" 2: baNOTc"],
Just [" 3: baNOT"],
Just [" 0: baNOTcc"],
Just [" 1: baNOTc"],
Just [" 2: baNOT"],
Just [" 0: baccc"],
Just [" 0: *** Failers"],
Just [" 1: *** Failer"],
Just [" 2: *** Faile"],
Just [" 3: *** Fail"],
Just [" 4: *** Fai"],
Just [" 5: *** Fa"],
Just [" 6: *** F"],
Nothing,
Nothing,
Nothing]
,
testRegex "[^a]" []
["Abc",
"",
"/[^a]/i",
"Abc "]
[Just [" 0: A"],
Just ["/[^a]/i"],
Just [" 0: b"]]
,
testRegex "[^a]+" []
["AAAaAbc",
"",
"/[^a]+/i",
"AAAaAbc "]
[Just [" 0: AAA"],
Just [" 1: AA"],
Just [" 2: A"],
Just ["/[^a]+/i"],
Just [" 0: bc"],
Just [" 1: b"]]
,
testRegex "[^a]+" []
["bbb\\nccc",
"",
"/[^k]$/",
"abc",
"*** Failers",
"abk ",
"",
"/[^k]{2,3}$/",
"abc",
"kbc",
"kabc ",
"*** Failers",
"abk",
"akb",
"akk "]
[Just [" 0: bbb\\x0accc"],
Just [" 1: bbb\\x0acc"],
Just [" 2: bbb\\x0ac"],
Just [" 3: bbb\\x0a"],
Just [" 4: bbb"],
Just [" 5: bb"],
Just [" 6: b"],
Just ["/[^k]$/"],
Just [" 0: c"],
Just [" 0: s"],
Nothing,
Just ["/[^k]{2,3}$/"],
Just [" 0: abc"],
Just [" 0: bc"],
Just [" 0: abc"],
Just [" 0: ers"],
Nothing,
Nothing,
Nothing]
,
testRegex "^\\d{8,}\\@.+[^k]$" []
["12345678\\@a.b.c.d",
"123456789\\@x.y.z",
"*** Failers",
"12345678\\@x.y.uk",
"1234567\\@a.b.c.d "]
[Just [" 0: 12345678@a.b.c.d"],
Just [" 0: 123456789@x.y.z"],
Nothing,
Nothing,
Nothing]
,
testRegex "[^a]" []
["aaaabcd",
"aaAabcd "]
[Just [" 0: b"],
Just [" 0: A"]]
,
testRegex "[^a]" [caseless]
["aaaabcd",
"aaAabcd "]
[Just [" 0: b"],
Just [" 0: b"]]
,
testRegex "[^az]" []
["aaaabcd",
"aaAabcd "]
[Just [" 0: b"],
Just [" 0: A"]]
,
testRegex "[^az]" [caseless]
["aaaabcd",
"aaAabcd "]
[Just [" 0: b"],
Just [" 0: b"]]
,
testRegex "\\000\\001\\002\\003\\004\\005\\006\\007\\010\\011\\012\\013\\014\\015\\016\\017\\020\\021\\022\\023\\024\\025\\026\\027\\030\\031\\032\\033\\034\\035\\036\\037\\040\\041\\042\\043\\044\\045\\046\\047\\050\\051\\052\\053\\054\\055\\056\\057\\060\\061\\062\\063\\064\\065\\066\\067\\070\\071\\072\\073\\074\\075\\076\\077\\100\\101\\102\\103\\104\\105\\106\\107\\110\\111\\112\\113\\114\\115\\116\\117\\120\\121\\122\\123\\124\\125\\126\\127\\130\\131\\132\\133\\134\\135\\136\\137\\140\\141\\142\\143\\144\\145\\146\\147\\150\\151\\152\\153\\154\\155\\156\\157\\160\\161\\162\\163\\164\\165\\166\\167\\170\\171\\172\\173\\174\\175\\176\\177\\200\\201\\202\\203\\204\\205\\206\\207\\210\\211\\212\\213\\214\\215\\216\\217\\220\\221\\222\\223\\224\\225\\226\\227\\230\\231\\232\\233\\234\\235\\236\\237\\240\\241\\242\\243\\244\\245\\246\\247\\250\\251\\252\\253\\254\\255\\256\\257\\260\\261\\262\\263\\264\\265\\266\\267\\270\\271\\272\\273\\274\\275\\276\\277\\300\\301\\302\\303\\304\\305\\306\\307\\310\\311\\312\\313\\314\\315\\316\\317\\320\\321\\322\\323\\324\\325\\326\\327\\330\\331\\332\\333\\334\\335\\336\\337\\340\\341\\342\\343\\344\\345\\346\\347\\350\\351\\352\\353\\354\\355\\356\\357\\360\\361\\362\\363\\364\\365\\366\\367\\370\\371\\372\\373\\374\\375\\376\\377" []
["\\000\\001\\002\\003\\004\\005\\006\\007\\010\\011\\012\\013\\014\\015\\016\\017\\020\\021\\022\\023\\024\\025\\026\\027\\030\\031\\032\\033\\034\\035\\036\\037\\040\\041\\042\\043\\044\\045\\046\\047\\050\\051\\052\\053\\054\\055\\056\\057\\060\\061\\062\\063\\064\\065\\066\\067\\070\\071\\072\\073\\074\\075\\076\\077\\100\\101\\102\\103\\104\\105\\106\\107\\110\\111\\112\\113\\114\\115\\116\\117\\120\\121\\122\\123\\124\\125\\126\\127\\130\\131\\132\\133\\134\\135\\136\\137\\140\\141\\142\\143\\144\\145\\146\\147\\150\\151\\152\\153\\154\\155\\156\\157\\160\\161\\162\\163\\164\\165\\166\\167\\170\\171\\172\\173\\174\\175\\176\\177\\200\\201\\202\\203\\204\\205\\206\\207\\210\\211\\212\\213\\214\\215\\216\\217\\220\\221\\222\\223\\224\\225\\226\\227\\230\\231\\232\\233\\234\\235\\236\\237\\240\\241\\242\\243\\244\\245\\246\\247\\250\\251\\252\\253\\254\\255\\256\\257\\260\\261\\262\\263\\264\\265\\266\\267\\270\\271\\272\\273\\274\\275\\276\\277\\300\\301\\302\\303\\304\\305\\306\\307\\310\\311\\312\\313\\314\\315\\316\\317\\320\\321\\322\\323\\324\\325\\326\\327\\330\\331\\332\\333\\334\\335\\336\\337\\340\\341\\342\\343\\344\\345\\346\\347\\350\\351\\352\\353\\354\\355\\356\\357\\360\\361\\362\\363\\364\\365\\366\\367\\370\\371\\372\\373\\374\\375\\376\\377"]
[Just [" \\000\\001\\002\\003\\004\\005\\006\\007\\010\\011\\012\\013\\014\\015\\016\\017\\020\\021\\022\\023\\024\\025\\026\\027\\030\\031\\032\\033\\034\\035\\036\\037\\040\\041\\042\\043\\044\\045\\046\\047\\050\\051\\052\\053\\054\\055\\056\\057\\060\\061\\062\\063\\064\\065\\066\\067\\070\\071\\072\\073\\074\\075\\076\\077\\100\\101\\102\\103\\104\\105\\106\\107\\110\\111\\112\\113\\114\\115\\116\\117\\120\\121\\122\\123\\124\\125\\126\\127\\130\\131\\132\\133\\134\\135\\136\\137\\140\\141\\142\\143\\144\\145\\146\\147\\150\\151\\152\\153\\154\\155\\156\\157\\160\\161\\162\\163\\164\\165\\166\\167\\170\\171\\172\\173\\174\\175\\176\\177\\200\\201\\202\\203\\204\\205\\206\\207\\210\\211\\212\\213\\214\\215\\216\\217\\220\\221\\222\\223\\224\\225\\226\\227\\230\\231\\232\\233\\234\\235\\236\\237\\240\\241\\242\\243\\244\\245\\246\\247\\250\\251\\252\\253\\254\\255\\256\\257\\260\\261\\262\\263\\264\\265\\266\\267\\270\\271\\272\\273\\274\\275\\276\\277\\300\\301\\302\\303\\304\\305\\306\\307\\310\\311\\312\\313\\314\\315\\316\\317\\320\\321\\322\\323\\324\\325\\326\\327\\330\\331\\332\\333\\334\\335\\336\\337\\340\\341\\342\\343\\344\\345\\346\\347\\350\\351\\352\\353\\354\\355\\356\\357\\360\\361\\362\\363\\364\\365\\366\\367\\370\\371\\372\\373\\374\\375\\376\\377"],
Just [" 0: \\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\x09\\x0a\\x0b\\x0c\\x0d\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\x80\\x81\\x82\\x83\\x84\\x85\\x86\\x87\\x88\\x89\\x8a\\x8b\\x8c\\x8d\\x8e\\x8f\\x90\\x91\\x92\\x93\\x94\\x95\\x96\\x97\\x98\\x99\\x9a\\x9b\\x9c\\x9d\\x9e\\x9f\\xa0\\xa1\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9\\xaa\\xab\\xac\\xad\\xae\\xaf\\xb0\\xb1\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7\\xb8\\xb9\\xba\\xbb\\xbc\\xbd\\xbe\\xbf\\xc0\\xc1\\xc2\\xc3\\xc4\\xc5\\xc6\\xc7\\xc8\\xc9\\xca\\xcb\\xcc\\xcd\\xce\\xcf\\xd0\\xd1\\xd2\\xd3\\xd4\\xd5\\xd6\\xd7\\xd8\\xd9\\xda\\xdb\\xdc\\xdd\\xde\\xdf\\xe0\\xe1\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7\\xe8\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef\\xf0\\xf1\\xf2\\xf3\\xf4\\xf5\\xf6\\xf7\\xf8\\xf9\\xfa\\xfb\\xfc\\xfd\\xfe\\xff"]]
,
testRegex "P[^*]TAIRE[^*]{1,6}?LL" []
["xxxxxxxxxxxPSTAIREISLLxxxxxxxxx"]
[Just [" 0: PSTAIREISLL"]]
,
testRegex "P[^*]TAIRE[^*]{1,}?LL" []
["xxxxxxxxxxxPSTAIREISLLxxxxxxxxx"]
[Just [" 0: PSTAIREISLL"]]
,
testRegex "(\\.\\d\\d[1-9]?)\\d+" []
["1.230003938",
"1.875000282 ",
"1.235 ",
"",
"/(\\.\\d\\d((?=0)|\\d(?=\\d)))/",
"1.230003938 ",
"1.875000282",
"*** Failers ",
"1.235 ",
"",
"/a(?)b/",
"ab ",
"",
"/\\b(foo)\\s+(\\w+)/i",
"Food is on the foo table",
"",
"/foo(.*)bar/",
"The food is under the bar in the barn.",
"",
"/foo(.*?)bar/ ",
"The food is under the bar in the barn."]
[Just [" 0: .230003938"],
Just [" 1: .23000393"],
Just [" 2: .2300039"],
Just [" 3: .230003"],
Just [" 4: .23000"],
Just [" 5: .2300"],
Just [" 6: .230"],
Just [" 0: .875000282"],
Just [" 1: .87500028"],
Just [" 2: .8750002"],
Just [" 3: .875000"],
Just [" 4: .87500"],
Just [" 5: .8750"],
Just [" 6: .875"],
Just [" 0: .235"],
Just ["/(\\.\\d\\d((?=0)|\\d(?=\\d)))/"],
Just [" 0: .230"],
Just [" 1: .23"],
Just [" 0: .875"],
Nothing,
Nothing,
Just ["/a(?)b/"],
Just [" 0: ab"],
Just ["/\\b(foo)\\s+(\\w+)/i"],
Just [" 0: foo table"],
Just [" 1: foo tabl"],
Just [" 2: foo tab"],
Just [" 3: foo ta"],
Just [" 4: foo t"],
Just ["/foo(.*)bar/"],
Just [" 0: food is under the bar in the bar"],
Just [" 1: food is under the bar"],
Just ["/foo(.*?)bar/ "],
Just [" 0: food is under the bar in the bar"],
Just [" 1: food is under the bar"]]
,
testRegex "(.*)(\\d*)" []
["I have 2 numbers: 53147",
"",
"/(.*)(\\d+)/",
"I have 2 numbers: 53147",
"",
"/(.*?)(\\d*)/",
"I have 2 numbers: 53147"]
[Just ["Matched, but too many subsidiary matches"],
Just [" 0: I have 2 numbers: 53147"],
Just [" 1: I have 2 numbers: 5314"],
Just [" 2: I have 2 numbers: 531"],
Just [" 3: I have 2 numbers: 53"],
Just [" 4: I have 2 numbers: 5"],
Just [" 5: I have 2 numbers: "],
Just [" 6: I have 2 numbers:"],
Just [" 7: I have 2 numbers"],
Just [" 8: I have 2 number"],
Just [" 9: I have 2 numbe"],
Just ["10: I have 2 numb"],
Just ["11: I have 2 num"],
Just ["12: I have 2 nu"],
Just ["13: I have 2 n"],
Just ["14: I have 2 "],
Just ["15: I have 2"],
Just ["16: I have "],
Just ["17: I have"],
Just ["18: I hav"],
Just ["19: I ha"],
Just ["20: I h"],
Just ["21: I "],
Just ["/(.*)(\\d+)/"],
Just [" 0: I have 2 numbers: 53147"],
Just [" 1: I have 2 numbers: 5314"],
Just [" 2: I have 2 numbers: 531"],
Just [" 3: I have 2 numbers: 53"],
Just [" 4: I have 2 numbers: 5"],
Just [" 5: I have 2"],
Just ["/(.*?)(\\d*)/"],
Just ["Matched, but too many subsidiary matches"],
Just [" 0: I have 2 numbers: 53147"],
Just [" 1: I have 2 numbers: 5314"],
Just [" 2: I have 2 numbers: 531"],
Just [" 3: I have 2 numbers: 53"],
Just [" 4: I have 2 numbers: 5"],
Just [" 5: I have 2 numbers: "],
Just [" 6: I have 2 numbers:"],
Just [" 7: I have 2 numbers"],
Just [" 8: I have 2 number"],
Just [" 9: I have 2 numbe"],
Just ["10: I have 2 numb"],
Just ["11: I have 2 num"],
Just ["12: I have 2 nu"],
Just ["13: I have 2 n"],
Just ["14: I have 2 "],
Just ["15: I have 2"],
Just ["16: I have "],
Just ["17: I have"],
Just ["18: I hav"],
Just ["19: I ha"],
Just ["20: I h"],
Just ["21: I "]]
,
testRegex "(.*?)(\\d+)" []
["I have 2 numbers: 53147"]
[Just [" 0: I have 2 numbers: 53147"],
Just [" 1: I have 2 numbers: 5314"],
Just [" 2: I have 2 numbers: 531"],
Just [" 3: I have 2 numbers: 53"],
Just [" 4: I have 2 numbers: 5"],
Just [" 5: I have 2"]]
,
testRegex "(.*)(\\d+)$" []
["I have 2 numbers: 53147"]
[Just [" 0: I have 2 numbers: 53147"]]
,
testRegex "(.*?)(\\d+)$" []
["I have 2 numbers: 53147"]
[Just [" 0: I have 2 numbers: 53147"]]
,
testRegex "(.*)\\b(\\d+)$" []
["I have 2 numbers: 53147"]
[Just [" 0: I have 2 numbers: 53147"]]
,
testRegex "(.*\\D)(\\d+)$" []
["I have 2 numbers: 53147"]
[Just [" 0: I have 2 numbers: 53147"]]
,
testRegex "^\\D*(?!123)" []
["ABC123",
"",
"/^(\\D*)(?=\\d)(?!123)/",
"ABC445",
"*** Failers",
"ABC123",
"",
"/^[W-]46]/",
"W46]789 ",
"-46]789",
"*** Failers",
"Wall",
"Zebra",
"42",
"[abcd] ",
"]abcd[",
"",
"/^[W-\\]46]/",
"W46]789 ",
"Wall",
"Zebra",
"Xylophone ",
"42",
"[abcd] ",
"]abcd[",
"\\\\backslash ",
"*** Failers",
"-46]789",
"well",
"",
"/\\d\\d\\/\\d\\d\\/\\d\\d\\d\\d/",
"01/01/2000"]
[Just [" 0: AB"],
Just [" 1: A"],
Just [" 2: "],
Just ["/^(\\D*)(?=\\d)(?!123)/"],
Just [" 0: ABC"],
Nothing,
Nothing,
Just ["/^[W-]46]/"],
Just [" 0: W46]"],
Just [" 0: -46]"],
Nothing,
Nothing,
Nothing,
Nothing,
Nothing,
Nothing,
Just ["/^[W-\\]46]/"],
Just [" 0: W"],
Just [" 0: W"],
Just [" 0: Z"],
Just [" 0: X"],
Just [" 0: 4"],
Just [" 0: ["],
Just [" 0: ]"],
Just [" 0: \\"],
Nothing,
Nothing,
Nothing,
Just ["/\\d\\d\\/\\d\\d\\/\\d\\d\\d\\d/"],
Just [" 0: 01/01/2000"]]
,
testRegex "word (?:[a-zA-Z0-9]+ ){0,10}otherword" []
["word cat dog elephant mussel cow horse canary baboon snake shark otherword",
"word cat dog elephant mussel cow horse canary baboon snake shark"]
[Just [" 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword"],
Nothing]
,
testRegex "word (?:[a-zA-Z0-9]+ ){0,300}otherword" []
["word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope"]
[Nothing]
,
testRegex "^(a){0,0}" []
["bcd",
"abc",
"aab "]
[Just [" 0: "],
Just [" 0: "],
Just [" 0: "]]
,
testRegex "^(a){0,1}" []
["bcd",
"abc",
"aab "]
[Just [" 0: "],
Just [" 0: a"],
Just [" 1: "],
Just [" 0: a"],
Just [" 1: "]]
,
testRegex "^(a){0,2}" []
["bcd",
"abc",
"aab "]
[Just [" 0: "],
Just [" 0: a"],
Just [" 1: "],
Just [" 0: aa"],
Just [" 1: a"],
Just [" 2: "]]
,
testRegex "^(a){0,3}" []
["bcd",
"abc",
"aab",
"aaa "]
[Just [" 0: "],
Just [" 0: a"],
Just [" 1: "],
Just [" 0: aa"],
Just [" 1: a"],
Just [" 2: "],
Just [" 0: aaa"],
Just [" 1: aa"],
Just [" 2: a"],
Just [" 3: "]]
,
testRegex "^(a){0,}" []
["bcd",
"abc",
"aab",
"aaa",
"aaaaaaaa "]
[Just [" 0: "],
Just [" 0: a"],
Just [" 1: "],
Just [" 0: aa"],
Just [" 1: a"],
Just [" 2: "],
Just [" 0: aaa"],
Just [" 1: aa"],
Just [" 2: a"],
Just [" 3: "],
Just [" 0: aaaaaaaa"],
Just [" 1: aaaaaaa"],
Just [" 2: aaaaaa"],
Just [" 3: aaaaa"],
Just [" 4: aaaa"],
Just [" 5: aaa"],
Just [" 6: aa"],
Just [" 7: a"],
Just [" 8: "]]
,
testRegex "^(a){1,1}" []
["bcd",
"abc",
"aab "]
[Nothing,
Just [" 0: a"],
Just [" 0: a"]]
,
testRegex "^(a){1,2}" []
["bcd",
"abc",
"aab "]
[Nothing,
Just [" 0: a"],
Just [" 0: aa"],
Just [" 1: a"]]
,
testRegex "^(a){1,3}" []
["bcd",
"abc",
"aab",
"aaa "]
[Nothing,
Just [" 0: a"],
Just [" 0: aa"],
Just [" 1: a"],
Just [" 0: aaa"],
Just [" 1: aa"],
Just [" 2: a"]]
,
testRegex "^(a){1,}" []
["bcd",
"abc",
"aab",
"aaa",
"aaaaaaaa "]
[Nothing,
Just [" 0: a"],
Just [" 0: aa"],
Just [" 1: a"],
Just [" 0: aaa"],
Just [" 1: aa"],
Just [" 2: a"],
Just [" 0: aaaaaaaa"],
Just [" 1: aaaaaaa"],
Just [" 2: aaaaaa"],
Just [" 3: aaaaa"],
Just [" 4: aaaa"],
Just [" 5: aaa"],
Just [" 6: aa"],
Just [" 7: a"]]
,
testRegex ".*\\.gif" []
["borfle\\nbib.gif\\nno"]
[Just [" 0: bib.gif"]]
,
testRegex ".{0,}\\.gif" []
["borfle\\nbib.gif\\nno"]
[Just [" 0: bib.gif"]]
,
testRegex ".*\\.gif" [ERROR]
["borfle\\nbib.gif\\nno"]
[Just [" 0: bib.gif"]]
,
testRegex ".*\\.gif" [ERROR]
["borfle\\nbib.gif\\nno"]
[Just [" 0: borfle\\x0abib.gif"]]
,
testRegex ".*\\.gif" [ERROR]
["borfle\\nbib.gif\\nno",
"",
"/.*$/",
"borfle\\nbib.gif\\nno"]
[Just [" 0: borfle\\x0abib.gif"],
Just ["/.*$/"],
Just [" 0: no"]]
,
testRegex ".*$" [ERROR]
["borfle\\nbib.gif\\nno"]
[Just [" 0: borfle"]]
,
testRegex ".*$" [ERROR]
["borfle\\nbib.gif\\nno"]
[Just [" 0: borfle\\x0abib.gif\\x0ano"]]
,
testRegex ".*$" [ERROR]
["borfle\\nbib.gif\\nno",
"",
"/.*$/",
"borfle\\nbib.gif\\nno\\n"]
[Just [" 0: borfle\\x0abib.gif\\x0ano"],
Just [" 1: borfle\\x0abib.gif"],
Just [" 2: borfle"],
Just ["/.*$/"],
Just [" 0: no"]]
,
testRegex ".*$" [ERROR]
["borfle\\nbib.gif\\nno\\n"]
[Just [" 0: borfle"]]
,
testRegex ".*$" [ERROR]
["borfle\\nbib.gif\\nno\\n"]
[Just [" 0: borfle\\x0abib.gif\\x0ano\\x0a"],
Just [" 1: borfle\\x0abib.gif\\x0ano"]]
,
testRegex ".*$" [ERROR]
["borfle\\nbib.gif\\nno\\n",
"",
"/(.*X|^B)/",
"abcde\\n1234Xyz",
"BarFoo ",
"*** Failers",
"abcde\\nBar "]
[Just [" 0: borfle\\x0abib.gif\\x0ano\\x0a"],
Just [" 1: borfle\\x0abib.gif\\x0ano"],
Just [" 2: borfle\\x0abib.gif"],
Just [" 3: borfle"],
Just ["/(.*X|^B)/"],
Just [" 0: 1234X"],
Just [" 0: B"],
Nothing,
Nothing]
,
testRegex "(.*X|^B)" [ERROR]
["abcde\\n1234Xyz",
"BarFoo ",
"abcde\\nBar "]
[Just [" 0: 1234X"],
Just [" 0: B"],
Just [" 0: B"]]
,
testRegex "(.*X|^B)" [ERROR]
["abcde\\n1234Xyz",
"BarFoo ",
"*** Failers",
"abcde\\nBar "]
[Just [" 0: abcde\\x0a1234X"],
Just [" 0: B"],
Nothing,
Nothing]
,
testRegex "(.*X|^B)" [ERROR]
["abcde\\n1234Xyz",
"BarFoo ",
"abcde\\nBar "]
[Just [" 0: abcde\\x0a1234X"],
Just [" 0: B"],
Just [" 0: B"]]
,
testRegex "(?s)(.*X|^B)" []
["abcde\\n1234Xyz",
"BarFoo ",
"*** Failers ",
"abcde\\nBar "]
[Just [" 0: abcde\\x0a1234X"],
Just [" 0: B"],
Nothing,
Nothing]
,
testRegex "(?s:.*X|^B)" []
["abcde\\n1234Xyz",
"BarFoo ",
"*** Failers ",
"abcde\\nBar "]
[Just [" 0: abcde\\x0a1234X"],
Just [" 0: B"],
Nothing,
Nothing]
,
testRegex "^.*B" []
["**** Failers",
"abc\\nB",
"",
"/(?s)^.*B/",
"abc\\nB"]
[Nothing,
Nothing,
Just ["/(?s)^.*B/"],
Just [" 0: abc\\x0aB"]]
,
testRegex "(?m)^.*B" []
["abc\\nB",
"",
"/(?ms)^.*B/",
"abc\\nB"]
[Just [" 0: B"],
Just ["/(?ms)^.*B/"],
Just [" 0: abc\\x0aB"]]
,
testRegex "(?ms)^B" []
["abc\\nB"]
[Just [" 0: B"]]
,
testRegex "(?s)B$" []
["B\\n"]
[Just [" 0: B"]]
,
testRegex "^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]" []
["123456654321",
"",
"/^\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d/",
"123456654321 "]
[Just [" 0: 123456654321"],
Just ["/^\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d\\d/"],
Just [" 0: 123456654321"]]
,
testRegex "^[\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d][\\d]" []
["123456654321",
"",
"/^[abc]{12}/",
"abcabcabcabc",
"",
"/^[a-c]{12}/",
"abcabcabcabc",
"",
"/^(a|b|c){12}/",
"abcabcabcabc "]
[Just [" 0: 123456654321"],
Just ["/^[abc]{12}/"],
Just [" 0: abcabcabcabc"],
Just ["/^[a-c]{12}/"],
Just [" 0: abcabcabcabc"],
Just ["/^(a|b|c){12}/"],
Just [" 0: abcabcabcabc"]]
,
testRegex "^[abcdefghijklmnopqrstuvwxy0123456789]" []
["n",
"*** Failers ",
"z "]
[Just [" 0: n"],
Nothing,
Nothing]
,
testRegex "abcde{0,0}" []
["abcd",
"*** Failers",
"abce "]
[Just [" 0: abcd"],
Nothing,
Nothing]
,
testRegex "ab[cd]{0,0}e" []
["abe",
"*** Failers",
"abcde ",
"",
"/ab(c){0,0}d/",
"abd",
"*** Failers",
"abcd "]
[Just [" 0: abe"],
Nothing,
Nothing,
Just ["/ab(c){0,0}d/"],
Just [" 0: abd"],
Nothing,
Nothing]
,
testRegex "a(b*)" []
["a",
"ab",
"abbbb",
"*** Failers",
"bbbbb ",
"",
"/ab\\d{0}e/",
"abe",
"*** Failers",
"ab1e ",
"",
"/\"([^\\\\\"]+|\\\\.)*\"/",
"the \\\"quick\\\" brown fox",
"\\\"the \\\\\\\"quick\\\\\\\" brown fox\\\" "]
[Just [" 0: a"],
Just [" 0: ab"],
Just [" 1: a"],
Just [" 0: abbbb"],
Just [" 1: abbb"],
Just [" 2: abb"],
Just [" 3: ab"],
Just [" 4: a"],
Just [" 0: a"],
Nothing,
Just ["/ab\\d{0}e/"],
Just [" 0: abe"],
Nothing,
Nothing,
Just ["/\"([^\\\\\"]+|\\\\.)*\"/"],
Just [" 0: \"quick\""],
Just [" 0: \"the \\\"quick\\\" brown fox\""]]
,
testRegex ".*?" [ERROR]
["abc",
"",
"/\\b/g+",
"abc "]
[Just [" 0: abc"],
Just [" 0+ "],
Just [" 1: ab"],
Just [" 2: a"],
Just [" 3: "],
Just [" 0: "],
Just [" 0+ "],
Just ["/\\b/g+"],
Just [" 0: "],
Just [" 0+ abc"],
Just [" 0: "],
Just [" 0+ "]]
,
testRegex "\\b" [ERROR]
["abc "]
[Just [" 0: "],
Just [" 0+ abc"],
Just [" 0: "],
Just [" 0+ "]]
,
testRegex "" [ERROR]
["abc"]
[Just [" 0: "],
Just [" 0: "],
Just [" 0: "],
Just [" 0: "]]
,
testRegex "<tr([\\w\\W\\s\\d][^<>]{0,})><TD([\\w\\W\\s\\d][^<>]{0,})>([\\d]{0,}\\.)(.*)((<BR>([\\w\\W\\s\\d][^<>]{0,})|[\\s]{0,}))<\\/a><\\/TD><TD([\\w\\W\\s\\d][^<>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><TD([\\w\\W\\s\\d][^<>]{0,})>([\\w\\W\\s\\d][^<>]{0,})<\\/TD><\\/TR>" [ERROR]
["<TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>"]
[Just [" 0: <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>"]]
,
testRegex "a[^a]b" []
["acb",
"a\\nb",
"",
"/a.b/",
"acb",
"*** Failers ",
"a\\nb ",
"",
"/a[^a]b/s",
"acb",
"a\\nb ",
"",
"/a.b/s",
"acb",
"a\\nb "]
[Just [" 0: acb"],
Just [" 0: a\\x0ab"],
Just ["/a.b/"],
Just [" 0: acb"],
Nothing,
Nothing,
Just ["/a[^a]b/s"],
Just [" 0: acb"],
Just [" 0: a\\x0ab"],
Just ["/a.b/s"],
Just [" 0: acb"],
Just [" 0: a\\x0ab"]]
,
testRegex "^(b+?|a){1,2}?c" []
["bac",
"bbac",
"bbbac",
"bbbbac",
"bbbbbac "]
[Just [" 0: bac"],
Just [" 0: bbac"],
Just [" 0: bbbac"],
Just [" 0: bbbbac"],
Just [" 0: bbbbbac"]]
,
testRegex "^(b+|a){1,2}?c" []
["bac",
"bbac",
"bbbac",
"bbbbac",
"bbbbbac ",
"",
"/(?!\\A)x/m",
"x\\nb\\n",
"a\\bx\\n ",
"",
"/\\x0{ab}/",
"\\0{ab} "]
[Just [" 0: bac"],
Just [" 0: bbac"],
Just [" 0: bbbac"],
Just [" 0: bbbbac"],
Just [" 0: bbbbbac"],
Just ["/(?!\\A)x/m"],
Nothing,
Just [" 0: x"],
Just ["/\\x0{ab}/"],
Just [" 0: \\x00{ab}"]]
,
testRegex "(A|B)*?CD" []
["CD ",
"",
"/(A|B)*CD/",
"CD "]
[Just [" 0: CD"],
Just ["/(A|B)*CD/"],
Just [" 0: CD"]]
,
testRegex "(?<!bar)foo" []
["foo",
"catfood",
"arfootle",
"rfoosh",
"*** Failers",
"barfoo",
"towbarfoo"]
[Just [" 0: foo"],
Just [" 0: foo"],
Just [" 0: foo"],
Just [" 0: foo"],
Nothing,
Nothing,
Nothing]
,
testRegex "\\w{3}(?<!bar)foo" []
["catfood",
"*** Failers",
"foo",
"barfoo",
"towbarfoo"]
[Just [" 0: catfoo"],
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "(?<=(foo)a)bar" []
["fooabar",
"*** Failers",
"bar",
"foobbar",
"",
"/\\Aabc\\z/m",
"abc",
"*** Failers",
"abc\\n ",
"qqq\\nabc",
"abc\\nzzz",
"qqq\\nabc\\nzzz"]
[Just [" 0: bar"],
Nothing,
Nothing,
Nothing,
Just ["/\\Aabc\\z/m"],
Just [" 0: abc"],
Nothing,
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "(?>.*/)foo" [ERROR]
["/this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/"]
[Nothing]
,
testRegex "(?>.*/)foo" [ERROR]
["/this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo"]
[Just [" 0: /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo"]]
,
testRegex "(?>(\\.\\d\\d[1-9]?))\\d+" []
["1.230003938",
"1.875000282",
"*** Failers ",
"1.235 "]
[Just [" 0: .230003938"],
Just [" 1: .23000393"],
Just [" 2: .2300039"],
Just [" 3: .230003"],
Just [" 4: .23000"],
Just [" 5: .2300"],
Just [" 6: .230"],
Just [" 0: .875000282"],
Just [" 1: .87500028"],
Just [" 2: .8750002"],
Just [" 3: .875000"],
Just [" 4: .87500"],
Just [" 5: .8750"],
Nothing,
Nothing]
,
testRegex "^((?>\\w+)|(?>\\s+))*$" []
["now is the time for all good men to come to the aid of the party",
"*** Failers",
"this is not a line with only words and spaces!",
"",
"/(\\d+)(\\w)/",
"12345a",
"12345+ "]
[Just [" 0: now is the time for all good men to come to the aid of the party"],
Nothing,
Nothing,
Just ["/(\\d+)(\\w)/"],
Just [" 0: 12345a"],
Just [" 1: 12345"],
Just [" 2: 1234"],
Just [" 3: 123"],
Just [" 4: 12"],
Just [" 0: 12345"],
Just [" 1: 1234"],
Just [" 2: 123"],
Just [" 3: 12"]]
,
testRegex "((?>\\d+))(\\w)" []
["12345a",
"*** Failers",
"12345+ "]
[Just [" 0: 12345a"],
Nothing,
Nothing]
,
testRegex "(?>a+)b" []
["aaab"]
[Just [" 0: aaab"]]
,
testRegex "((?>a+)b)" []
["aaab"]
[Just [" 0: aaab"]]
,
testRegex "(?>(a+))b" []
["aaab"]
[Just [" 0: aaab"]]
,
testRegex "(?>b)+" []
["aaabbbccc"]
[Just [" 0: bbb"],
Just [" 1: bb"],
Just [" 2: b"]]
,
testRegex "(?>a+|b+|c+)*c" []
["aaabbbbccccd",
"",
"/(a+|b+|c+)*c/",
"aaabbbbccccd"]
[Just [" 0: aaabbbbcccc"],
Just [" 1: aaabbbbc"],
Just ["/(a+|b+|c+)*c/"],
Just [" 0: aaabbbbcccc"],
Just [" 1: aaabbbbccc"],
Just [" 2: aaabbbbcc"],
Just [" 3: aaabbbbc"]]
,
testRegex "((?>[^()]+)|\\([^()]*\\))+" []
["((abc(ade)ufh()()x",
"",
"/\\(((?>[^()]+)|\\([^()]+\\))+\\)/ ",
"(abc)",
"(abc(def)xyz)",
"*** Failers",
"((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "]
[Just [" 0: abc(ade)ufh()()x"],
Just [" 1: abc(ade)ufh()()"],
Just [" 2: abc(ade)ufh()"],
Just [" 3: abc(ade)ufh"],
Just [" 4: abc(ade)"],
Just [" 5: abc"],
Just ["/\\(((?>[^()]+)|\\([^()]+\\))+\\)/ "],
Just [" 0: (abc)"],
Just [" 0: (abc(def)xyz)"],
Nothing,
Nothing]
,
testRegex "a(?-i)b" [caseless]
["ab",
"Ab",
"*** Failers ",
"aB",
"AB",
"",
"/(a (?x)b c)d e/",
"a bcd e",
"*** Failers",
"a b cd e",
"abcd e ",
"a bcde ",
"",
"/(a b(?x)c d (?-x)e f)/",
"a bcde f",
"*** Failers",
"abcdef "]
[Just [" 0: ab"],
Just [" 0: Ab"],
Nothing,
Nothing,
Nothing,
Just ["/(a (?x)b c)d e/"],
Just [" 0: a bcd e"],
Nothing,
Nothing,
Nothing,
Nothing,
Just ["/(a b(?x)c d (?-x)e f)/"],
Just [" 0: a bcde f"],
Nothing,
Nothing]
,
testRegex "(a(?i)b)c" []
["abc",
"aBc",
"*** Failers",
"abC",
"aBC ",
"Abc",
"ABc",
"ABC",
"AbC",
"",
"/a(?i:b)c/",
"abc",
"aBc",
"*** Failers ",
"ABC",
"abC",
"aBC",
"",
"/a(?i:b)*c/",
"aBc",
"aBBc",
"*** Failers ",
"aBC",
"aBBC",
"",
"/a(?=b(?i)c)\\w\\wd/",
"abcd",
"abCd",
"*** Failers",
"aBCd",
"abcD ",
"",
"/(?s-i:more.*than).*million/i",
"more than million",
"more than MILLION",
"more \\n than Million ",
"*** Failers",
"MORE THAN MILLION ",
"more \\n than \\n million "]
[Just [" 0: abc"],
Just [" 0: aBc"],
Nothing,
Nothing,
Nothing,
Nothing,
Nothing,
Nothing,
Nothing,
Just ["/a(?i:b)c/"],
Just [" 0: abc"],
Just [" 0: aBc"],
Nothing,
Nothing,
Nothing,
Nothing,
Just ["/a(?i:b)*c/"],
Just [" 0: aBc"],
Just [" 0: aBBc"],
Nothing,
Nothing,
Nothing,
Just ["/a(?=b(?i)c)\\w\\wd/"],
Just [" 0: abcd"],
Just [" 0: abCd"],
Nothing,
Nothing,
Nothing,
Just ["/(?s-i:more.*than).*million/i"],
Just [" 0: more than million"],
Just [" 0: more than MILLION"],
Just [" 0: more \\x0a than Million"],
Nothing,
Nothing,
Nothing]
,
testRegex "(?:(?s-i)more.*than).*million" [caseless]
["more than million",
"more than MILLION",
"more \\n than Million ",
"*** Failers",
"MORE THAN MILLION ",
"more \\n than \\n million ",
"",
"/(?>a(?i)b+)+c/ ",
"abc",
"aBbc",
"aBBc ",
"*** Failers",
"Abc",
"abAb ",
"abbC ",
"",
"/(?=a(?i)b)\\w\\wc/",
"abc",
"aBc",
"*** Failers",
"Ab ",
"abC",
"aBC ",
"",
"/(?<=a(?i)b)(\\w\\w)c/",
"abxxc",
"aBxxc",
"*** Failers",
"Abxxc",
"ABxxc",
"abxxC "]
[Just [" 0: more than million"],
Just [" 0: more than MILLION"],
Just [" 0: more \\x0a than Million"],
Nothing,
Nothing,
Nothing,
Just ["/(?>a(?i)b+)+c/ "],
Just [" 0: abc"],
Just [" 0: aBbc"],
Just [" 0: aBBc"],
Nothing,
Nothing,
Nothing,
Nothing,
Just ["/(?=a(?i)b)\\w\\wc/"],
Just [" 0: abc"],
Just [" 0: aBc"],
Nothing,
Nothing,
Nothing,
Nothing,
Just ["/(?<=a(?i)b)(\\w\\w)c/"],
Just [" 0: xxc"],
Just [" 0: xxc"],
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "^(?(?=abc)\\w{3}:|\\d\\d)$" []
["abc:",
"12",
"*** Failers",
"123",
"xyz "]
[Just [" 0: abc:"],
Just [" 0: 12"],
Nothing,
Nothing,
Nothing]
,
testRegex "^(?(?!abc)\\d\\d|\\w{3}:)$" []
["abc:",
"12",
"*** Failers",
"123",
"xyz ",
"",
"/(?(?<=foo)bar|cat)/",
"foobar",
"cat",
"fcat",
"focat ",
"*** Failers",
"foocat "]
[Just [" 0: abc:"],
Just [" 0: 12"],
Nothing,
Nothing,
Nothing,
Just ["/(?(?<=foo)bar|cat)/"],
Just [" 0: bar"],
Just [" 0: cat"],
Just [" 0: cat"],
Just [" 0: cat"],
Nothing,
Nothing]
,
testRegex "(?(?<!foo)cat|bar)" []
["foobar",
"cat",
"fcat",
"focat ",
"*** Failers",
"foocat "]
[Just [" 0: bar"],
Just [" 0: cat"],
Just [" 0: cat"],
Just [" 0: cat"],
Nothing,
Nothing]
,
testRegex "(?>a*)*" []
["a",
"aa",
"aaaa",
"",
"/(abc|)+/",
"abc",
"abcabc",
"abcabcabc",
"xyz "]
[Just [" 0: a"],
Just [" 1: "],
Just [" 0: aa"],
Just [" 1: "],
Just [" 0: aaaa"],
Just [" 1: "],
Just ["/(abc|)+/"],
Just [" 0: abc"],
Just [" 1: "],
Just [" 0: abcabc"],
Just [" 1: abc"],
Just [" 2: "],
Just [" 0: abcabcabc"],
Just [" 1: abcabc"],
Just [" 2: abc"],
Just [" 3: "],
Just [" 0: "]]
,
testRegex "([a]*)*" []
["a",
"aaaaa ",
"",
"/([ab]*)*/",
"a",
"b",
"ababab",
"aaaabcde",
"bbbb ",
"",
"/([^a]*)*/",
"b",
"bbbb",
"aaa ",
"",
"/([^ab]*)*/",
"cccc",
"abab ",
"",
"/([a]*?)*/",
"a",
"aaaa ",
"",
"/([ab]*?)*/",
"a",
"b",
"abab",
"baba ",
"",
"/([^a]*?)*/",
"b",
"bbbb",
"aaa ",
"",
"/([^ab]*?)*/",
"c",
"cccc",
"baba ",
"",
"/(?>a*)*/",
"a",
"aaabcde ",
"",
"/((?>a*))*/",
"aaaaa",
"aabbaa ",
"",
"/((?>a*?))*/",
"aaaaa",
"aabbaa "]
[Just [" 0: a"],
Just [" 1: "],
Just [" 0: aaaaa"],
Just [" 1: aaaa"],
Just [" 2: aaa"],
Just [" 3: aa"],
Just [" 4: a"],
Just [" 5: "],
Just ["/([ab]*)*/"],
Just [" 0: a"],
Just [" 1: "],
Just [" 0: b"],
Just [" 1: "],
Just [" 0: ababab"],
Just [" 1: ababa"],
Just [" 2: abab"],
Just [" 3: aba"],
Just [" 4: ab"],
Just [" 5: a"],
Just [" 6: "],
Just [" 0: aaaab"],
Just [" 1: aaaa"],
Just [" 2: aaa"],
Just [" 3: aa"],
Just [" 4: a"],
Just [" 5: "],
Just [" 0: bbbb"],
Just [" 1: bbb"],
Just [" 2: bb"],
Just [" 3: b"],
Just [" 4: "],
Just ["/([^a]*)*/"],
Just [" 0: b"],
Just [" 1: "],
Just [" 0: bbbb"],
Just [" 1: bbb"],
Just [" 2: bb"],
Just [" 3: b"],
Just [" 4: "],
Just [" 0: "],
Just ["/([^ab]*)*/"],
Just [" 0: cccc"],
Just [" 1: ccc"],
Just [" 2: cc"],
Just [" 3: c"],
Just [" 4: "],
Just [" 0: "],
Just ["/([a]*?)*/"],
Just [" 0: a"],
Just [" 1: "],
Just [" 0: aaaa"],
Just [" 1: aaa"],
Just [" 2: aa"],
Just [" 3: a"],
Just [" 4: "],
Just ["/([ab]*?)*/"],
Just [" 0: a"],
Just [" 1: "],
Just [" 0: b"],
Just [" 1: "],
Just [" 0: abab"],
Just [" 1: aba"],
Just [" 2: ab"],
Just [" 3: a"],
Just [" 4: "],
Just [" 0: baba"],
Just [" 1: bab"],
Just [" 2: ba"],
Just [" 3: b"],
Just [" 4: "],
Just ["/([^a]*?)*/"],
Just [" 0: b"],
Just [" 1: "],
Just [" 0: bbbb"],
Just [" 1: bbb"],
Just [" 2: bb"],
Just [" 3: b"],
Just [" 4: "],
Just [" 0: "],
Just ["/([^ab]*?)*/"],
Just [" 0: c"],
Just [" 1: "],
Just [" 0: cccc"],
Just [" 1: ccc"],
Just [" 2: cc"],
Just [" 3: c"],
Just [" 4: "],
Just [" 0: "],
Just ["/(?>a*)*/"],
Just [" 0: a"],
Just [" 1: "],
Just [" 0: aaa"],
Just [" 1: "],
Just ["/((?>a*))*/"],
Just [" 0: aaaaa"],
Just [" 1: "],
Just [" 0: aa"],
Just [" 1: "],
Just ["/((?>a*?))*/"],
Just [" 0: aaaaa"],
Just [" 1: "],
Just [" 0: aa"],
Just [" 1: "]]
,
testRegex "(?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) " [ERROR]
["12-sep-98",
"12-09-98",
"*** Failers",
"sep-12-98",
"",
"/(?i:saturday|sunday)/",
"saturday",
"sunday",
"Saturday",
"Sunday",
"SATURDAY",
"SUNDAY",
"SunDay",
"",
"/(a(?i)bc|BB)x/",
"abcx",
"aBCx",
"bbx",
"BBx",
"*** Failers",
"abcX",
"aBCX",
"bbX",
"BBX "]
[Just [" 0: 12-sep-98"],
Just [" 0: 12-09-98"],
Nothing,
Nothing,
Just ["/(?i:saturday|sunday)/"],
Just [" 0: saturday"],
Just [" 0: sunday"],
Just [" 0: Saturday"],
Just [" 0: Sunday"],
Just [" 0: SATURDAY"],
Just [" 0: SUNDAY"],
Just [" 0: SunDay"],
Just ["/(a(?i)bc|BB)x/"],
Just [" 0: abcx"],
Just [" 0: aBCx"],
Just [" 0: bbx"],
Just [" 0: BBx"],
Nothing,
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "^([ab](?i)[cd]|[ef])" []
["ac",
"aC",
"bD",
"elephant",
"Europe ",
"frog",
"France",
"*** Failers",
"Africa "]
[Just [" 0: ac"],
Just [" 0: aC"],
Just [" 0: bD"],
Just [" 0: e"],
Just [" 0: E"],
Just [" 0: f"],
Just [" 0: F"],
Nothing,
Nothing]
,
testRegex "^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)" []
["ab",
"aBd",
"xy",
"xY",
"zebra",
"Zambesi",
"*** Failers",
"aCD ",
"XY "]
[Just [" 0: ab"],
Just [" 0: aBd"],
Just [" 0: xy"],
Just [" 0: xY"],
Just [" 0: z"],
Just [" 0: Z"],
Nothing,
Nothing,
Nothing]
,
testRegex "(?<=foo\\n)^bar" [ERROR]
["foo\\nbar",
"*** Failers",
"bar",
"baz\\nbar "]
[Just [" 0: bar"],
Nothing,
Nothing,
Nothing]
,
testRegex "(?<=(?<!foo)bar)baz" []
["barbaz",
"barbarbaz ",
"koobarbaz ",
"*** Failers",
"baz",
"foobarbaz "]
[Just [" 0: baz"],
Just [" 0: baz"],
Just [" 0: baz"],
Nothing,
Nothing,
Nothing]
,
testRegex "The following tests are taken from the Perl 5.005 test suite; some of them" []
["/are compatible with 5.004, but I'd rather not have to sort them out./"]
[Just ["/are compatible with 5.004, but I'd rather not have to sort them out./"],
Nothing]
,
testRegex "abc" []
["abc",
"xabcy",
"ababc",
"*** Failers",
"xbc",
"axc",
"abx"]
[Just [" 0: abc"],
Just [" 0: abc"],
Just [" 0: abc"],
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "ab*c" []
["abc"]
[Just [" 0: abc"]]
,
testRegex "ab*bc" []
["abc",
"abbc",
"abbbbc"]
[Just [" 0: abc"],
Just [" 0: abbc"],
Just [" 0: abbbbc"]]
,
testRegex ".{1}" []
["abbbbc"]
[Just [" 0: a"]]
,
testRegex ".{3,4}" []
["abbbbc"]
[Just [" 0: abbb"],
Just [" 1: abb"]]
,
testRegex "ab{0,}bc" []
["abbbbc"]
[Just [" 0: abbbbc"]]
,
testRegex "ab+bc" []
["abbc",
"*** Failers",
"abc",
"abq"]
[Just [" 0: abbc"],
Nothing,
Nothing,
Nothing]
,
testRegex "ab{1,}bc" []
[]
[]
,
testRegex "ab+bc" []
["abbbbc"]
[Just [" 0: abbbbc"]]
,
testRegex "ab{1,}bc" []
["abbbbc"]
[Just [" 0: abbbbc"]]
,
testRegex "ab{1,3}bc" []
["abbbbc"]
[Just [" 0: abbbbc"]]
,
testRegex "ab{3,4}bc" []
["abbbbc"]
[Just [" 0: abbbbc"]]
,
testRegex "ab{4,5}bc" []
["*** Failers",
"abq",
"abbbbc"]
[Nothing,
Nothing,
Nothing]
,
testRegex "ab?bc" []
["abbc",
"abc"]
[Just [" 0: abbc"],
Just [" 0: abc"]]
,
testRegex "ab{0,1}bc" []
["abc"]
[Just [" 0: abc"]]
,
testRegex "ab?bc" []
[]
[]
,
testRegex "ab?c" []
["abc"]
[Just [" 0: abc"]]
,
testRegex "ab{0,1}c" []
["abc"]
[Just [" 0: abc"]]
,
testRegex "^abc$" []
["abc",
"*** Failers",
"abbbbc",
"abcc"]
[Just [" 0: abc"],
Nothing,
Nothing,
Nothing]
,
testRegex "^abc" []
["abcc"]
[Just [" 0: abc"]]
,
testRegex "^abc$" []
[]
[]
,
testRegex "abc$" []
["aabc",
"*** Failers",
"aabc",
"aabcd"]
[Just [" 0: abc"],
Nothing,
Just [" 0: abc"],
Nothing]
,
testRegex "^" []
["abc"]
[Just [" 0: "]]
,
testRegex "$" []
["abc"]
[Just [" 0: "]]
,
testRegex "a.c" []
["abc",
"axc"]
[Just [" 0: abc"],
Just [" 0: axc"]]
,
testRegex "a.*c" []
["axyzc"]
[Just [" 0: axyzc"]]
,
testRegex "a[bc]d" []
["abd",
"*** Failers",
"axyzd",
"abc"]
[Just [" 0: abd"],
Nothing,
Nothing,
Nothing]
,
testRegex "a[b-d]e" []
["ace"]
[Just [" 0: ace"]]
,
testRegex "a[b-d]" []
["aac"]
[Just [" 0: ac"]]
,
testRegex "a[-b]" []
["a-"]
[Just [" 0: a-"]]
,
testRegex "a[b-]" []
["a-"]
[Just [" 0: a-"]]
,
testRegex "a]" []
["a]"]
[Just [" 0: a]"]]
,
testRegex "a[]]b" []
["a]b"]
[Just [" 0: a]b"]]
,
testRegex "a[^bc]d" []
["aed",
"*** Failers",
"abd",
"abd"]
[Just [" 0: aed"],
Nothing,
Nothing,
Nothing]
,
testRegex "a[^-b]c" []
["adc"]
[Just [" 0: adc"]]
,
testRegex "a[^]b]c" []
["adc",
"*** Failers",
"a-c",
"a]c"]
[Just [" 0: adc"],
Nothing,
Just [" 0: a-c"],
Nothing]
,
testRegex "\\ba\\b" []
["a-",
"-a",
"-a-"]
[Just [" 0: a"],
Just [" 0: a"],
Just [" 0: a"]]
,
testRegex "\\by\\b" []
["*** Failers",
"xy",
"yz",
"xyz"]
[Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "\\Ba\\B" []
["*** Failers",
"a-",
"-a",
"-a-"]
[Just [" 0: a"],
Nothing,
Nothing,
Nothing]
,
testRegex "\\By\\b" []
["xy"]
[Just [" 0: y"]]
,
testRegex "\\by\\B" []
["yz"]
[Just [" 0: y"]]
,
testRegex "\\By\\B" []
["xyz"]
[Just [" 0: y"]]
,
testRegex "\\w" []
["a"]
[Just [" 0: a"]]
,
testRegex "\\W" []
["-",
"*** Failers",
"-",
"a"]
[Just [" 0: -"],
Just [" 0: *"],
Just [" 0: -"],
Nothing]
,
testRegex "a\\sb" []
["a b"]
[Just [" 0: a b"]]
,
testRegex "a\\Sb" []
["a-b",
"*** Failers",
"a-b",
"a b"]
[Just [" 0: a-b"],
Nothing,
Just [" 0: a-b"],
Nothing]
,
testRegex "\\d" []
["1"]
[Just [" 0: 1"]]
,
testRegex "\\D" []
["-",
"*** Failers",
"-",
"1"]
[Just [" 0: -"],
Just [" 0: *"],
Just [" 0: -"],
Nothing]
,
testRegex "[\\w]" []
["a"]
[Just [" 0: a"]]
,
testRegex "[\\W]" []
["-",
"*** Failers",
"-",
"a"]
[Just [" 0: -"],
Just [" 0: *"],
Just [" 0: -"],
Nothing]
,
testRegex "a[\\s]b" []
["a b"]
[Just [" 0: a b"]]
,
testRegex "a[\\S]b" []
["a-b",
"*** Failers",
"a-b",
"a b"]
[Just [" 0: a-b"],
Nothing,
Just [" 0: a-b"],
Nothing]
,
testRegex "[\\d]" []
["1"]
[Just [" 0: 1"]]
,
testRegex "[\\D]" []
["-",
"*** Failers",
"-",
"1"]
[Just [" 0: -"],
Just [" 0: *"],
Just [" 0: -"],
Nothing]
,
testRegex "ab|cd" []
["abc",
"abcd"]
[Just [" 0: ab"],
Just [" 0: ab"]]
,
testRegex "()ef" []
["def"]
[Just [" 0: ef"]]
,
testRegex "$b" []
[]
[]
,
testRegex "a\\(b" []
["a(b"]
[Just [" 0: a(b"]]
,
testRegex "a\\(*b" []
["ab",
"a((b"]
[Just [" 0: ab"],
Just [" 0: a((b"]]
,
testRegex "a\\\\b" []
["a\\b"]
[Nothing]
,
testRegex "((a))" []
["abc"]
[Just [" 0: a"]]
,
testRegex "(a)b(c)" []
["abc"]
[Just [" 0: abc"]]
,
testRegex "a+b+c" []
["aabbabc"]
[Just [" 0: abc"]]
,
testRegex "a{1,}b{1,}c" []
["aabbabc"]
[Just [" 0: abc"]]
,
testRegex "a.+?c" []
["abcabc"]
[Just [" 0: abcabc"],
Just [" 1: abc"]]
,
testRegex "(a+|b)*" []
["ab"]
[Just [" 0: ab"],
Just [" 1: a"],
Just [" 2: "]]
,
testRegex "(a+|b){0,}" []
["ab"]
[Just [" 0: ab"],
Just [" 1: a"],
Just [" 2: "]]
,
testRegex "(a+|b)+" []
["ab"]
[Just [" 0: ab"],
Just [" 1: a"]]
,
testRegex "(a+|b){1,}" []
["ab"]
[Just [" 0: ab"],
Just [" 1: a"]]
,
testRegex "(a+|b)?" []
["ab"]
[Just [" 0: a"],
Just [" 1: "]]
,
testRegex "(a+|b){0,1}" []
["ab"]
[Just [" 0: a"],
Just [" 1: "]]
,
testRegex "[^ab]*" []
["cde"]
[Just [" 0: cde"],
Just [" 1: cd"],
Just [" 2: c"],
Just [" 3: "]]
,
testRegex "abc" []
["*** Failers",
"b",
""]
[Nothing,
Nothing]
,
testRegex "a*" []
[""]
[]
,
testRegex "([abc])*d" []
["abbbcd"]
[Just [" 0: abbbcd"]]
,
testRegex "([abc])*bcd" []
["abcd"]
[Just [" 0: abcd"]]
,
testRegex "a|b|c|d|e" []
["e"]
[Just [" 0: e"]]
,
testRegex "(a|b|c|d|e)f" []
["ef"]
[Just [" 0: ef"]]
,
testRegex "abcd*efg" []
["abcdefg"]
[Just [" 0: abcdefg"]]
,
testRegex "ab*" []
["xabyabbbz",
"xayabbbz"]
[Just [" 0: ab"],
Just [" 1: a"],
Just [" 0: a"]]
,
testRegex "(ab|cd)e" []
["abcde"]
[Just [" 0: cde"]]
,
testRegex "[abhgefdc]ij" []
["hij"]
[Just [" 0: hij"]]
,
testRegex "^(ab|cd)e" []
[]
[]
,
testRegex "(abc|)ef" []
["abcdef"]
[Just [" 0: ef"]]
,
testRegex "(a|b)c*d" []
["abcd"]
[Just [" 0: bcd"]]
,
testRegex "(ab|ab*)bc" []
["abc"]
[Just [" 0: abc"]]
,
testRegex "a([bc]*)c*" []
["abc"]
[Just [" 0: abc"],
Just [" 1: ab"],
Just [" 2: a"]]
,
testRegex "a([bc]*)(c*d)" []
["abcd"]
[Just [" 0: abcd"]]
,
testRegex "a([bc]+)(c*d)" []
["abcd"]
[Just [" 0: abcd"]]
,
testRegex "a([bc]*)(c+d)" []
["abcd"]
[Just [" 0: abcd"]]
,
testRegex "a[bcd]*dcdcde" []
["adcdcde"]
[Just [" 0: adcdcde"]]
,
testRegex "a[bcd]+dcdcde" []
["*** Failers",
"abcde",
"adcdcde"]
[Nothing,
Nothing,
Nothing]
,
testRegex "(ab|a)b*c" []
["abc"]
[Just [" 0: abc"]]
,
testRegex "((a)(b)c)(d)" []
["abcd"]
[Just [" 0: abcd"]]
,
testRegex "[a-zA-Z_][a-zA-Z0-9_]*" []
["alpha"]
[Just [" 0: alpha"],
Just [" 1: alph"],
Just [" 2: alp"],
Just [" 3: al"],
Just [" 4: a"]]
,
testRegex "^a(bc+|b[eh])g|.h$" []
["abh"]
[Just [" 0: bh"]]
,
testRegex "(bc+d$|ef*g.|h?i(j|k))" []
["effgz",
"ij",
"reffgz",
"*** Failers",
"effg",
"bcdd"]
[Just [" 0: effgz"],
Just [" 0: ij"],
Just [" 0: effgz"],
Nothing,
Nothing,
Nothing]
,
testRegex "((((((((((a))))))))))" []
["a"]
[Just [" 0: a"]]
,
testRegex "(((((((((a)))))))))" []
["a"]
[Just [" 0: a"]]
,
testRegex "multiple words of text" []
["*** Failers",
"aa",
"uh-uh"]
[Nothing,
Nothing,
Nothing]
,
testRegex "multiple words" []
["multiple words, yeah"]
[Just [" 0: multiple words"]]
,
testRegex "(.*)c(.*)" []
["abcde"]
[Just [" 0: abcde"],
Just [" 1: abcd"],
Just [" 2: abc"]]
,
testRegex "\\((.*), (.*)\\)" []
["(a, b)"]
[Just [" 0: (a, b)"]]
,
testRegex "[k]" []
[]
[]
,
testRegex "abcd" []
["abcd"]
[Just [" 0: abcd"]]
,
testRegex "a(bc)d" []
["abcd"]
[Just [" 0: abcd"]]
,
testRegex "a[-]?c" []
["ac"]
[Just [" 0: ac"]]
,
testRegex "abc" [caseless]
["ABC",
"XABCY",
"ABABC",
"*** Failers",
"aaxabxbaxbbx",
"XBC",
"AXC",
"ABX"]
[Just [" 0: ABC"],
Just [" 0: ABC"],
Just [" 0: ABC"],
Nothing,
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "ab*c" [caseless]
["ABC"]
[Just [" 0: ABC"]]
,
testRegex "ab*bc" [caseless]
["ABC",
"ABBC"]
[Just [" 0: ABC"],
Just [" 0: ABBC"]]
,
testRegex "ab*?bc" [caseless]
["ABBBBC"]
[Just [" 0: ABBBBC"]]
,
testRegex "ab{0,}?bc" [caseless]
["ABBBBC"]
[Just [" 0: ABBBBC"]]
,
testRegex "ab+?bc" [caseless]
["ABBC"]
[Just [" 0: ABBC"]]
,
testRegex "ab+bc" [caseless]
["*** Failers",
"ABC",
"ABQ"]
[Nothing,
Nothing,
Nothing]
,
testRegex "ab{1,}bc" [caseless]
[]
[]
,
testRegex "ab+bc" [caseless]
["ABBBBC"]
[Just [" 0: ABBBBC"]]
,
testRegex "ab{1,}?bc" [caseless]
["ABBBBC"]
[Just [" 0: ABBBBC"]]
,
testRegex "ab{1,3}?bc" [caseless]
["ABBBBC"]
[Just [" 0: ABBBBC"]]
,
testRegex "ab{3,4}?bc" [caseless]
["ABBBBC"]
[Just [" 0: ABBBBC"]]
,
testRegex "ab{4,5}?bc" [caseless]
["*** Failers",
"ABQ",
"ABBBBC"]
[Nothing,
Nothing,
Nothing]
,
testRegex "ab??bc" [caseless]
["ABBC",
"ABC"]
[Just [" 0: ABBC"],
Just [" 0: ABC"]]
,
testRegex "ab{0,1}?bc" [caseless]
["ABC"]
[Just [" 0: ABC"]]
,
testRegex "ab??bc" [caseless]
[]
[]
,
testRegex "ab??c" [caseless]
["ABC"]
[Just [" 0: ABC"]]
,
testRegex "ab{0,1}?c" [caseless]
["ABC"]
[Just [" 0: ABC"]]
,
testRegex "^abc$" [caseless]
["ABC",
"*** Failers",
"ABBBBC",
"ABCC"]
[Just [" 0: ABC"],
Nothing,
Nothing,
Nothing]
,
testRegex "^abc" [caseless]
["ABCC"]
[Just [" 0: ABC"]]
,
testRegex "^abc$" [caseless]
[]
[]
,
testRegex "abc$" [caseless]
["AABC"]
[Just [" 0: ABC"]]
,
testRegex "^" [caseless]
["ABC"]
[Just [" 0: "]]
,
testRegex "$" [caseless]
["ABC"]
[Just [" 0: "]]
,
testRegex "a.c" [caseless]
["ABC",
"AXC"]
[Just [" 0: ABC"],
Just [" 0: AXC"]]
,
testRegex "a.*?c" [caseless]
["AXYZC"]
[Just [" 0: AXYZC"]]
,
testRegex "a.*c" [caseless]
["*** Failers",
"AABC",
"AXYZD"]
[Nothing,
Just [" 0: AABC"],
Nothing]
,
testRegex "a[bc]d" [caseless]
["ABD"]
[Just [" 0: ABD"]]
,
testRegex "a[b-d]e" [caseless]
["ACE",
"*** Failers",
"ABC",
"ABD"]
[Just [" 0: ACE"],
Nothing,
Nothing,
Nothing]
,
testRegex "a[b-d]" [caseless]
["AAC"]
[Just [" 0: AC"]]
,
testRegex "a[-b]" [caseless]
["A-"]
[Just [" 0: A-"]]
,
testRegex "a[b-]" [caseless]
["A-"]
[Just [" 0: A-"]]
,
testRegex "a]" [caseless]
["A]"]
[Just [" 0: A]"]]
,
testRegex "a[]]b" [caseless]
["A]B"]
[Just [" 0: A]B"]]
,
testRegex "a[^bc]d" [caseless]
["AED"]
[Just [" 0: AED"]]
,
testRegex "a[^-b]c" [caseless]
["ADC",
"*** Failers",
"ABD",
"A-C"]
[Just [" 0: ADC"],
Nothing,
Nothing,
Nothing]
,
testRegex "a[^]b]c" [caseless]
["ADC"]
[Just [" 0: ADC"]]
,
testRegex "ab|cd" [caseless]
["ABC",
"ABCD"]
[Just [" 0: AB"],
Just [" 0: AB"]]
,
testRegex "()ef" [caseless]
["DEF"]
[Just [" 0: EF"]]
,
testRegex "$b" [caseless]
["*** Failers",
"A]C",
"B"]
[Nothing,
Nothing,
Nothing]
,
testRegex "a\\(b" [caseless]
["A(B"]
[Just [" 0: A(B"]]
,
testRegex "a\\(*b" [caseless]
["AB",
"A((B"]
[Just [" 0: AB"],
Just [" 0: A((B"]]
,
testRegex "a\\\\b" [caseless]
["A\\B"]
[Nothing]
,
testRegex "((a))" [caseless]
["ABC"]
[Just [" 0: A"]]
,
testRegex "(a)b(c)" [caseless]
["ABC"]
[Just [" 0: ABC"]]
,
testRegex "a+b+c" [caseless]
["AABBABC"]
[Just [" 0: ABC"]]
,
testRegex "a{1,}b{1,}c" [caseless]
["AABBABC"]
[Just [" 0: ABC"]]
,
testRegex "a.+?c" [caseless]
["ABCABC"]
[Just [" 0: ABCABC"],
Just [" 1: ABC"]]
,
testRegex "a.*?c" [caseless]
["ABCABC"]
[Just [" 0: ABCABC"],
Just [" 1: ABC"]]
,
testRegex "a.{0,5}?c" [caseless]
["ABCABC"]
[Just [" 0: ABCABC"],
Just [" 1: ABC"]]
,
testRegex "(a+|b)*" [caseless]
["AB"]
[Just [" 0: AB"],
Just [" 1: A"],
Just [" 2: "]]
,
testRegex "(a+|b){0,}" [caseless]
["AB"]
[Just [" 0: AB"],
Just [" 1: A"],
Just [" 2: "]]
,
testRegex "(a+|b)+" [caseless]
["AB"]
[Just [" 0: AB"],
Just [" 1: A"]]
,
testRegex "(a+|b){1,}" [caseless]
["AB"]
[Just [" 0: AB"],
Just [" 1: A"]]
,
testRegex "(a+|b)?" [caseless]
["AB"]
[Just [" 0: A"],
Just [" 1: "]]
,
testRegex "(a+|b){0,1}" [caseless]
["AB"]
[Just [" 0: A"],
Just [" 1: "]]
,
testRegex "(a+|b){0,1}?" [caseless]
["AB"]
[Just [" 0: A"],
Just [" 1: "]]
,
testRegex "[^ab]*" [caseless]
["CDE"]
[Just [" 0: CDE"],
Just [" 1: CD"],
Just [" 2: C"],
Just [" 3: "]]
,
testRegex "abc" [caseless]
[]
[]
,
testRegex "a*" [caseless]
[""]
[]
,
testRegex "([abc])*d" [caseless]
["ABBBCD"]
[Just [" 0: ABBBCD"]]
,
testRegex "([abc])*bcd" [caseless]
["ABCD"]
[Just [" 0: ABCD"]]
,
testRegex "a|b|c|d|e" [caseless]
["E"]
[Just [" 0: E"]]
,
testRegex "(a|b|c|d|e)f" [caseless]
["EF"]
[Just [" 0: EF"]]
,
testRegex "abcd*efg" [caseless]
["ABCDEFG"]
[Just [" 0: ABCDEFG"]]
,
testRegex "ab*" [caseless]
["XABYABBBZ",
"XAYABBBZ"]
[Just [" 0: AB"],
Just [" 1: A"],
Just [" 0: A"]]
,
testRegex "(ab|cd)e" [caseless]
["ABCDE"]
[Just [" 0: CDE"]]
,
testRegex "[abhgefdc]ij" [caseless]
["HIJ"]
[Just [" 0: HIJ"]]
,
testRegex "^(ab|cd)e" [caseless]
["ABCDE"]
[Nothing]
,
testRegex "(abc|)ef" [caseless]
["ABCDEF"]
[Just [" 0: EF"]]
,
testRegex "(a|b)c*d" [caseless]
["ABCD"]
[Just [" 0: BCD"]]
,
testRegex "(ab|ab*)bc" [caseless]
["ABC"]
[Just [" 0: ABC"]]
,
testRegex "a([bc]*)c*" [caseless]
["ABC"]
[Just [" 0: ABC"],
Just [" 1: AB"],
Just [" 2: A"]]
,
testRegex "a([bc]*)(c*d)" [caseless]
["ABCD"]
[Just [" 0: ABCD"]]
,
testRegex "a([bc]+)(c*d)" [caseless]
["ABCD"]
[Just [" 0: ABCD"]]
,
testRegex "a([bc]*)(c+d)" [caseless]
["ABCD"]
[Just [" 0: ABCD"]]
,
testRegex "a[bcd]*dcdcde" [caseless]
["ADCDCDE"]
[Just [" 0: ADCDCDE"]]
,
testRegex "a[bcd]+dcdcde" [caseless]
[]
[]
,
testRegex "(ab|a)b*c" [caseless]
["ABC"]
[Just [" 0: ABC"]]
,
testRegex "((a)(b)c)(d)" [caseless]
["ABCD"]
[Just [" 0: ABCD"]]
,
testRegex "[a-zA-Z_][a-zA-Z0-9_]*" [caseless]
["ALPHA"]
[Just [" 0: ALPHA"],
Just [" 1: ALPH"],
Just [" 2: ALP"],
Just [" 3: AL"],
Just [" 4: A"]]
,
testRegex "^a(bc+|b[eh])g|.h$" [caseless]
["ABH"]
[Just [" 0: BH"]]
,
testRegex "(bc+d$|ef*g.|h?i(j|k))" [caseless]
["EFFGZ",
"IJ",
"REFFGZ",
"*** Failers",
"ADCDCDE",
"EFFG",
"BCDD"]
[Just [" 0: EFFGZ"],
Just [" 0: IJ"],
Just [" 0: EFFGZ"],
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "((((((((((a))))))))))" [caseless]
["A"]
[Just [" 0: A"]]
,
testRegex "(((((((((a)))))))))" [caseless]
["A"]
[Just [" 0: A"]]
,
testRegex "(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))" [caseless]
["A"]
[Just [" 0: A"]]
,
testRegex "(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))" [caseless]
["C"]
[Just [" 0: C"]]
,
testRegex "multiple words of text" [caseless]
["*** Failers",
"AA",
"UH-UH"]
[Nothing,
Nothing,
Nothing]
,
testRegex "multiple words" [caseless]
["MULTIPLE WORDS, YEAH"]
[Just [" 0: MULTIPLE WORDS"]]
,
testRegex "(.*)c(.*)" [caseless]
["ABCDE"]
[Just [" 0: ABCDE"],
Just [" 1: ABCD"],
Just [" 2: ABC"]]
,
testRegex "\\((.*), (.*)\\)" [caseless]
["(A, B)"]
[Just [" 0: (A, B)"]]
,
testRegex "[k]" [caseless]
[]
[]
,
testRegex "abcd" [caseless]
["ABCD"]
[Just [" 0: ABCD"]]
,
testRegex "a(bc)d" [caseless]
["ABCD"]
[Just [" 0: ABCD"]]
,
testRegex "a[-]?c" [caseless]
["AC"]
[Just [" 0: AC"]]
,
testRegex "a(?!b)." []
["abad"]
[Just [" 0: ad"]]
,
testRegex "a(?=d)." []
["abad"]
[Just [" 0: ad"]]
,
testRegex "a(?=c|d)." []
["abad"]
[Just [" 0: ad"]]
,
testRegex "a(?:b|c|d)(.)" []
["ace"]
[Just [" 0: ace"]]
,
testRegex "a(?:b|c|d)*(.)" []
["ace"]
[Just [" 0: ace"],
Just [" 1: ac"]]
,
testRegex "a(?:b|c|d)+?(.)" []
["ace",
"acdbcdbe"]
[Just [" 0: ace"],
Just [" 0: acdbcdbe"],
Just [" 1: acdbcdb"],
Just [" 2: acdbcd"],
Just [" 3: acdbc"],
Just [" 4: acdb"],
Just [" 5: acd"]]
,
testRegex "a(?:b|c|d)+(.)" []
["acdbcdbe"]
[Just [" 0: acdbcdbe"],
Just [" 1: acdbcdb"],
Just [" 2: acdbcd"],
Just [" 3: acdbc"],
Just [" 4: acdb"],
Just [" 5: acd"]]
,
testRegex "a(?:b|c|d){2}(.)" []
["acdbcdbe"]
[Just [" 0: acdb"]]
,
testRegex "a(?:b|c|d){4,5}(.)" []
["acdbcdbe"]
[Just [" 0: acdbcdb"],
Just [" 1: acdbcd"]]
,
testRegex "a(?:b|c|d){4,5}?(.)" []
["acdbcdbe"]
[Just [" 0: acdbcdb"],
Just [" 1: acdbcd"]]
,
testRegex "((foo)|(bar))*" []
["foobar"]
[Just [" 0: foobar"],
Just [" 1: foo"],
Just [" 2: "]]
,
testRegex "a(?:b|c|d){6,7}(.)" []
["acdbcdbe"]
[Just [" 0: acdbcdbe"]]
,
testRegex "a(?:b|c|d){6,7}?(.)" []
["acdbcdbe"]
[Just [" 0: acdbcdbe"]]
,
testRegex "a(?:b|c|d){5,6}(.)" []
["acdbcdbe"]
[Just [" 0: acdbcdbe"],
Just [" 1: acdbcdb"]]
,
testRegex "a(?:b|c|d){5,6}?(.)" []
["acdbcdbe"]
[Just [" 0: acdbcdbe"],
Just [" 1: acdbcdb"]]
,
testRegex "a(?:b|c|d){5,7}(.)" []
["acdbcdbe"]
[Just [" 0: acdbcdbe"],
Just [" 1: acdbcdb"]]
,
testRegex "a(?:b|c|d){5,7}?(.)" []
["acdbcdbe"]
[Just [" 0: acdbcdbe"],
Just [" 1: acdbcdb"]]
,
testRegex "a(?:b|(c|e){1,2}?|d)+?(.)" []
["ace"]
[Just [" 0: ace"]]
,
testRegex "^(.+)?B" []
["AB"]
[Just [" 0: AB"]]
,
testRegex "^([^a-z])|(\\^)$" []
["."]
[Just [" 0: ."]]
,
testRegex "^[<>]&" []
["<&OUT"]
[Just [" 0: <&"]]
,
testRegex "(?:(f)(o)(o)|(b)(a)(r))*" []
["foobar"]
[Just [" 0: foobar"],
Just [" 1: foo"],
Just [" 2: "]]
,
testRegex "(?<=a)b" []
["ab",
"*** Failers",
"cb",
"b"]
[Just [" 0: b"],
Nothing,
Nothing,
Nothing]
,
testRegex "(?<!c)b" []
["ab",
"b",
"b"]
[Just [" 0: b"],
Just [" 0: b"],
Just [" 0: b"]]
,
testRegex "(?:..)*a" []
["aba"]
[Just [" 0: aba"],
Just [" 1: a"]]
,
testRegex "(?:..)*?a" []
["aba"]
[Just [" 0: aba"],
Just [" 1: a"]]
,
testRegex "^(){3,5}" []
["abc"]
[Just [" 0: "]]
,
testRegex "^(a+)*ax" []
["aax"]
[Just [" 0: aax"]]
,
testRegex "^((a|b)+)*ax" []
["aax"]
[Just [" 0: aax"]]
,
testRegex "^((a|bc)+)*ax" []
["aax"]
[Just [" 0: aax"]]
,
testRegex "(a|x)*ab" []
["cab"]
[Just [" 0: ab"]]
,
testRegex "(a)*ab" []
["cab"]
[Just [" 0: ab"]]
,
testRegex "(?:(?i)a)b" []
["ab"]
[Just [" 0: ab"]]
,
testRegex "((?i)a)b" []
["ab"]
[Just [" 0: ab"]]
,
testRegex "(?:(?i)a)b" []
["Ab"]
[Just [" 0: Ab"]]
,
testRegex "((?i)a)b" []
["Ab"]
[Just [" 0: Ab"]]
,
testRegex "(?:(?i)a)b" []
["*** Failers",
"cb",
"aB"]
[Nothing,
Nothing,
Nothing]
,
testRegex "((?i)a)b" []
[]
[]
,
testRegex "(?i:a)b" []
["ab"]
[Just [" 0: ab"]]
,
testRegex "((?i:a))b" []
["ab"]
[Just [" 0: ab"]]
,
testRegex "(?i:a)b" []
["Ab"]
[Just [" 0: Ab"]]
,
testRegex "((?i:a))b" []
["Ab"]
[Just [" 0: Ab"]]
,
testRegex "(?i:a)b" []
["*** Failers",
"aB",
"aB"]
[Nothing,
Nothing,
Nothing]
,
testRegex "((?i:a))b" []
[]
[]
,
testRegex "(?:(?-i)a)b" [caseless]
["ab"]
[Just [" 0: ab"]]
,
testRegex "((?-i)a)b" [caseless]
["ab"]
[Just [" 0: ab"]]
,
testRegex "(?:(?-i)a)b" [caseless]
["aB"]
[Just [" 0: aB"]]
,
testRegex "((?-i)a)b" [caseless]
["aB"]
[Just [" 0: aB"]]
,
testRegex "(?:(?-i)a)b" [caseless]
["*** Failers",
"aB",
"Ab"]
[Nothing,
Just [" 0: aB"],
Nothing]
,
testRegex "((?-i)a)b" [caseless]
[]
[]
,
testRegex "(?:(?-i)a)b" [caseless]
["aB"]
[Just [" 0: aB"]]
,
testRegex "((?-i)a)b" [caseless]
["aB"]
[Just [" 0: aB"]]
,
testRegex "(?:(?-i)a)b" [caseless]
["*** Failers",
"Ab",
"AB"]
[Nothing,
Nothing,
Nothing]
,
testRegex "((?-i)a)b" [caseless]
[]
[]
,
testRegex "(?-i:a)b" [caseless]
["ab"]
[Just [" 0: ab"]]
,
testRegex "((?-i:a))b" [caseless]
["ab"]
[Just [" 0: ab"]]
,
testRegex "(?-i:a)b" [caseless]
["aB"]
[Just [" 0: aB"]]
,
testRegex "((?-i:a))b" [caseless]
["aB"]
[Just [" 0: aB"]]
,
testRegex "(?-i:a)b" [caseless]
["*** Failers",
"AB",
"Ab"]
[Nothing,
Nothing,
Nothing]
,
testRegex "((?-i:a))b" [caseless]
[]
[]
,
testRegex "(?-i:a)b" [caseless]
["aB"]
[Just [" 0: aB"]]
,
testRegex "((?-i:a))b" [caseless]
["aB"]
[Just [" 0: aB"]]
,
testRegex "(?-i:a)b" [caseless]
["*** Failers",
"Ab",
"AB"]
[Nothing,
Nothing,
Nothing]
,
testRegex "((?-i:a))b" [caseless]
[]
[]
,
testRegex "((?-i:a.))b" [caseless]
["*** Failers",
"AB",
"a\\nB"]
[Nothing,
Nothing,
Nothing]
,
testRegex "((?s-i:a.))b" [caseless]
["a\\nB"]
[Just [" 0: a\\x0aB"]]
,
testRegex "(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))" []
["cabbbb"]
[Just [" 0: cabbbb"]]
,
testRegex "(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))" []
["caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"]
[Just [" 0: caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"]]
,
testRegex "foo\\w*\\d{4}baz" []
["foobar1234baz"]
[Just [" 0: foobar1234baz"]]
,
testRegex "x(~~)*(?:(?:F)?)?" []
["x~~"]
[Just [" 0: x~~"],
Just [" 1: x"]]
,
testRegex "^a(?#xxx){3}c" []
["aaac"]
[Just [" 0: aaac"]]
,
testRegex "^a (?#xxx) (?#yyy) {3}c" [ERROR]
["aaac"]
[Just [" 0: aaac"]]
,
testRegex "(?<![cd])b" []
["*** Failers",
"B\\nB",
"dbcb"]
[Nothing,
Nothing,
Nothing]
,
testRegex "(?<![cd])[ab]" []
["dbaacb"]
[Just [" 0: a"]]
,
testRegex "(?<!(c|d))b" []
[]
[]
,
testRegex "(?<!(c|d))[ab]" []
["dbaacb"]
[Just [" 0: a"]]
,
testRegex "(?<!cd)[ab]" []
["cdaccb"]
[Just [" 0: b"]]
,
testRegex "^(?:a?b?)*$" []
["*** Failers",
"dbcb",
"a--"]
[Nothing,
Nothing,
Nothing]
,
testRegex "((?s)^a(.))((?m)^b$)" []
["a\\nb\\nc\\n"]
[Just [" 0: a\\x0ab"]]
,
testRegex "((?m)^b$)" []
["a\\nb\\nc\\n"]
[Just [" 0: b"]]
,
testRegex "(?m)^b" []
["a\\nb\\n"]
[Just [" 0: b"]]
,
testRegex "(?m)^(b)" []
["a\\nb\\n"]
[Just [" 0: b"]]
,
testRegex "((?m)^b)" []
["a\\nb\\n"]
[Just [" 0: b"]]
,
testRegex "\\n((?m)^b)" []
["a\\nb\\n"]
[Just [" 0: \\x0ab"]]
,
testRegex "((?s).)c(?!.)" []
["a\\nb\\nc\\n",
"a\\nb\\nc\\n"]
[Just [" 0: \\x0ac"],
Just [" 0: \\x0ac"]]
,
testRegex "((?s)b.)c(?!.)" []
["a\\nb\\nc\\n",
"a\\nb\\nc\\n"]
[Just [" 0: b\\x0ac"],
Just [" 0: b\\x0ac"]]
,
testRegex "^b" []
[]
[]
,
testRegex "()^b" []
["*** Failers",
"a\\nb\\nc\\n",
"a\\nb\\nc\\n"]
[Nothing,
Nothing,
Nothing]
,
testRegex "((?m)^b)" []
["a\\nb\\nc\\n"]
[Just [" 0: b"]]
,
testRegex "(?(?!a)a|b)" []
[]
[]
,
testRegex "(?(?!a)b|a)" []
["a"]
[Just [" 0: a"]]
,
testRegex "(?(?=a)b|a)" []
["*** Failers",
"a",
"a"]
[Nothing,
Nothing,
Nothing]
,
testRegex "(?(?=a)a|b)" []
["a"]
[Just [" 0: a"]]
,
testRegex "(\\w+:)+" []
["one:"]
[Just [" 0: one:"]]
,
testRegex "$(?<=^(a))" []
["a"]
[Just [" 0: "]]
,
testRegex "([\\w:]+::)?(\\w+)$" []
["abcd",
"xy:z:::abcd"]
[Just [" 0: abcd"],
Just [" 0: xy:z:::abcd"]]
,
testRegex "^[^bcd]*(c+)" []
["aexycd"]
[Just [" 0: aexyc"]]
,
testRegex "(a*)b+" []
["caab"]
[Just [" 0: aab"]]
,
testRegex "([\\w:]+::)?(\\w+)$" []
["abcd",
"xy:z:::abcd",
"*** Failers",
"abcd:",
"abcd:"]
[Just [" 0: abcd"],
Just [" 0: xy:z:::abcd"],
Just [" 0: Failers"],
Nothing,
Nothing]
,
testRegex "^[^bcd]*(c+)" []
["aexycd"]
[Just [" 0: aexyc"]]
,
testRegex "(>a+)ab" []
[]
[]
,
testRegex "(?>a+)b" []
["aaab"]
[Just [" 0: aaab"]]
,
testRegex "([[:]+)" []
["a:[b]:"]
[Just [" 0: :["],
Just [" 1: :"]]
,
testRegex "([[=]+)" []
["a=[b]="]
[Just [" 0: =["],
Just [" 1: ="]]
,
testRegex "([[.]+)" []
["a.[b]."]
[Just [" 0: .["],
Just [" 1: ."]]
,
testRegex "((?>a+)b)" []
["aaab"]
[Just [" 0: aaab"]]
,
testRegex "(?>(a+))b" []
["aaab"]
[Just [" 0: aaab"]]
,
testRegex "((?>[^()]+)|\\([^()]*\\))+" []
["((abc(ade)ufh()()x"]
[Just [" 0: abc(ade)ufh()()x"],
Just [" 1: abc(ade)ufh()()"],
Just [" 2: abc(ade)ufh()"],
Just [" 3: abc(ade)ufh"],
Just [" 4: abc(ade)"],
Just [" 5: abc"]]
,
testRegex "a\\Z" []
["*** Failers",
"aaab",
"a\\nb\\n"]
[Nothing,
Nothing,
Nothing]
,
testRegex "b\\Z" []
["a\\nb\\n"]
[Just [" 0: b"]]
,
testRegex "b\\z" []
[]
[]
,
testRegex "b\\Z" []
["a\\nb"]
[Just [" 0: b"]]
,
testRegex "b\\z" []
["a\\nb",
"*** Failers",
"",
"/(?>.*)(?<=(abcd|wxyz))/",
"alphabetabcd",
"endingwxyz",
"*** Failers",
"a rather long string that doesn't end with one of them"]
[Just [" 0: b"],
Nothing,
Just ["/(?>.*)(?<=(abcd|wxyz))/"],
Just [" 0: alphabetabcd"],
Just [" 0: endingwxyz"],
Nothing,
Nothing]
,
testRegex "word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword" []
["word cat dog elephant mussel cow horse canary baboon snake shark otherword",
"word cat dog elephant mussel cow horse canary baboon snake shark",
"",
"/word (?>[a-zA-Z0-9]+ ){0,30}otherword/",
"word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope"]
[Just [" 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword"],
Nothing,
Just ["/word (?>[a-zA-Z0-9]+ ){0,30}otherword/"],
Nothing]
,
testRegex "(?<=\\d{3}(?!999))foo" []
["999foo",
"123999foo ",
"*** Failers",
"123abcfoo",
"",
"/(?<=(?!...999)\\d{3})foo/",
"999foo",
"123999foo ",
"*** Failers",
"123abcfoo"]
[Just [" 0: foo"],
Just [" 0: foo"],
Nothing,
Nothing,
Just ["/(?<=(?!...999)\\d{3})foo/"],
Just [" 0: foo"],
Just [" 0: foo"],
Nothing,
Nothing]
,
testRegex "(?<=\\d{3}(?!999)...)foo" []
["123abcfoo",
"123456foo ",
"*** Failers",
"123999foo ",
"",
"/(?<=\\d{3}...)(?<!999)foo/",
"123abcfoo ",
"123456foo ",
"*** Failers",
"123999foo "]
[Just [" 0: foo"],
Just [" 0: foo"],
Nothing,
Nothing,
Just ["/(?<=\\d{3}...)(?<!999)foo/"],
Just [" 0: foo"],
Just [" 0: foo"],
Nothing,
Nothing]
,
testRegex "((Z)+|A)*" []
["ZABCDEFG"]
[Just [" 0: ZA"],
Just [" 1: Z"],
Just [" 2: "]]
,
testRegex "(Z()|A)*" []
["ZABCDEFG"]
[Just [" 0: ZA"],
Just [" 1: Z"],
Just [" 2: "]]
,
testRegex "(Z(())|A)*" []
["ZABCDEFG"]
[Just [" 0: ZA"],
Just [" 1: Z"],
Just [" 2: "]]
,
testRegex "((?>Z)+|A)*" []
["ZABCDEFG"]
[Just [" 0: ZA"],
Just [" 1: Z"],
Just [" 2: "]]
,
testRegex "((?>)+|A)*" []
["ZABCDEFG"]
[Just [" 0: "]]
,
testRegex "a*" [ERROR]
["abbab"]
[Just [" 0: a"],
Just [" 1: "],
Just [" 0: "],
Just [" 0: "],
Just [" 0: a"],
Just [" 1: "],
Just [" 0: "],
Just [" 0: "]]
,
testRegex "^[a-\\d]" []
["abcde",
"-things",
"0digit",
"*** Failers",
"bcdef "]
[Just [" 0: a"],
Just [" 0: -"],
Just [" 0: 0"],
Nothing,
Nothing]
,
testRegex "^[\\d-a]" []
["abcde",
"-things",
"0digit",
"*** Failers",
"bcdef ",
"",
"/[[:space:]]+/",
"> \\x09\\x0a\\x0c\\x0d\\x0b<",
"",
"/[[:blank:]]+/",
"> \\x09\\x0a\\x0c\\x0d\\x0b<",
"",
"/[\\s]+/",
"> \\x09\\x0a\\x0c\\x0d\\x0b<",
"",
"/\\s+/",
"> \\x09\\x0a\\x0c\\x0d\\x0b<",
"",
"/a\vb/x",
"ab"]
[Just [" 0: a"],
Just [" 0: -"],
Just [" 0: 0"],
Nothing,
Nothing,
Just ["/[[:space:]]+/"],
Just [" 0: \\x09\\x0a\\x0c\\x0d\\x0b"],
Just [" 1: \\x09\\x0a\\x0c\\x0d"],
Just [" 2: \\x09\\x0a\\x0c"],
Just [" 3: \\x09\\x0a"],
Just [" 4: \\x09"],
Just [" 5: "],
Just ["/[[:blank:]]+/"],
Just [" 0: \\x09"],
Just [" 1: "],
Just ["/[\\s]+/"],
Just [" 0: \\x09\\x0a\\x0c\\x0d"],
Just [" 1: \\x09\\x0a\\x0c"],
Just [" 2: \\x09\\x0a"],
Just [" 3: \\x09"],
Just [" 4: "],
Just ["/\\s+/"],
Just [" 0: \\x09\\x0a\\x0c\\x0d"],
Just [" 1: \\x09\\x0a\\x0c"],
Just [" 2: \\x09\\x0a"],
Just [" 3: \\x09"],
Just [" 4: "],
Just ["/a\vb/x"],
Nothing]
,
testRegex "(?!\\A)x" [ERROR]
["a\\nxb\\n"]
[Just [" 0: x"]]
,
testRegex "(?!^)x" [ERROR]
["a\\nxb\\n"]
[Nothing]
,
testRegex "abc\\Qabc\\Eabc" []
["abcabcabc",
"",
"/abc\\Q(*+|\\Eabc/",
"abc(*+|abc "]
[Just [" 0: abcabcabc"],
Just ["/abc\\Q(*+|\\Eabc/"],
Just [" 0: abc(*+|abc"]]
,
testRegex " abc\\Q abc\\Eabc" [ERROR]
["abc abcabc",
"*** Failers",
"abcabcabc ",
"",
"/abc#comment",
"\\Q#not comment",
"literal\\E/x",
"abc#not comment\\n literal "]
[Just [" 0: abc abcabc"],
Nothing,
Nothing,
Just ["/abc#comment"],
Just [" 0: abc#not comment\\x0a literal"]]
,
testRegex "ERROR" []
["\\Q#not comment",
"literal/x",
"abc#not comment\\n literal "]
[Just [" 0: abc#not comment\\x0a literal"]]
,
testRegex "ERROR" []
["\\Q#not comment",
"literal\\E #more comment",
"/x",
"abc#not comment\\n literal "]
[Just [" 0: abc#not comment\\x0a literal"]]
,
testRegex "ERROR" []
["\\Q#not comment",
"literal\\E #more comment/x",
"abc#not comment\\n literal "]
[Just [" 0: abc#not comment\\x0a literal"]]
,
testRegex "\\Qabc\\$xyz\\E" []
["abc\\\\\\$xyz"]
[Just [" 0: abc\\$xyz"]]
,
testRegex "\\Qabc\\E\\$\\Qxyz\\E" []
["abc\\$xyz"]
[Just [" 0: abc$xyz"]]
,
testRegex "\\Gabc" []
["abc",
"*** Failers",
"xyzabc "]
[Just [" 0: abc"],
Nothing,
Nothing]
,
testRegex "\\Gabc." [ERROR]
["abc1abc2xyzabc3"]
[Just [" 0: abc1"],
Just [" 0: abc2"]]
,
testRegex "abc." [ERROR]
["abc1abc2xyzabc3 "]
[Just [" 0: abc1"],
Just [" 0: abc2"],
Just [" 0: abc3"]]
,
testRegex "a(?x: b c )d" []
["XabcdY",
"*** Failers ",
"Xa b c d Y "]
[Just [" 0: abcd"],
Nothing,
Nothing]
,
testRegex "((?x)x y z | a b c)" []
["XabcY",
"AxyzB "]
[Just [" 0: abc"],
Just [" 0: xyz"]]
,
testRegex "(?i)AB(?-i)C" []
["XabCY",
"*** Failers",
"XabcY "]
[Just [" 0: abC"],
Nothing,
Nothing]
,
testRegex "((?i)AB(?-i)C|D)E" []
["abCE",
"DE",
"*** Failers",
"abcE",
"abCe ",
"dE",
"De "]
[Just [" 0: abCE"],
Just [" 0: DE"],
Nothing,
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "[z\\Qa-d]\\E]" []
["z",
"a",
"-",
"d",
"] ",
"*** Failers",
"b "]
[Just [" 0: z"],
Just [" 0: a"],
Just [" 0: -"],
Just [" 0: d"],
Just [" 0: ]"],
Just [" 0: a"],
Nothing]
,
testRegex "[\\z\\C]" []
["z",
"C ",
"",
"/\\M/",
"M ",
"",
"/(a+)*b/",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ",
"",
"/(?i)reg(?:ul(?:[a\228]|ae)r|ex)/",
"REGular",
"regulaer",
"Regex ",
"regul\228r "]
[Just [" 0: z"],
Just [" 0: C"],
Just ["/\\M/"],
Just [" 0: M"],
Just ["/(a+)*b/"],
Nothing,
Just ["/(?i)reg(?:ul(?:[a\228]|ae)r|ex)/"],
Just [" 0: REGular"],
Just [" 0: regulaer"],
Just [" 0: Regex"],
Just [" 0: regul\\xe4r"]]
,
testRegex "\197\230\229\228[\224-\255\192-\223]+" []
["\197\230\229\228\224",
"\197\230\229\228\255",
"\197\230\229\228\192",
"\197\230\229\228\223"]
[Just [" 0: \\xc5\\xe6\\xe5\\xe4\\xe0"],
Just [" 0: \\xc5\\xe6\\xe5\\xe4\\xff"],
Just [" 0: \\xc5\\xe6\\xe5\\xe4\\xc0"],
Just [" 0: \\xc5\\xe6\\xe5\\xe4\\xdf"]]
,
testRegex "(?<=Z)X." []
["\\x84XAZXB"]
[Just [" 0: XB"]]
,
testRegex "^(?(2)a|(1)(2))+$" []
["123a"]
[Just ["Error -17"]]
,
testRegex "(?<=a|bbbb)c" []
["ac",
"bbbbc"]
[Just [" 0: c"],
Just [" 0: c"]]
,
testRegex "abc" [ERROR]
["<testsavedregex",
"abc",
"*** Failers",
"bca",
"",
"/abc/F>testsavedregex",
"<testsavedregex",
"abc",
"*** Failers",
"bca"]
[Just ["Compiled regex written to testsavedregex"],
Just ["<testsavedregex"],
Just ["Compiled regex loaded from testsavedregex"],
Just ["No study data"],
Just [" 0: abc"],
Nothing,
Nothing,
Just ["/abc/F>testsavedregex"],
Just ["Compiled regex written to testsavedregex"],
Just ["<testsavedregex"],
Just ["Compiled regex (byte-inverted) loaded from testsavedregex"],
Just ["No study data"],
Just [" 0: abc"],
Nothing,
Nothing]
,
testRegex "(a|b)" [ERROR]
["<testsavedregex",
"abc",
"*** Failers",
"def ",
"",
"/(a|b)/SF>testsavedregex",
"<testsavedregex",
"abc",
"*** Failers",
"def ",
"",
"/line\\nbreak/",
"this is a line\\nbreak",
"line one\\nthis is a line\\nbreak in the second line "]
[Just ["Compiled regex written to testsavedregex"],
Just ["Study data written to testsavedregex"],
Just ["<testsavedregex"],
Just ["Compiled regex loaded from testsavedregex"],
Just ["Study data loaded from testsavedregex"],
Just [" 0: a"],
Just [" 0: a"],
Nothing,
Just ["/(a|b)/SF>testsavedregex"],
Just ["Compiled regex written to testsavedregex"],
Just ["Study data written to testsavedregex"],
Just ["<testsavedregex"],
Just ["Compiled regex (byte-inverted) loaded from testsavedregex"],
Just ["Study data loaded from testsavedregex"],
Just [" 0: a"],
Just [" 0: a"],
Nothing,
Just ["/line\\nbreak/"],
Just [" 0: line\\x0abreak"],
Just [" 0: line\\x0abreak"]]
,
testRegex "line\\nbreak" [ERROR]
["this is a line\\nbreak",
"** Failers ",
"line one\\nthis is a line\\nbreak in the second line "]
[Just [" 0: line\\x0abreak"],
Nothing,
Nothing]
,
testRegex "line\\nbreak" [ERROR]
["this is a line\\nbreak",
"** Failers ",
"line one\\nthis is a line\\nbreak in the second line "]
[Just [" 0: line\\x0abreak"],
Nothing,
Nothing]
,
testRegex "1234" []
["123\\P",
"a4\\P\\R"]
[Just ["Partial match: 123"],
Nothing]
,
testRegex "1234" []
["123\\P",
"4\\P\\R"]
[Just ["Partial match: 123"],
Just [" 0: 4"]]
,
testRegex "^" [ERROR]
["a\\nb\\nc\\n",
"\\ ",
"",
"/(?<=C\\n)^/mg",
"A\\nC\\nC\\n "]
[Just [" 0: "],
Just [" 0: "],
Just [" 0: "],
Just [" 0: "],
Just ["/(?<=C\\n)^/mg"],
Just [" 0: "]]
,
testRegex "(?s)A?B" []
["AB",
"aB "]
[Just [" 0: AB"],
Just [" 0: B"]]
,
testRegex "(?s)A*B" []
["AB",
"aB "]
[Just [" 0: AB"],
Just [" 0: B"]]
,
testRegex "(?m)A?B" []
["AB",
"aB "]
[Just [" 0: AB"],
Just [" 0: B"]]
,
testRegex "(?m)A*B" []
["AB",
"aB "]
[Just [" 0: AB"],
Just [" 0: B"]]
,
testRegex "Content-Type\\x3A[^\\r\\n]{6,}" []
["Content-Type:xxxxxyyy "]
[Just [" 0: Content-Type:xxxxxyyy"],
Just [" 1: Content-Type:xxxxxyy"],
Just [" 2: Content-Type:xxxxxy"]]
,
testRegex "Content-Type\\x3A[^\\r\\n]{6,}z" []
["Content-Type:xxxxxyyyz"]
[Just [" 0: Content-Type:xxxxxyyyz"]]
,
testRegex "Content-Type\\x3A[^a]{6,}" []
["Content-Type:xxxyyy "]
[Just [" 0: Content-Type:xxxyyy"]]
,
testRegex "Content-Type\\x3A[^a]{6,}z" []
["Content-Type:xxxyyyz"]
[Just [" 0: Content-Type:xxxyyyz"]]
,
testRegex "^abc" [ERROR]
["xyz\\nabc",
"xyz\\nabc\\<lf>",
"xyz\\r\\nabc\\<lf>",
"xyz\\rabc\\<cr>",
"xyz\\r\\nabc\\<crlf>",
"** Failers ",
"xyz\\nabc\\<cr>",
"xyz\\r\\nabc\\<cr>",
"xyz\\nabc\\<crlf>",
"xyz\\rabc\\<crlf>",
"xyz\\rabc\\<lf>",
"",
"/abc$/m<lf>",
"xyzabc",
"xyzabc\\n ",
"xyzabc\\npqr ",
"xyzabc\\r\\<cr> ",
"xyzabc\\rpqr\\<cr> ",
"xyzabc\\r\\n\\<crlf> ",
"xyzabc\\r\\npqr\\<crlf> ",
"** Failers",
"xyzabc\\r ",
"xyzabc\\rpqr ",
"xyzabc\\r\\n ",
"xyzabc\\r\\npqr ",
"",
"/^abc/m<cr>",
"xyz\\rabcdef",
"xyz\\nabcdef\\<lf>",
"** Failers ",
"xyz\\nabcdef",
"",
"/^abc/m<lf>",
"xyz\\nabcdef",
"xyz\\rabcdef\\<cr>",
"** Failers ",
"xyz\\rabcdef",
"",
"/^abc/m<crlf>",
"xyz\\r\\nabcdef",
"xyz\\rabcdef\\<cr>",
"** Failers ",
"xyz\\rabcdef",
"",
"/.*/<lf>",
"abc\\ndef",
"abc\\rdef",
"abc\\r\\ndef",
"\\<cr>abc\\ndef",
"\\<cr>abc\\rdef",
"\\<cr>abc\\r\\ndef",
"\\<crlf>abc\\ndef",
"\\<crlf>abc\\rdef",
"\\<crlf>abc\\r\\ndef"]
[Just [" 0: abc"],
Just [" 0: abc"],
Just [" 0: abc"],
Just [" 0: abc"],
Just [" 0: abc"],
Nothing,
Nothing,
Nothing,
Nothing,
Nothing,
Nothing,
Just ["/abc$/m<lf>"],
Just [" 0: abc"],
Just [" 0: abc"],
Just [" 0: abc"],
Just [" 0: abc"],
Just [" 0: abc"],
Just [" 0: abc"],
Just [" 0: abc"],
Nothing,
Nothing,
Nothing,
Nothing,
Nothing,
Just ["/^abc/m<cr>"],
Just [" 0: abc"],
Just [" 0: abc"],
Nothing,
Nothing,
Just ["/^abc/m<lf>"],
Just [" 0: abc"],
Just [" 0: abc"],
Nothing,
Nothing,
Just ["/^abc/m<crlf>"],
Just [" 0: abc"],
Just [" 0: abc"],
Nothing,
Nothing,
Just ["/.*/<lf>"],
Just [" 0: abc"],
Just [" 1: ab"],
Just [" 2: a"],
Just [" 3: "],
Just [" 0: abc\\x0ddef"],
Just [" 1: abc\\x0dde"],
Just [" 2: abc\\x0dd"],
Just [" 3: abc\\x0d"],
Just [" 4: abc"],
Just [" 5: ab"],
Just [" 6: a"],
Just [" 7: "],
Just [" 0: abc\\x0d"],
Just [" 1: abc"],
Just [" 2: ab"],
Just [" 3: a"],
Just [" 4: "],
Just [" 0: abc\\x0adef"],
Just [" 1: abc\\x0ade"],
Just [" 2: abc\\x0ad"],
Just [" 3: abc\\x0a"],
Just [" 4: abc"],
Just [" 5: ab"],
Just [" 6: a"],
Just [" 7: "],
Just [" 0: abc"],
Just [" 1: ab"],
Just [" 2: a"],
Just [" 3: "],
Just [" 0: abc"],
Just [" 1: ab"],
Just [" 2: a"],
Just [" 3: "],
Just [" 0: abc\\x0adef"],
Just [" 1: abc\\x0ade"],
Just [" 2: abc\\x0ad"],
Just [" 3: abc\\x0a"],
Just [" 4: abc"],
Just [" 5: ab"],
Just [" 6: a"],
Just [" 7: "],
Just [" 0: abc\\x0ddef"],
Just [" 1: abc\\x0dde"],
Just [" 2: abc\\x0dd"],
Just [" 3: abc\\x0d"],
Just [" 4: abc"],
Just [" 5: ab"],
Just [" 6: a"],
Just [" 7: "],
Just [" 0: abc"],
Just [" 1: ab"],
Just [" 2: a"],
Just [" 3: "]]
,
testRegex "\\w+(.)(.)?def" [ERROR]
["abc\\ndef",
"abc\\rdef",
"abc\\r\\ndef"]
[Just [" 0: abc\\x0adef"],
Just [" 0: abc\\x0ddef"],
Just [" 0: abc\\x0d\\x0adef"]]
,
testRegex "^\\w+=.*(\\\\\\n.*)*" []
["abc=xyz\\\\\\npqr"]
[Just [" 0: abc=xyz\\\\x0apqr"],
Just [" 1: abc=xyz\\\\x0apq"],
Just [" 2: abc=xyz\\\\x0ap"],
Just [" 3: abc=xyz\\\\x0a"],
Just [" 4: abc=xyz\\"],
Just [" 5: abc=xyz"],
Just [" 6: abc=xy"],
Just [" 7: abc=x"],
Just [" 8: abc="]]
,
testRegex "^(a()*)*" []
["aaaa"]
[Just [" 0: aaaa"],
Just [" 1: aaa"],
Just [" 2: aa"],
Just [" 3: a"],
Just [" 4: "]]
,
testRegex "^(?:a(?:(?:))*)*" []
["aaaa"]
[Just [" 0: aaaa"],
Just [" 1: aaa"],
Just [" 2: aa"],
Just [" 3: a"],
Just [" 4: "]]
,
testRegex "^(a()+)+" []
["aaaa"]
[Just [" 0: aaaa"],
Just [" 1: aaa"],
Just [" 2: aa"],
Just [" 3: a"]]
,
testRegex "^(?:a(?:(?:))+)+" []
["aaaa"]
[Just [" 0: aaaa"],
Just [" 1: aaa"],
Just [" 2: aa"],
Just [" 3: a"]]
,
testRegex "(a|)*\\d" []
["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]
[Nothing,
Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]]
,
testRegex "(?>a|)*\\d" []
["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]
[Nothing,
Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]]
,
testRegex "(?:a|)*\\d" []
["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]
[Nothing,
Just [" 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4"]]
,
testRegex "^a.b" [ERROR]
["a\\rb",
"a\\nb\\<cr> ",
"** Failers",
"a\\nb",
"a\\nb\\<any>",
"a\\rb\\<cr> ",
"a\\rb\\<any> "]
[Just [" 0: a\\x0db"],
Just [" 0: a\\x0ab"],
Nothing,
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex "^abc." [ERROR]
["abc1 \\x0aabc2 \\x0babc3xx \\x0cabc4 \\x0dabc5xx \\x0d\\x0aabc6 \\x85abc7 \\x{2028}abc8 \\x{2029}abc9 JUNK"]
[Just [" 0: abc1"],
Just [" 0: abc2"],
Just [" 0: abc3"],
Just [" 0: abc4"],
Just [" 0: abc5"],
Just [" 0: abc6"],
Just [" 0: abc7"]]
,
testRegex "abc.$" [ERROR]
["abc1\\x0a abc2\\x0b abc3\\x0c abc4\\x0d abc5\\x0d\\x0a abc6\\x85 abc7\\x{2028} abc8\\x{2029} abc9"]
[Just [" 0: abc1"],
Just [" 0: abc2"],
Just [" 0: abc3"],
Just [" 0: abc4"],
Just [" 0: abc5"],
Just [" 0: abc6"],
Just [" 0: abc9"]]
,
testRegex "^a\\Rb" [ERROR]
["a\\nb",
"a\\rb",
"a\\r\\nb",
"a\\x0bb",
"a\\x0cb",
"a\\x85b ",
"** Failers",
"a\\n\\rb "]
[Just [" 0: a\\x0ab"],
Just [" 0: a\\x0db"],
Just [" 0: a\\x0d\\x0ab"],
Just [" 0: a\\x0bb"],
Just [" 0: a\\x0cb"],
Just [" 0: a\\x85b"],
Nothing,
Nothing]
,
testRegex "^a\\R*b" [ERROR]
["ab",
"a\\nb",
"a\\rb",
"a\\r\\nb",
"a\\x0bb",
"a\\x0cb",
"a\\x85b ",
"a\\n\\rb ",
"a\\n\\r\\x85\\x0cb "]
[Just [" 0: ab"],
Just [" 0: a\\x0ab"],
Just [" 0: a\\x0db"],
Just [" 0: a\\x0d\\x0ab"],
Just [" 0: a\\x0bb"],
Just [" 0: a\\x0cb"],
Just [" 0: a\\x85b"],
Just [" 0: a\\x0a\\x0db"],
Just [" 0: a\\x0a\\x0d\\x85\\x0cb"]]
,
testRegex "^a\\R+b" [ERROR]
["a\\nb",
"a\\rb",
"a\\r\\nb",
"a\\x0bb",
"a\\x0cb",
"a\\x85b ",
"a\\n\\rb ",
"a\\n\\r\\x85\\x0cb ",
"** Failers",
"ab ",
"",
"/^a\\R{1,3}b/<bsr_unicode>",
"a\\nb",
"a\\n\\rb",
"a\\n\\r\\x85b",
"a\\r\\n\\r\\nb ",
"a\\r\\n\\r\\n\\r\\nb ",
"a\\n\\r\\n\\rb",
"a\\n\\n\\r\\nb ",
"** Failers",
"a\\n\\n\\n\\rb",
"a\\r"]
[Just [" 0: a\\x0ab"],
Just [" 0: a\\x0db"],
Just [" 0: a\\x0d\\x0ab"],
Just [" 0: a\\x0bb"],
Just [" 0: a\\x0cb"],
Just [" 0: a\\x85b"],
Just [" 0: a\\x0a\\x0db"],
Just [" 0: a\\x0a\\x0d\\x85\\x0cb"],
Nothing,
Nothing,
Just ["/^a\\R{1,3}b/<bsr_unicode>"],
Just [" 0: a\\x0ab"],
Just [" 0: a\\x0a\\x0db"],
Just [" 0: a\\x0a\\x0d\\x85b"],
Just [" 0: a\\x0d\\x0a\\x0d\\x0ab"],
Just [" 0: a\\x0d\\x0a\\x0d\\x0a\\x0d\\x0ab"],
Just [" 0: a\\x0a\\x0d\\x0a\\x0db"],
Just [" 0: a\\x0a\\x0a\\x0d\\x0ab"],
Nothing,
Nothing,
Nothing]
,
testRegex "^a[\\R]b" [ERROR]
["aRb",
"** Failers",
"a\\nb "]
[Just [" 0: aRb"],
Nothing,
Nothing]
,
testRegex ".+foo" []
["afoo",
"** Failers ",
"\\r\\nfoo ",
"\\nfoo "]
[Just [" 0: afoo"],
Nothing,
Nothing,
Nothing]
,
testRegex ".+foo" [ERROR]
["afoo",
"\\nfoo ",
"** Failers ",
"\\r\\nfoo "]
[Just [" 0: afoo"],
Just [" 0: \\x0afoo"],
Nothing,
Nothing]
,
testRegex ".+foo" [ERROR]
["afoo",
"** Failers ",
"\\nfoo ",
"\\r\\nfoo "]
[Just [" 0: afoo"],
Nothing,
Nothing,
Nothing]
,
testRegex ".+foo" [ERROR]
["afoo",
"\\r\\nfoo ",
"\\nfoo "]
[Just [" 0: afoo"],
Just [" 0: \\x0d\\x0afoo"],
Just [" 0: \\x0afoo"]]
,
testRegex "^$" [ERROR]
["abc\\r\\rxyz",
"abc\\n\\rxyz ",
"** Failers ",
"abc\\r\\nxyz"]
[Just [" 0: "],
Just [" 0: "],
Nothing,
Nothing]
,
testRegex "^X" [ERROR]
["XABC",
"** Failers ",
"XABC\\B"]
[Just [" 0: X"],
Nothing,
Nothing]
,
testRegex "(?m)^$" [ERROR]
["abc\\r\\n\\r\\n"]
[Just [" 0: "],
Just [" 0+ \\x0d\\x0a"]]
,
testRegex "(?m)^$|^\\r\\n" [ERROR]
["abc\\r\\n\\r\\n",
"",
"/(?m)$/<any>g+ ",
"abc\\r\\n\\r\\n"]
[Just [" 0: \\x0d\\x0a"],
Just [" 0+ "],
Just [" 1: "],
Just ["/(?m)$/<any>g+ "],
Just [" 0: "],
Just [" 0+ \\x0d\\x0a\\x0d\\x0a"],
Just [" 0: "],
Just [" 0+ \\x0d\\x0a"],
Just [" 0: "],
Just [" 0+ "]]
,
testRegex "(?|(abc)|(xyz))" []
[">abc<",
">xyz< "]
[Just [" 0: abc"],
Just [" 0: xyz"]]
,
testRegex "(x)(?|(abc)|(xyz))(x)" []
["xabcx",
"xxyzx "]
[Just [" 0: xabcx"],
Just [" 0: xxyzx"]]
,
testRegex "(x)(?|(abc)(pqr)|(xyz))(x)" []
["xabcpqrx",
"xxyzx "]
[Just [" 0: xabcpqrx"],
Just [" 0: xxyzx"]]
,
testRegex "(?|(abc)|(xyz))(?1)" []
["abcabc",
"xyzabc ",
"** Failers ",
"xyzxyz ",
"",
"/\\H\\h\\V\\v/",
"X X\\x0a",
"X\\x09X\\x0b",
"** Failers",
"\\xa0 X\\x0a ",
"",
"/\\H*\\h+\\V?\\v{3,4}/ ",
"\\x09\\x20\\xa0X\\x0a\\x0b\\x0c\\x0d\\x0a",
"\\x09\\x20\\xa0\\x0a\\x0b\\x0c\\x0d\\x0a",
"\\x09\\x20\\xa0\\x0a\\x0b\\x0c",
"** Failers ",
"\\x09\\x20\\xa0\\x0a\\x0b",
"",
"/\\H{3,4}/",
"XY ABCDE",
"XY PQR ST ",
"",
"/.\\h{3,4}./",
"XY AB PQRS"]
[Just [" 0: abcabc"],
Just [" 0: xyzabc"],
Nothing,
Nothing,
Just ["/\\H\\h\\V\\v/"],
Just [" 0: X X\\x0a"],
Just [" 0: X\\x09X\\x0b"],
Nothing,
Nothing,
Just ["/\\H*\\h+\\V?\\v{3,4}/ "],
Just [" 0: \\x09 \\xa0X\\x0a\\x0b\\x0c\\x0d"],
Just [" 1: \\x09 \\xa0X\\x0a\\x0b\\x0c"],
Just [" 0: \\x09 \\xa0\\x0a\\x0b\\x0c\\x0d"],
Just [" 1: \\x09 \\xa0\\x0a\\x0b\\x0c"],
Just [" 0: \\x09 \\xa0\\x0a\\x0b\\x0c"],
Nothing,
Nothing,
Just ["/\\H{3,4}/"],
Just [" 0: ABCD"],
Just [" 1: ABC"],
Just [" 0: PQR"],
Just ["/.\\h{3,4}./"],
Just [" 0: B P"],
Just [" 1: B "]]
,
testRegex "\\h*X\\h?\\H+Y\\H?Z" []
[">XNNNYZ",
"> X NYQZ",
"** Failers",
">XYZ ",
"> X NY Z"]
[Just [" 0: XNNNYZ"],
Just [" 0: X NYQZ"],
Nothing,
Nothing,
Nothing]
,
testRegex "\\v*X\\v?Y\\v+Z\\V*\\x0a\\V+\\x0b\\V{2,3}\\x0c" []
[">XY\\x0aZ\\x0aA\\x0bNN\\x0c",
">\\x0a\\x0dX\\x0aY\\x0a\\x0bZZZ\\x0aAAA\\x0bNNN\\x0c"]
[Just [" 0: XY\\x0aZ\\x0aA\\x0bNN\\x0c"],
Just [" 0: \\x0a\\x0dX\\x0aY\\x0a\\x0bZZZ\\x0aAAA\\x0bNNN\\x0c"]]
,
testRegex ".+A" [ERROR]
["\\r\\nA",
"",
"/\\nA/<crlf>",
"\\r\\nA "]
[Nothing,
Just ["/\\nA/<crlf>"],
Just [" 0: \\x0aA"]]
,
testRegex "[\\r\\n]A" [ERROR]
["\\r\\nA "]
[Just [" 0: \\x0aA"]]
,
testRegex "(\\r|\\n)A" [ERROR]
["\\r\\nA "]
[Just [" 0: \\x0aA"]]
,
testRegex "a\\Rb" [ERROR]
["a\\rb",
"a\\nb",
"a\\r\\nb",
"** Failers",
"a\\x85b",
"a\\x0bb "]
[Just ["Capturing subpattern count = 0"],
Just ["Options: bsr_anycrlf"],
Just ["First char = 'a'"],
Just ["Need char = 'b'"],
Just [" 0: a\\x0db"],
Just [" 0: a\\x0ab"],
Just [" 0: a\\x0d\\x0ab"],
Nothing,
Nothing,
Nothing]
,
testRegex "a\\Rb" [ERROR]
["a\\rb",
"a\\nb",
"a\\r\\nb",
"a\\x85b",
"a\\x0bb ",
"** Failers ",
"a\\x85b\\<bsr_anycrlf>",
"a\\x0bb\\<bsr_anycrlf>",
"",
"/a\\R?b/I<bsr_anycrlf>",
"a\\rb",
"a\\nb",
"a\\r\\nb",
"** Failers",
"a\\x85b",
"a\\x0bb "]
[Just ["Capturing subpattern count = 0"],
Just ["Options: bsr_unicode"],
Just ["First char = 'a'"],
Just ["Need char = 'b'"],
Just [" 0: a\\x0db"],
Just [" 0: a\\x0ab"],
Just [" 0: a\\x0d\\x0ab"],
Just [" 0: a\\x85b"],
Just [" 0: a\\x0bb"],
Nothing,
Nothing,
Nothing,
Just ["/a\\R?b/I<bsr_anycrlf>"],
Just ["Capturing subpattern count = 0"],
Just ["Options: bsr_anycrlf"],
Just ["First char = 'a'"],
Just ["Need char = 'b'"],
Just [" 0: a\\x0db"],
Just [" 0: a\\x0ab"],
Just [" 0: a\\x0d\\x0ab"],
Nothing,
Nothing,
Nothing]
,
testRegex "a\\R?b" [ERROR]
["a\\rb",
"a\\nb",
"a\\r\\nb",
"a\\x85b",
"a\\x0bb ",
"** Failers ",
"a\\x85b\\<bsr_anycrlf>",
"a\\x0bb\\<bsr_anycrlf>",
"",
"/a\\R{2,4}b/I<bsr_anycrlf>",
"a\\r\\n\\nb",
"a\\n\\r\\rb",
"a\\r\\n\\r\\n\\r\\n\\r\\nb",
"** Failers",
"a\\x85\\85b",
"a\\x0b\\0bb "]
[Just ["Capturing subpattern count = 0"],
Just ["Options: bsr_unicode"],
Just ["First char = 'a'"],
Just ["Need char = 'b'"],
Just [" 0: a\\x0db"],
Just [" 0: a\\x0ab"],
Just [" 0: a\\x0d\\x0ab"],
Just [" 0: a\\x85b"],
Just [" 0: a\\x0bb"],
Nothing,
Nothing,
Nothing,
Just ["/a\\R{2,4}b/I<bsr_anycrlf>"],
Just ["Capturing subpattern count = 0"],
Just ["Partial matching not supported"],
Just ["Options: bsr_anycrlf"],
Just ["First char = 'a'"],
Just ["Need char = 'b'"],
Just [" 0: a\\x0d\\x0a\\x0ab"],
Just [" 0: a\\x0a\\x0d\\x0db"],
Just [" 0: a\\x0d\\x0a\\x0d\\x0a\\x0d\\x0a\\x0d\\x0ab"],
Nothing,
Nothing,
Nothing]
,
testRegex "a\\R{2,4}b" [ERROR]
["a\\r\\rb",
"a\\n\\n\\nb",
"a\\r\\n\\n\\r\\rb",
"a\\x85\\85b",
"a\\x0b\\0bb ",
"** Failers ",
"a\\r\\r\\r\\r\\rb ",
"a\\x85\\85b\\<bsr_anycrlf>",
"a\\x0b\\0bb\\<bsr_anycrlf>"]
[Just ["Capturing subpattern count = 0"],
Just ["Partial matching not supported"],
Just ["Options: bsr_unicode"],
Just ["First char = 'a'"],
Just ["Need char = 'b'"],
Just [" 0: a\\x0d\\x0db"],
Just [" 0: a\\x0a\\x0a\\x0ab"],
Just [" 0: a\\x0d\\x0a\\x0a\\x0d\\x0db"],
Nothing,
Nothing,
Nothing,
Nothing,
Nothing,
Nothing]
,
testRegex " End of testinput7 " []
[]
[]