return{{source="\116\104\101 \113\117\105\099\107 \098\114\111\119\110 \102\111\120";tests={{input="\116\104\101 \113\117\105\099\107 \098\114\111\119\110 \102\111\120";matches={{index=0,match="\116\104\101 \113\117\105\099\107 \098\114\111\119\110 \102\111\120"}}},{input="\084\104\101 \113\117\105\099\107 \098\114\111\119\110 \070\079\088"};{input="\087\104\097\116 \100\111 \121\111\117 \107\110\111\119 \097\098\111\117\116 \116\104\101 \113\117\105\099\107 \098\114\111\119\110 \102\111\120\063",matches={{index=0;match="\116\104\101 \113\117\105\099\107 \098\114\111\119\110 \102\111\120"}}},{input="\087\104\097\116 \100\111 \121\111\117 \107\110\111\119 \097\098\111\117\116 \084\072\069 \081\085\073\067\075 \066\082\079\087\078 \070\079\088\063"}}};{source="\094\040\097\098\099\041\123\049\044\050\125\122\122",tests={{input="\097\098\099\122\122",matches={{index=0;match="\097\098\099\122\122"};{index=1,match="\097\098\099"}}};{input="\097\098\099\097\098\099\122\122";matches={{index=0,match="\097\098\099\097\098\099\122\122"};{index=1;match="\097\098\099"}}},{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\122\122"};{input="\097\098\099\097\098\099\097\098\099\122\122"},{input="\062\062\097\098\099\122\122"}}};{source="\094\040\098\043\063\124\097\041\123\049\044\050\125\063\099",tests={{input="\098\098\099";matches={{index=0,match="\098\098\099"};{index=1;match="\098"}}},{input="\098\098\098\099";matches={{index=0;match="\098\098\098\099"},{index=1,match="\098\098"}}};{input="\098\097\099",matches={{index=0,match="\098\097\099"};{index=1,match="\097"}}},{input="\098\098\097\099";matches={{index=0,match="\098\098\097\099"},{index=1,match="\097"}}},{input="\097\097\099";matches={{index=0,match="\097\097\099"};{index=1;match="\097"}}};{input="\097\098\098\098\098\098\098\098\098\098\098\098\099",matches={{index=0;match="\097\098\098\098\098\098\098\098\098\098\098\098\099"},{index=1,match="\098\098\098\098\098\098\098\098\098\098\098"}}},{input="\098\098\098\098\098\098\098\098\098\098\098\097\099",matches={{index=0,match="\098\098\098\098\098\098\098\098\098\098\098\097\099"};{index=1;match="\097"}}};{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\097\097\097\099"};{input="\097\098\098\098\098\098\098\098\098\098\098\098\097\099"}}};{source="\094\040\098\043\124\097\041\123\049\044\050\125\099";tests={{input="\098\099",matches={{index=0;match="\098\099"};{index=1,match="\098"}}};{input="\098\098\099",matches={{index=0,match="\098\098\099"},{index=1;match="\098\098"}}};{input="\098\098\098\099",matches={{index=0,match="\098\098\098\099"},{index=1,match="\098\098\098"}}};{input="\098\097\099",matches={{index=0,match="\098\097\099"};{index=1;match="\097"}}};{input="\098\098\097\099",matches={{index=0,match="\098\098\097\099"},{index=1,match="\097"}}};{input="\097\097\099";matches={{index=0;match="\097\097\099"},{index=1;match="\097"}}};{input="\097\098\098\098\098\098\098\098\098\098\098\098\099";matches={{index=0;match="\097\098\098\098\098\098\098\098\098\098\098\098\099"},{index=1,match="\098\098\098\098\098\098\098\098\098\098\098"}}},{input="\098\098\098\098\098\098\098\098\098\098\098\097\099";matches={{index=0;match="\098\098\098\098\098\098\098\098\098\098\098\097\099"};{index=1;match="\097"}}};{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\097\097\097\099"};{input="\097\098\098\098\098\098\098\098\098\098\098\098\097\099"}}};{source="\094\040\098\043\124\097\041\123\049\044\050\125\063\098\099";tests={{input="\098\098\099";matches={{index=0;match="\098\098\099"}}}}},{source="\094\040\098\042\124\098\097\041\123\049\044\050\125\063\098\099",tests={{input="\098\097\098\099",matches={{index=0;match="\098\097\098\099"},{index=1,match="\098\097"}}};{input="\098\098\097\098\099";matches={{index=0;match="\098\098\097\098\099"},{index=1,match="\098\097"}}};{input="\098\097\098\097\098\099",matches={{index=0;match="\098\097\098\097\098\099"};{index=1,match="\098\097"}}},{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\098\097\098\097\098\098\099"},{input="\098\097\098\097\098\097\098\099"}}},{source="\094\040\098\097\124\098\042\041\123\049\044\050\125\063\098\099";tests={{input="\098\097\098\099",matches={{index=0;match="\098\097\098\099"}}};{input="\098\098\097\098\099";matches={{index=0,match="\098\098\097\098\099"};{index=1;match="\098\097"}}},{input="\098\097\098\097\098\099",matches={{index=0;match="\098\097\098\097\098\099"},{index=1;match="\098\097"}}};{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\098\097\098\097\098\098\099"};{input="\098\097\098\097\098\097\098\099"}}};{source="\094\091\097\098\092\093\099\100\101\093",tests={{input="\097\116\104\105\110\103",matches={{index=0;match="\097"}}};{input="\098\116\104\105\110\103",matches={{index=0,match="\098"}}};{input="\093\116\104\105\110\103";matches={{index=0,match="\093"}}};{input="\099\116\104\105\110\103",matches={{index=0,match="\099"}}};{input="\100\116\104\105\110\103";matches={{index=0;match="\100"}}},{input="\101\116\104\105\110\103",matches={{index=0,match="\101"}}},{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\102\116\104\105\110\103"},{input="\091\116\104\105\110\103"};{input="\092\116\104\105\110\103"}}},{source="\094\091\093\099\100\101\093";tests={{input="\093\116\104\105\110\103",matches={{index=0;match="\093"}}},{input="\099\116\104\105\110\103",matches={{index=0;match="\099"}}};{input="\100\116\104\105\110\103",matches={{index=0;match="\100"}}},{input="\101\116\104\105\110\103",matches={{index=0;match="\101"}}},{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\097\116\104\105\110\103"};{input="\102\116\104\105\110\103"}}},{source="\094\091\094\097\098\092\093\099\100\101\093";tests={{input="\102\116\104\105\110\103",matches={{index=0;match="\102"}}};{input="\091\116\104\105\110\103";matches={{index=0,match="\091"}}},{input="\092\116\104\105\110\103",matches={{index=0;match="\092"}}};{input="\042\042\042 \070\097\105\108\101\114\115";matches={{index=0,match="\042"}}};{input="\097\116\104\105\110\103"},{input="\098\116\104\105\110\103"};{input="\093\116\104\105\110\103"},{input="\099\116\104\105\110\103"};{input="\100\116\104\105\110\103"};{input="\101\116\104\105\110\103"}}},{source="\094\091\094\093\099\100\101\093";tests={{input="\097\116\104\105\110\103";matches={{index=0,match="\097"}}},{input="\102\116\104\105\110\103",matches={{index=0,match="\102"}}};{input="\042\042\042 \070\097\105\108\101\114\115";matches={{index=0;match="\042"}}},{input="\093\116\104\105\110\103"};{input="\099\116\104\105\110\103"};{input="\100\116\104\105\110\103"};{input="\101\116\104\105\110\103"}}},{source="\094\091\048-\057\093\043\036";tests={{input="\048";matches={{index=0,match="\048"}}};{input="\049";matches={{index=0;match="\049"}}},{input="\050",matches={{index=0,match="\050"}}},{input="\051";matches={{index=0;match="\051"}}};{input="\052",matches={{index=0,match="\052"}}};{input="\053";matches={{index=0;match="\053"}}};{input="\054",matches={{index=0,match="\054"}}};{input="\055",matches={{index=0,match="\055"}}};{input="\056";matches={{index=0;match="\056"}}},{input="\057",matches={{index=0;match="\057"}}};{input="\049\048";matches={{index=0,match="\049\048"}}},{input="\049\048\048",matches={{index=0;match="\049\048\048"}}};{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\097\098\099"}}};{source="\094\046\042\110\116\101\114",tests={{input="\101\110\116\101\114";matches={{index=0;match="\101\110\116\101\114"}}},{input="\105\110\116\101\114";matches={{index=0;match="\105\110\116\101\114"}}},{input="\117\112\111\110\116\101\114",matches={{index=0;match="\117\112\111\110\116\101\114"}}}}};{source="\094\120\120\120\091\048-\057\093\043\036";tests={{input="\120\120\120\048";matches={{index=0,match="\120\120\120\048"}}};{input="\120\120\120\049\050\051\052";matches={{index=0,match="\120\120\120\049\050\051\052"}}},{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\120\120\120"}}};{source="\094\046\043\091\048-\057\093\091\048-\057\093\091\048-\057\093\036";tests={{input="\120\049\050\051",matches={{index=0;match="\120\049\050\051"}}};{input="\120\120\049\050\051",matches={{index=0,match="\120\120\049\050\051"}}};{input="\049\050\051\052\053\054";matches={{index=0;match="\049\050\051\052\053\054"}}};{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\049\050\051"},{input="\120\049\050\051\052";matches={{index=0;match="\120\049\050\051\052"}}}}},{source="\094\046\043\063\091\048-\057\093\091\048-\057\093\091\048-\057\093\036",tests={{input="\120\049\050\051";matches={{index=0;match="\120\049\050\051"}}};{input="\120\120\049\050\051";matches={{index=0,match="\120\120\049\050\051"}}};{input="\049\050\051\052\053\054",matches={{index=0,match="\049\050\051\052\053\054"}}},{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\049\050\051"},{input="\120\049\050\051\052";matches={{index=0;match="\120\049\050\051\052"}}}}};{source="\094\040\091\094\033\093\043\041\033\040\046\043\041\061\097\112\113\117\120\122\092\046\105\120\114\092\046\122\122\122\092\046\097\099\092\046\117\107\036";tests={{input="\097\098\099\033\112\113\114\061\097\112\113\117\120\122\046\105\120\114\046\122\122\122\046\097\099\046\117\107";matches={{index=0,match="\097\098\099\033\112\113\114\061\097\112\113\117\120\122\046\105\120\114\046\122\122\122\046\097\099\046\117\107"},{index=1,match="\097\098\099"},{index=2,match="\112\113\114"}}},{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\033\112\113\114\061\097\112\113\117\120\122\046\105\120\114\046\122\122\122\046\097\099\046\117\107"},{input="\097\098\099\033\061\097\112\113\117\120\122\046\105\120\114\046\122\122\122\046\097\099\046\117\107"},{input="\097\098\099\033\112\113\114\061\097\112\113\117\120\122\058\105\120\114\046\122\122\122\046\097\099\046\117\107"},{input="\097\098\099\033\112\113\114\061\097\112\113\117\120\122\046\105\120\114\046\122\122\122\046\097\099\046\117\107\107"}}};{source="\058",tests={{input="\087\101\108\108\044 \119\101 \110\101\101\100 \097 \099\111\108\111\110\058 \115\111\109\101\119\104\101\114\101";matches={{index=0;match="\058"}}},{input="\042\042\042 \070\097\105\108 \105\102 \119\101 \100\111\110\'\116"}}};{source="\040\091\092\100\097-\102\058\093\043\041\036",flags="\105";tests={{input="\048\097\098\099",matches={{index=0,match="\048\097\098\099"},{index=1,match="\048\097\098\099"}}},{input="\097\098\099";matches={{index=0,match="\097\098\099"};{index=1,match="\097\098\099"}}},{input="\102\101\100";matches={{index=0;match="\102\101\100"};{index=1;match="\102\101\100"}}},{input="\058\058";matches={{index=0,match="\058\058"},{index=1;match="\058\058"}}};{input="\102\101\100 \100\101\102";matches={{index=0;match="\100\101\102"};{index=1,match="\100\101\102"}}};{input="\065\110\121 \111\108\100 \115\116\117\102\102",matches={{index=0,match="\102\102"};{index=1;match="\102\102"}}};{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\048\122\122\122"},{input="\103\122\122\122"},{input="\102\101\100 "},{input="\065\110\121 \111\108\100 \114\117\098\098\105\115\104"}}};{source="\094\046\042\092\046\040\092\100\123\049\044\051\125\041\092\046\040\092\100\123\049\044\051\125\041\092\046\040\092\100\123\049\044\051\125\041\036",tests={{input="\046\049\046\050\046\051",matches={{index=0;match="\046\049\046\050\046\051"};{index=1;match="\049"},{index=2,match="\050"},{index=3,match="\051"}}};{input="\065\046\049\050\046\049\050\051\046\048",matches={{index=0,match="\065\046\049\050\046\049\050\051\046\048"};{index=1,match="\049\050"},{index=2,match="\049\050\051"};{index=3,match="\048"}}};{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\046\049\046\050\046\051\051\051\051"};{input="\049\046\050\046\051"},{input="\049\050\051\052\046\050\046\051"}}};{source="\094\040\092\100\043\041\092\115\043\073\078\092\115\043\083\079\065\092\115\043\040\092\083\043\041\092\115\043\040\092\083\043\041\092\115\042\092\040\092\115\042\036",tests={{input="\049 \073\078 \083\079\065 \110\111\110-\115\112\049 \110\111\110-\115\112\050\040",matches={{index=0;match="\049 \073\078 \083\079\065 \110\111\110-\115\112\049 \110\111\110-\115\112\050\040"},{index=1,match="\049"},{index=2,match="\110\111\110-\115\112\049"};{index=3,match="\110\111\110-\115\112\050"}}},{input="\049    \073\078    \083\079\065    \110\111\110-\115\112\049    \110\111\110-\115\112\050   \040";matches={{index=0;match="\049    \073\078    \083\079\065    \110\111\110-\115\112\049    \110\111\110-\115\112\050   \040"};{index=1;match="\049"};{index=2;match="\110\111\110-\115\112\049"},{index=3;match="\110\111\110-\115\112\050"}}},{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\049\073\078 \083\079\065 \110\111\110-\115\112\049 \110\111\110-\115\112\050\040"}}};{source="\094\091\097-\122\065-\090\092\100\093\091\097-\122\065-\090\092\100\092-\093\042\040\092\046\091\097-\122\065-\090\092\100\093\091\097-\122\065-\122\092\100\092-\093\042\041\042\092\046\036",tests={{input="\097\046";matches={{index=0;match="\097\046"}}},{input="\090\046";matches={{index=0;match="\090\046"}}};{input="\050\046",matches={{index=0,match="\050\046"}}};{input="\097\098-\099\046\112\113-\114\046",matches={{index=0,match="\097\098-\099\046\112\113-\114\046"};{index=1;match="\046\112\113-\114"}}},{input="\115\120\107\046\122\122\122\046\097\099\046\117\107\046";matches={{index=0,match="\115\120\107\046\122\122\122\046\097\099\046\117\107\046"},{index=1,match="\046\117\107"}}},{input="\120-\046\121-\046";matches={{index=0,match="\120-\046\121-\046"};{index=1,match="\046\121-"}}},{input="\042\042\042 \070\097\105\108\101\114\115"},{input="-\097\098\099\046\112\101\113\046"}}},{source="\094\092\042\092\046\091\097-\122\093\040\091\097-\122\092-\092\100\093\042\091\097-\122\092\100\093\043\041\063\040\092\046\091\097-\122\093\040\091\097-\122\092-\092\100\093\042\091\097-\122\092\100\093\043\041\063\041\042\036";tests={{input="\042\046\097";matches={{index=0;match="\042\046\097"}}},{input="\042\046\098\048-\097";matches={{index=0;match="\042\046\098\048-\097"},{index=1,match="\048-\097"}}},{input="\042\046\099\051-\098\046\099";matches={{index=0,match="\042\046\099\051-\098\046\099"},{index=1;match="\051-\098"},{index=2;match="\046\099"}}};{input="\042\046\099-\097\046\098-\099";matches={{index=0;match="\042\046\099-\097\046\098-\099"};{index=1;match="-\097"};{index=2;match="\046\098-\099"},{index=3;match="-\099"}}};{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\042\046\048"};{input="\042\046\097-"};{input="\042\046\097-\098\046\099-"},{input="\042\046\099-\097\046\048-\099"}}},{source="\094\040\063\061\097\098\040\100\101\041\041\040\097\098\100\041\040\101\041";tests={{input="\097\098\100\101";matches={{index=0;match="\097\098\100\101"},{index=2,match="\097\098\100"};{index=3,match="\101"}}}}};{source="\094\040\063\033\040\097\098\041\100\101\124\120\041\040\097\098\100\041\040\102\041",tests={{input="\097\098\100\102";matches={{index=0,match="\097\098\100\102"},{index=1,match="\060\117\110\115\101\116\062"},{index=2,match="\097\098\100"},{index=3,match="\102"}}}}},{source="\094\040\063\061\040\097\098\040\099\100\041\041\041\040\097\098\041";tests={{input="\097\098\099\100";matches={{index=0,match="\097\098"};{index=3,match="\097\098"}}}}},{source="\094\091\092\100\097-\102\093\040\092\046\091\092\100\097-\102\093\041\042\036",flags="\105";tests={{input="\097\046\098\046\099\046\100";matches={{index=0;match="\097\046\098\046\099\046\100"};{index=1;match="\046\100"}}}}};{source="\094\092\"\046\042\092\"\092\115\042\040\059\046\042\041\063\036",tests={{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\092\"\049\050\051\052\092\" \058 \116\104\105\110\103\115"}}};{source="\094\036",tests={{input="\042\042\042 \070\097\105\108\101\114\115"}}};{source="   \094    \097   \040\063\035 \098\101\103\105\110\115 \119\105\116\104 \097\041  \098\092\115\099 \040\063\035 \116\104\101\110 \098 \099\041 \036 \040\063\035 \116\104\101\110 \101\110\100\041";flags="\120";tests={{input="\097\098 \099";matches={{index=0,match="\097\098 \099"}}};{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\097\098\099"};{input="\097\098 \099\100\101"}}};{source="\094   \097\092 \098\091\099 \093\100       \036";flags="\120";tests={{input="\097 \098\099\100";matches={{index=0,match="\097 \098\099\100"}}};{input="\097 \098 \100",matches={{index=0,match="\097 \098 \100"}}},{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\097\098\099\100"},{input="\097\098 \100"}}},{source="\094\040\097\040\098\040\099\041\041\041\040\100\040\101\040\102\041\041\041\040\104\040\105\040\106\041\041\041\040\107\040\108\040\109\041\041\041\036";tests={{input="\097\098\099\100\101\102\104\105\106\107\108\109";matches={{index=0,match="\097\098\099\100\101\102\104\105\106\107\108\109"};{index=1;match="\097\098\099"};{index=2;match="\098\099"},{index=3,match="\099"};{index=4;match="\100\101\102"},{index=5;match="\101\102"},{index=6,match="\102"};{index=7;match="\104\105\106"},{index=8,match="\105\106"};{index=9,match="\106"},{index=10,match="\107\108\109"};{index=11;match="\108\109"},{index=12;match="\109"}}}}},{source="\094\040\063\058\097\040\098\040\099\041\041\041\040\063\058\100\040\101\040\102\041\041\041\040\063\058\104\040\105\040\106\041\041\041\040\063\058\107\040\108\040\109\041\041\041\036";tests={{input="\097\098\099\100\101\102\104\105\106\107\108\109";matches={{index=0,match="\097\098\099\100\101\102\104\105\106\107\108\109"},{index=1;match="\098\099"},{index=2;match="\099"};{index=3;match="\101\102"},{index=4;match="\102"};{index=5;match="\105\106"};{index=6;match="\106"};{index=7;match="\108\109"},{index=8;match="\109"}}}}},{source="\094\097\042\092\119",tests={{input="\122",matches={{index=0,match="\122"}}},{input="\097\122",matches={{index=0,match="\097\122"}}};{input="\097\097\097\122",matches={{index=0;match="\097\097\097\122"}}},{input="\097";matches={{index=0,match="\097"}}};{input="\097\097",matches={{index=0;match="\097\097"}}};{input="\097\097\097\097",matches={{index=0,match="\097\097\097\097"}}},{input="\097\043",matches={{index=0;match="\097"}}},{input="\097\097\043";matches={{index=0,match="\097\097"}}}}},{source="\094\097\042\063\092\119";tests={{input="\122";matches={{index=0;match="\122"}}},{input="\097\122",matches={{index=0,match="\097"}}},{input="\097\097\097\122";matches={{index=0,match="\097"}}};{input="\097";matches={{index=0;match="\097"}}},{input="\097\097";matches={{index=0;match="\097"}}},{input="\097\097\097\097";matches={{index=0;match="\097"}}};{input="\097\043",matches={{index=0,match="\097"}}},{input="\097\097\043",matches={{index=0,match="\097"}}}}};{source="\094\097\043\092\119",tests={{input="\097\122";matches={{index=0,match="\097\122"}}};{input="\097\097\097\122";matches={{index=0;match="\097\097\097\122"}}},{input="\097\097";matches={{index=0;match="\097\097"}}};{input="\097\097\097\097",matches={{index=0;match="\097\097\097\097"}}},{input="\097\097\043",matches={{index=0;match="\097\097"}}}}},{source="\094\097\043\063\092\119",tests={{input="\097\122",matches={{index=0;match="\097\122"}}},{input="\097\097\097\122";matches={{index=0,match="\097\097"}}};{input="\097\097",matches={{index=0;match="\097\097"}}};{input="\097\097\097\097",matches={{index=0;match="\097\097"}}};{input="\097\097\043",matches={{index=0,match="\097\097"}}}}},{source="\094\092\100\123\056\125\092\119\123\050\044\125",tests={{input="\049\050\051\052\053\054\055\056\057\048",matches={{index=0;match="\049\050\051\052\053\054\055\056\057\048"}}},{input="\049\050\051\052\053\054\055\056\097\098",matches={{index=0,match="\049\050\051\052\053\054\055\056\097\098"}}};{input="\049\050\051\052\053\054\055\056\095\095";matches={{index=0;match="\049\050\051\052\053\054\055\056\095\095"}}};{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\049\050\051\052\053\054\055"}}},{source="\094\091\097\101\105\111\117\092\100\093\123\052\044\053\125\036";tests={{input="\117\111\105\101",matches={{index=0,match="\117\111\105\101"}}};{input="\049\050\051\052";matches={{index=0;match="\049\050\051\052"}}};{input="\049\050\051\052\053";matches={{index=0,match="\049\050\051\052\053"}}};{input="\097\097\097\097\097";matches={{index=0;match="\097\097\097\097\097"}}};{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\049\050\051\052\053\054"}}},{source="\094\091\097\101\105\111\117\092\100\093\123\052\044\053\125\063";tests={{input="\117\111\105\101";matches={{index=0;match="\117\111\105\101"}}};{input="\049\050\051\052";matches={{index=0;match="\049\050\051\052"}}};{input="\049\050\051\052\053",matches={{index=0;match="\049\050\051\052"}}};{input="\097\097\097\097\097",matches={{index=0,match="\097\097\097\097"}}},{input="\049\050\051\052\053\054";matches={{index=0;match="\049\050\051\052"}}}}},{source="\092\065\040\097\098\099\124\100\101\102\041\061\040\092\049\041\123\050\044\051\125\092\090";tests={{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\097\098\099\061\100\101\102\100\101\102"}}},{source="\094\040\097\041\040\098\041\040\099\041\040\100\041\040\101\041\040\102\041\040\103\041\040\104\041\040\105\041\040\106\041\040\107\041\092\049\049\042\040\092\051\092\052\041\092\049\040\063\035\041\050\036";tests={{input="\097\098\099\100\101\102\103\104\105\106\107\099\100\097\050",matches={{index=0;match="\097\098\099\100\101\102\103\104\105\106\107\099\100\097\050"},{index=1,match="\097"};{index=2;match="\098"};{index=3;match="\099"},{index=4;match="\100"};{index=5;match="\101"};{index=6;match="\102"};{index=7,match="\103"},{index=8,match="\104"},{index=9;match="\105"},{index=10;match="\106"};{index=11;match="\107"};{index=12,match="\099\100"}}},{input="\097\098\099\100\101\102\103\104\105\106\107\107\107\107\099\100\097\050";matches={{index=0,match="\097\098\099\100\101\102\103\104\105\106\107\107\107\107\099\100\097\050"},{index=1,match="\097"};{index=2,match="\098"},{index=3;match="\099"},{index=4;match="\100"};{index=5,match="\101"};{index=6,match="\102"},{index=7,match="\103"},{index=8,match="\104"},{index=9;match="\105"},{index=10;match="\106"};{index=11,match="\107"};{index=12;match="\099\100"}}}}};{source="\040\099\097\116\040\097\040\114\097\099\116\124\116\111\110\105\099\041\124\101\114\112\105\108\108\097\114\041\041 \092\049\040\041\050\040\051\041";tests={{input="\099\097\116\097\114\097\099\116 \099\097\116\097\114\097\099\116\050\051",matches={{index=0;match="\099\097\116\097\114\097\099\116 \099\097\116\097\114\097\099\116\050\051"},{index=1;match="\099\097\116\097\114\097\099\116"};{index=2,match="\097\114\097\099\116"};{index=3,match="\114\097\099\116"},{index=4;match=""},{index=5;match="\051"}}};{input="\099\097\116\097\116\111\110\105\099 \099\097\116\097\116\111\110\105\099\050\051";matches={{index=0,match="\099\097\116\097\116\111\110\105\099 \099\097\116\097\116\111\110\105\099\050\051"};{index=1,match="\099\097\116\097\116\111\110\105\099"};{index=2,match="\097\116\111\110\105\099"};{index=3,match="\116\111\110\105\099"};{index=4;match=""},{index=5,match="\051"}}},{input="\099\097\116\101\114\112\105\108\108\097\114 \099\097\116\101\114\112\105\108\108\097\114\050\051";matches={{index=0,match="\099\097\116\101\114\112\105\108\108\097\114 \099\097\116\101\114\112\105\108\108\097\114\050\051"},{index=1,match="\099\097\116\101\114\112\105\108\108\097\114"},{index=2,match="\101\114\112\105\108\108\097\114"};{index=3;match="\060\117\110\115\101\116\062"},{index=4,match=""},{index=5;match="\051"}}}}};{source="\094\070\114\111\109 \043\040\091\094 \093\043\041 \043\091\097-\122\065-\090\093\091\097-\122\065-\090\093\091\097-\122\065-\090\093 \043\091\097-\122\065-\090\093\091\097-\122\065-\090\093\091\097-\122\065-\090\093 \043\091\048-\057\093\063\091\048-\057\093 \043\091\048-\057\093\091\048-\057\093\058\091\048-\057\093\091\048-\057\093";tests={{input="\070\114\111\109 \097\098\099\100  \077\111\110 \083\101\112 \048\049 \049\050\058\051\051\058\048\050 \049\057\057\055",matches={{index=0;match="\070\114\111\109 \097\098\099\100  \077\111\110 \083\101\112 \048\049 \049\050\058\051\051"},{index=1;match="\097\098\099\100"}}}}},{source="\094\070\114\111\109\092\115\043\092\083\043\092\115\043\040\091\097-\122\065-\090\093\123\051\125\092\115\043\041\123\050\125\092\100\123\049\044\050\125\092\115\043\092\100\092\100\058\092\100\092\100",tests={{input="\070\114\111\109 \097\098\099\100  \077\111\110 \083\101\112 \048\049 \049\050\058\051\051\058\048\050 \049\057\057\055",matches={{index=0;match="\070\114\111\109 \097\098\099\100  \077\111\110 \083\101\112 \048\049 \049\050\058\051\051"}}},{input="\070\114\111\109 \097\098\099\100  \077\111\110 \083\101\112  \049 \049\050\058\051\051\058\048\050 \049\057\057\055";matches={{index=0,match="\070\114\111\109 \097\098\099\100  \077\111\110 \083\101\112  \049 \049\050\058\051\051"}}},{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\070\114\111\109 \097\098\099\100  \083\101\112 \048\049 \049\050\058\051\051\058\048\050 \049\057\057\055"}}};{source="\094\049\050\046\051\052";flags="\115",tests={{input="\049\050\r\051\052";matches={{index=0;match="\049\050\r\051\052"}}}}};{source="\092\119\043\040\063\061\092\116\041",tests={{input="\116\104\101 \113\117\105\099\107 \098\114\111\119\110\t \102\111\120";matches={{index=0;match="\098\114\111\119\110"}}}}},{source="\102\111\111\040\063\033\098\097\114\041\040\046\042\041";tests={{input="\102\111\111\098\097\114 \105\115 \102\111\111\108\105\115\104 \115\101\101\063";matches={{index=0,match="\102\111\111\108\105\115\104 \115\101\101\063"};{index=1,match="\108\105\115\104 \115\101\101\063"}}}}};{source="\040\063\058\040\063\033\102\111\111\041\046\046\046\124\094\046\123\048\044\050\125\041\098\097\114\040\046\042\041",tests={{input="\102\111\111\098\097\114 \099\114\111\119\098\097\114 \101\116\099";matches={{index=0,match="\114\111\119\098\097\114 \101\116\099"};{index=1;match=" \101\116\099"}}};{input="\098\097\114\114\101\108";matches={{index=0;match="\098\097\114\114\101\108"};{index=1,match="\114\101\108"}}};{input="\050\098\097\114\114\101\108";matches={{index=0;match="\050\098\097\114\114\101\108"};{index=1,match="\114\101\108"}}},{input="\065 \098\097\114\114\101\108";matches={{index=0;match="\065 \098\097\114\114\101\108"},{index=1,match="\114\101\108"}}}}};{source="\094\040\092\068\042\041\040\063\061\092\100\041\040\063\033\049\050\051\041",tests={{input="\097\098\099\052\053\054";matches={{index=0;match="\097\098\099"},{index=1,match="\097\098\099"}}},{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\097\098\099\049\050\051"}}};{source="\094\049\050\051\052\040\063\035 \116\101\115\116 \110\101\119\108\105\110\101\115\n  \105\110\115\105\100\101\041";tests={{input="\049\050\051\052";matches={{index=0,match="\049\050\051\052"}}}}},{source="\094\049\050\051\052 \035\099\111\109\109\101\110\116 \105\110 \101\120\116\101\110\100\101\100 \114\101\n  ",flags="\120",tests={{input="\049\050\051\052";matches={{index=0,match="\049\050\051\052"}}}}};{source="\035\114\104\117\098\097\114\098\n  \097\098\099\100",flags="\120",tests={{input="\097\098\099\100",matches={{index=0,match="\097\098\099\100"}}}}},{source="\094\097\098\099\100\035\114\104\117\098\097\114\098",flags="\120";tests={{input="\097\098\099\100";matches={{index=0;match="\097\098\099\100"}}}}};{source="\094\040\097\041\092\049\123\050\044\051\125\040\046\041";tests={{input="\097\097\097\098";matches={{index=0,match="\097\097\097\098"},{index=1,match="\097"};{index=2,match="\098"}}};{input="\097\097\097\097\098";matches={{index=0;match="\097\097\097\097\098"};{index=1,match="\097"};{index=2;match="\098"}}},{input="\097\097\097\097\097\098";matches={{index=0,match="\097\097\097\097\097"},{index=1,match="\097"},{index=2,match="\097"}}},{input="\097\097\097\097\097\097\098";matches={{index=0;match="\097\097\097\097\097"};{index=1,match="\097"},{index=2,match="\097"}}}}},{source="\040\063\033\094\041\097\098\099",tests={{input="\116\104\101 \097\098\099",matches={{index=0,match="\097\098\099"}}};{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\097\098\099"}}},{source="\040\063\061\094\041\097\098\099",tests={{input="\097\098\099";matches={{index=0;match="\097\098\099"}}},{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\116\104\101 \097\098\099"}}},{source="\094\091\097\098\093\123\049\044\051\125\040\097\098\042\124\098\041",tests={{input="\097\097\098\098\098\098\098";matches={{index=0,match="\097\097\098\098"};{index=1,match="\098"}}}}};{source="\094\091\097\098\093\123\049\044\051\125\063\040\097\098\042\124\098\041",tests={{input="\097\097\098\098\098\098\098",matches={{index=0,match="\097\097\098\098\098\098\098"},{index=1;match="\097\098\098\098\098\098"}}}}},{source="\094\091\097\098\093\123\049\044\051\125\063\040\097\098\042\063\124\098\041",tests={{input="\097\097\098\098\098\098\098",matches={{index=0;match="\097\097"};{index=1;match="\097"}}}}};{source="\094\091\097\098\093\123\049\044\051\125\040\097\098\042\063\124\098\041";tests={{input="\097\097\098\098\098\098\098",matches={{index=0,match="\097\097\098\098"},{index=1;match="\098"}}}}};{source="\097\098\099\092\120\048\100\101\102\092\120\048\048\112\113\114\092\120\048\048\048\120\121\122\092\120\048\048\048\048\065\066",tests={{input="\097\098\099\r\101\102\000\112\113\114\000\048\120\121\122\000\048\048\065\066";matches={{index=0;match="\097\098\099\r\101\102\000\112\113\114\000\048\120\121\122\000\048\048\065\066"}}},{input="\097\098\099\052\053\054 \097\098\099\r\101\102\000\112\113\114\000\048\120\121\122\000\048\048\065\066\067\068\069",matches={{index=0,match="\097\098\099\r\101\102\000\112\113\114\000\048\120\121\122\000\048\048\065\066"}}}}},{source="\094\091\092\048\048\048-\092\048\051\055\093",tests={{input="\000\065";matches={{index=0,match="\000"}}};{input="\001\066",matches={{index=0,match="\001"}}}}};{source="\065\092\120\048\123\050\044\051\125\090";tests={{input="\084\104\101 \065\000\000\090";matches={{index=0,match="\065\000\000\090"}}};{input="\065\110 \065\000\000\000\090",matches={{index=0;match="\065\000\000\000\090"}}},{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\065\000\090"};{input="\065\000\000\000\000\090"}}},{source="\094\040\099\111\119\124\041\092\049\040\098\101\108\108\041",tests={{input="\099\111\119\099\111\119\098\101\108\108";matches={{index=0,match="\099\111\119\099\111\119\098\101\108\108"},{index=1;match="\099\111\119"},{index=2,match="\098\101\108\108"}}};{input="\098\101\108\108";matches={{index=0;match="\098\101\108\108"};{index=1,match=""},{index=2,match="\098\101\108\108"}}};{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\099\111\119\098\101\108\108"}}},{source="\094\092\115",tests={{input="\012\097\098\099";matches={{index=0,match="\012"}}},{input="\n\097\098\099",matches={{index=0,match="\n"}}},{input="\r\097\098\099",matches={{index=0,match="\r"}}},{input="\t\097\098\099",matches={{index=0;match="\t"}}},{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\097\098\099"}}},{source="\094\097\t\098\n    \012  \099",flags="\120";tests={{input="\097\098\099";matches={{index=0,match="\097\098\099"}}}}};{source="\094\040\097\124\041\092\049\042\098";tests={{input="\097\098";matches={{index=0,match="\097\098"},{index=1;match="\097"}}};{input="\097\097\097\097\098";matches={{index=0,match="\097\097\097\097\098"};{index=1;match="\097"}}}}};{source="\094\040\097\124\041\092\049\043\098";tests={{input="\097\097\098";matches={{index=0;match="\097\097\098"};{index=1,match="\097"}}},{input="\097\097\097\097\098";matches={{index=0,match="\097\097\097\097\098"};{index=1,match="\097"}}}}};{source="\094\040\097\124\041\092\049\063\098",tests={{input="\097\098",matches={{index=0;match="\097\098"},{index=1;match="\097"}}},{input="\097\097\098";matches={{index=0,match="\097\097\098"},{index=1,match="\097"}}};{input="\098";matches={{index=0;match="\098"};{index=1;match=""}}}}},{source="\094\040\097\124\041\092\049\123\050\125\098";tests={{input="\097\097\097\098";matches={{index=0;match="\097\097\097\098"},{index=1;match="\097"}}},{input="\098",matches={{index=0;match="\098"},{index=1,match=""}}}}};{source="\094\040\097\124\041\092\049\123\050\044\051\125\098";tests={{input="\097\097\097\098";matches={{index=0,match="\097\097\097\098"};{index=1;match="\097"}}},{input="\097\097\097\097\098",matches={{index=0;match="\097\097\097\097\098"};{index=1;match="\097"}}};{input="\098";matches={{index=0;match="\098"};{index=1,match=""}}}}},{source="\097\098\123\049\044\051\125\098\099";tests={{input="\097\098\098\098\098\099";matches={{index=0;match="\097\098\098\098\098\099"}}},{input="\097\098\098\098\099";matches={{index=0;match="\097\098\098\098\099"}}},{input="\097\098\098\099";matches={{index=0,match="\097\098\098\099"}}};{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\097\098\099"},{input="\097\098\098\098\098\098\099"}}},{source="\040\091\094\046\093\042\041\092\046\040\091\094\058\093\042\041\058\091\084 \093\043\040\046\042\041";tests={{input="\116\114\097\099\107\049\046\116\105\116\108\101\058\084\066\108\097\104 \098\108\097\104 \098\108\097\104";matches={{index=0;match="\116\114\097\099\107\049\046\116\105\116\108\101\058\084\066\108\097\104 \098\108\097\104 \098\108\097\104"};{index=1,match="\116\114\097\099\107\049"};{index=2,match="\116\105\116\108\101"},{index=3,match="\066\108\097\104 \098\108\097\104 \098\108\097\104"}}}}},{source="\040\091\094\046\093\042\041\092\046\040\091\094\058\093\042\041\058\091\084 \093\043\040\046\042\041";flags="\105",tests={{input="\116\114\097\099\107\049\046\116\105\116\108\101\058\084\066\108\097\104 \098\108\097\104 \098\108\097\104";matches={{index=0;match="\116\114\097\099\107\049\046\116\105\116\108\101\058\084\066\108\097\104 \098\108\097\104 \098\108\097\104"};{index=1;match="\116\114\097\099\107\049"};{index=2,match="\116\105\116\108\101"};{index=3,match="\066\108\097\104 \098\108\097\104 \098\108\097\104"}}}}};{source="\094\091\087-\099\093\043\036";tests={{input="\087\088\089\095\094\097\098\099";matches={{index=0,match="\087\088\089\095\094\097\098\099"}}},{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\119\120\121"}}};{source="\094\091\087-\099\093\043\036";flags="\105",tests={{input="\087\088\089\095\094\097\098\099",matches={{index=0;match="\087\088\089\095\094\097\098\099"}}}}};{source="\094\097\098\099\036";flags="\109",tests={{input="\097\098\099",matches={{index=0,match="\097\098\099"}}},{input="\113\113\113\n\097\098\099",matches={{index=0;match="\097\098\099"}}}}},{source="\094\097\098\099\036",tests={{input="\097\098\099";matches={{index=0,match="\097\098\099"}}},{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\113\113\113\n\097\098\099"},{input="\097\098\099\n\122\122\122"},{input="\113\113\113\n\097\098\099\n\122\122\122"}}};{source="\092\065\097\098\099\092\090",flags="\109",tests={{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\113\113\113\n\097\098\099"},{input="\097\098\099\n\122\122\122"},{input="\113\113\113\n\097\098\099\n\122\122\122"}}},{source="\092\065\040\046\041\042\092\090";flags="\109";tests={{input="\097\098\099\n\100\101\102"}}};{source="\040\063\058\098\041\124\040\063\058\058\043\041";tests={{input="\098\058\058\099";matches={{index=0,match="\098"}}}}},{source="\091-\097\122\093\043";tests={{input="\097\122-",matches={{index=0,match="\097\122-"}}};{input="\042\042\042 \070\097\105\108\101\114\115",matches={{index=0,match="\097"}}};{input="\098"}}};{source="\091\097\122-\093\043";tests={{input="\122\097-",matches={{index=0;match="\122\097-"}}};{input="\042\042\042 \070\097\105\108\101\114\115";matches={{index=0;match="\097"}}};{input="\098"}}};{source="\091\097\092-\122\093\043";tests={{input="\097-\122",matches={{index=0,match="\097-\122"}}},{input="\042\042\042 \070\097\105\108\101\114\115";matches={{index=0,match="\097"}}};{input="\098"}}};{source="\091\097-\122\093\043";tests={{input="\097\098\099\100\120\121\122";matches={{index=0,match="\097\098\099\100\120\121\122"}}}}};{source="\091\092\100-\093\043",tests={{input="\049\050-\051\052";matches={{index=0;match="\049\050-\051\052"}}};{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\097\097\097"}}},{source="\091\092\100-\122\093\043",tests={{input="\049\050-\051\052\122",matches={{index=0;match="\049\050-\051\052\122"}}};{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\097\097\097"}}};{source="\092\120\053\099";tests={{input="\092";matches={{index=0;match="\092"}}}}},{source="\092\120\050\048\090";tests={{input="\116\104\101 \090\111\111",matches={{index=0,match=" \090"}}},{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\090\117\108\117"}}};{source="\040\097\098\099\041\092\049",flags="\105";tests={{input="\097\098\099\097\098\099";matches={{index=0,match="\097\098\099\097\098\099"},{index=1,match="\097\098\099"}}}}};{source="\097\098\123\051\099\100";tests={{input="\097\098\123\051\099\100",matches={{index=0;match="\097\098\123\051\099\100"}}}}},{source="\097\098\123\051\044\099\100";tests={{input="\097\098\123\051\044\099\100";matches={{index=0;match="\097\098\123\051\044\099\100"}}}}},{source="\097\098\123\051\044\052\097\125\099\100";tests={{input="\097\098\123\051\044\052\097\125\099\100";matches={{index=0;match="\097\098\123\051\044\052\097\125\099\100"}}}}};{source="\123\052\044\053\097\125\098\099";tests={{input="\123\052\044\053\097\125\098\099";matches={{index=0,match="\123\052\044\053\097\125\098\099"}}}}},{source="\097\098\099\036",tests={{input="\097\098\099",matches={{index=0;match="\097\098\099"}}};{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\097\098\099\n\100\101\102"}}};{source="\040\097\098\099\041\092\049\050\051",tests={{input="\097\098\099\083",matches={{index=0;match="\097\098\099\083"},{index=1,match="\097\098\099"}}}}},{source="\040\097\098\099\041\092\049\048\048",tests={{input="\097\098\099\064",matches={{index=0;match="\097\098\099\064"};{index=1;match="\097\098\099"}}}}},{source="\040\097\098\099\041\092\049\048\048\048";tests={{input="\097\098\099\064\048",matches={{index=0;match="\097\098\099\064\048"};{index=1,match="\097\098\099"}}};{input="\097\098\099\064\048",matches={{index=0,match="\097\098\099\064\048"},{index=1,match="\097\098\099"}}}}};{source="\094\040\065\041\040\066\041\040\067\041\040\068\041\040\069\041\040\070\041\040\071\041\040\072\041\040\073\041\092\056\092\057\036";tests={{input="\065\066\067\068\069\070\071\072\073\072\073";matches={{index=0,match="\065\066\067\068\069\070\071\072\073\072\073"},{index=1;match="\065"},{index=2,match="\066"},{index=3,match="\067"};{index=4,match="\068"};{index=5;match="\069"},{index=6;match="\070"};{index=7,match="\071"};{index=8,match="\072"},{index=9,match="\073"}}}}};{source="\094\091\065\092\056\066\092\057\067\093\043\036";tests={{input="\065\056\066\057\067";matches={{index=0;match="\065\056\066\057\067"}}};{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\065\056\066\057\067\000"}}};{source="\040\097\041\040\098\041\040\099\041\040\100\041\040\101\041\040\102\041\040\103\041\040\104\041\040\105\041\040\106\041\040\107\041\040\108\041\092\049\050\092\049\050\051";tests={{input="\097\098\099\100\101\102\103\104\105\106\107\108\108\083";matches={{index=0,match="\097\098\099\100\101\102\103\104\105\106\107\108\108\083"},{index=1;match="\097"};{index=2,match="\098"},{index=3,match="\099"},{index=4,match="\100"},{index=5;match="\101"},{index=6,match="\102"},{index=7,match="\103"};{index=8,match="\104"},{index=9,match="\105"};{index=10;match="\106"},{index=11;match="\107"},{index=12,match="\108"}}}}},{source="\097\123\048\125\098\099",tests={{input="\098\099",matches={{index=0,match="\098\099"}}}}},{source="\097\098\099\091\092\049\093\100\101",tests={{input="\097\098\099\001\100\101";matches={{index=0,match="\097\098\099\001\100\101"}}}}},{source="\040\097\098\099\041\091\092\049\093\100\101";tests={{input="\097\098\099\001\100\101";matches={{index=0,match="\097\098\099\001\100\101"},{index=1;match="\097\098\099"}}}}};{source="\094\040\091\094\097\093\041\040\091\094\092\098\093\041\040\091\094\099\093\042\041\040\091\094\100\093\123\051\044\052\125\041",tests={{input="\098\097\078\079\084\099\099\099\099\100";matches={{index=0;match="\098\097\078\079\084\099\099\099\099"};{index=1,match="\098"},{index=2;match="\097"},{index=3,match="\078\079\084"},{index=4;match="\099\099\099\099"}}};{input="\098\097\078\079\084\099\099\099\100",matches={{index=0,match="\098\097\078\079\084\099\099\099"},{index=1,match="\098"};{index=2,match="\097"};{index=3;match="\078\079\084"},{index=4;match="\099\099\099"}}};{input="\098\097\078\079\084\099\099\100",matches={{index=0;match="\098\097\078\079\084\099\099"},{index=1,match="\098"},{index=2,match="\097"},{index=3,match="\078\079"},{index=4,match="\084\099\099"}}};{input="\098\097\099\099\099\100";matches={{index=0;match="\098\097\099\099\099"},{index=1,match="\098"},{index=2,match="\097"},{index=3;match=""};{index=4;match="\099\099\099"}}};{input="\042\042\042 \070\097\105\108\101\114\115";matches={{index=0,match="\042\042\042 \070\097\105\108\101\114\115"};{index=1,match="\042"};{index=2,match="\042"},{index=3;match="\042 \070\097\105\108"};{index=4,match="\101\114\115"}}};{input="\097\110\121\116\104\105\110\103"};{input="\098\092\098\099"},{input="\098\097\099\099\100"}}};{source="\091\094\097\093";tests={{input="\065\098\099";matches={{index=0;match="\065"}}}}},{source="\091\094\097\093\043";tests={{input="\065\065\065\097\065\098\099";matches={{index=0;match="\065\065\065"}}}}},{source="\091\094\097\093\043";tests={{input="\098\098\098\n\099\099\099",matches={{index=0;match="\098\098\098\n\099\099\099"}}}}},{source="\091\094\107\093\036",tests={{input="\097\098\099";matches={{index=0,match="\099"}}},{input="\042\042\042 \070\097\105\108\101\114\115";matches={{index=0,match="\115"}}};{input="\097\098\107"}}},{source="\091\094\107\093\123\050\044\051\125\036",tests={{input="\097\098\099",matches={{index=0,match="\097\098\099"}}};{input="\107\098\099";matches={{index=0;match="\098\099"}}},{input="\107\097\098\099",matches={{index=0,match="\097\098\099"}}},{input="\042\042\042 \070\097\105\108\101\114\115";matches={{index=0,match="\101\114\115"}}},{input="\097\098\107"},{input="\097\107\098"};{input="\097\107\107"}}};{source="\094\092\100\123\056\044\125\092\064\046\043\091\094\107\093\036";tests={{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\049\050\051\052\053\054\055\056\092\064\120\046\121\046\117\107"},{input="\049\050\051\052\053\054\055\092\064\097\046\098\046\099\046\100"}}},{source="\040\097\041\092\049\123\056\044\125",tests={{input="\097\097\097\097\097\097\097\097\097",matches={{index=0,match="\097\097\097\097\097\097\097\097\097"},{index=1,match="\097"}}},{input="\097\097\097\097\097\097\097\097\097\097",matches={{index=0;match="\097\097\097\097\097\097\097\097\097\097"};{index=1;match="\097"}}},{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\097\097\097\097\097\097\097"}}},{source="\091\094\097\093";tests={{input="\097\097\097\097\098\099\100";matches={{index=0;match="\098"}}};{input="\097\097\065\097\098\099\100",matches={{index=0,match="\065"}}}}},{source="\091\094\097\093";flags="\105",tests={{input="\097\097\097\097\098\099\100",matches={{index=0;match="\098"}}}}},{source="\091\094\097\122\093";tests={{input="\097\097\097\097\098\099\100";matches={{index=0;match="\098"}}};{input="\097\097\065\097\098\099\100";matches={{index=0,match="\065"}}}}};{source="\091\094\097\122\093",flags="\105";tests={{input="\097\097\097\097\098\099\100",matches={{index=0;match="\098"}}}}},{source="\080\091\094\042\093\084\065\073\082\069\091\094\042\093\123\049\044\054\125\063\076\076";tests={{input="\120\120\120\120\120\120\120\120\120\120\120\080\083\084\065\073\082\069\073\083\076\076\120\120\120\120\120\120\120\120\120",matches={{index=0,match="\080\083\084\065\073\082\069\073\083\076\076"}}}}},{source="\080\091\094\042\093\084\065\073\082\069\091\094\042\093\123\049\044\125\063\076\076",tests={{input="\120\120\120\120\120\120\120\120\120\120\120\080\083\084\065\073\082\069\073\083\076\076\120\120\120\120\120\120\120\120\120",matches={{index=0;match="\080\083\084\065\073\082\069\073\083\076\076"}}}}};{source="\040\092\046\092\100\092\100\091\049-\057\093\063\041\092\100\043";tests={{input="\049\046\050\051\048\048\048\051\057\051\056",matches={{index=0;match="\046\050\051\048\048\048\051\057\051\056"},{index=1,match="\046\050\051"}}},{input="\049\046\056\055\053\048\048\048\050\056\050",matches={{index=0;match="\046\056\055\053\048\048\048\050\056\050"},{index=1,match="\046\056\055\053"}}},{input="\049\046\050\051\053",matches={{index=0;match="\046\050\051\053"};{index=1,match="\046\050\051"}}}}},{source="\040\092\046\092\100\092\100\040\040\063\061\048\041\124\092\100\040\063\061\092\100\041\041\041",tests={{input="\049\046\050\051\048\048\048\051\057\051\056";matches={{index=0;match="\046\050\051"};{index=1;match="\046\050\051"};{index=2;match=""}}};{input="\049\046\056\055\053\048\048\048\050\056\050";matches={{index=0,match="\046\056\055\053"};{index=1;match="\046\056\055\053"};{index=2,match="\053"}}};{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\049\046\050\051\053"}}},{source="\102\111\111\040\046\042\041\098\097\114",tests={{input="\084\104\101 \102\111\111\100 \105\115 \117\110\100\101\114 \116\104\101 \098\097\114 \105\110 \116\104\101 \098\097\114\110\046";matches={{index=0,match="\102\111\111\100 \105\115 \117\110\100\101\114 \116\104\101 \098\097\114 \105\110 \116\104\101 \098\097\114"}}}}};{source="\102\111\111\040\046\042\063\041\098\097\114",tests={{input="\084\104\101 \102\111\111\100 \105\115 \117\110\100\101\114 \116\104\101 \098\097\114 \105\110 \116\104\101 \098\097\114\110\046",matches={{index=0;match="\102\111\111\100 \105\115 \117\110\100\101\114 \116\104\101 \098\097\114"}}}}},{source="\040\046\042\041\040\092\100\042\041",tests={{input="\073 \104\097\118\101 \050 \110\117\109\098\101\114\115\058 \053\051\049\052\055";matches={{index=0;match="\073 \104\097\118\101 \050 \110\117\109\098\101\114\115\058 \053\051\049\052\055"};{index=1,match="\073 \104\097\118\101 \050 \110\117\109\098\101\114\115\058 \053\051\049\052\055"},{index=2;match=""}}}}},{source="\040\046\042\041\040\092\100\043\041",tests={{input="\073 \104\097\118\101 \050 \110\117\109\098\101\114\115\058 \053\051\049\052\055";matches={{index=0,match="\073 \104\097\118\101 \050 \110\117\109\098\101\114\115\058 \053\051\049\052\055"};{index=1,match="\073 \104\097\118\101 \050 \110\117\109\098\101\114\115\058 \053\051\049\052"};{index=2,match="\055"}}}}};{source="\040\046\042\063\041\040\092\100\042\041",tests={{input="\073 \104\097\118\101 \050 \110\117\109\098\101\114\115\058 \053\051\049\052\055";matches={{index=0,match=""};{index=1,match=""},{index=2;match=""}}}}};{source="\040\046\042\063\041\040\092\100\043\041";tests={{input="\073 \104\097\118\101 \050 \110\117\109\098\101\114\115\058 \053\051\049\052\055";matches={{index=0,match="\073 \104\097\118\101 \050"},{index=2;match="\050"}}}}},{source="\040\046\042\041\040\092\100\043\041\036",tests={{input="\073 \104\097\118\101 \050 \110\117\109\098\101\114\115\058 \053\051\049\052\055";matches={{index=0,match="\073 \104\097\118\101 \050 \110\117\109\098\101\114\115\058 \053\051\049\052\055"};{index=1,match="\073 \104\097\118\101 \050 \110\117\109\098\101\114\115\058 \053\051\049\052"},{index=2,match="\055"}}}}},{source="\040\046\042\063\041\040\092\100\043\041\036",tests={{input="\073 \104\097\118\101 \050 \110\117\109\098\101\114\115\058 \053\051\049\052\055",matches={{index=0;match="\073 \104\097\118\101 \050 \110\117\109\098\101\114\115\058 \053\051\049\052\055"},{index=2,match="\053\051\049\052\055"}}}}};{source="\040\046\042\092\068\041\040\092\100\043\041\036",tests={{input="\073 \104\097\118\101 \050 \110\117\109\098\101\114\115\058 \053\051\049\052\055",matches={{index=0,match="\073 \104\097\118\101 \050 \110\117\109\098\101\114\115\058 \053\051\049\052\055"},{index=2,match="\053\051\049\052\055"}}}}};{source="\094\092\068\042\040\063\033\049\050\051\041";tests={{input="\065\066\067\049\050\051";matches={{index=0,match="\065\066"}}}}},{source="\094\040\092\068\042\041\040\063\061\092\100\041\040\063\033\049\050\051\041",tests={{input="\065\066\067\052\052\053";matches={{index=0;match="\065\066\067"};{index=1,match="\065\066\067"}}};{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\065\066\067\049\050\051"}}},{source="\094\091\087-\093\052\054\093",tests={{input="\087\052\054\093\055\056\057";matches={{index=0;match="\087\052\054\093"}}},{input="-\052\054\093\055\056\057",matches={{index=0;match="-\052\054\093"}}},{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\087\097\108\108"};{input="\090\101\098\114\097"};{input="\052\050"},{input="\091\097\098\099\100\093"};{input="\093\097\098\099\100\091"}}},{source="\094\091\087-\092\093\052\054\093",tests={{input="\087\052\054\093\055\056\057",matches={{index=0,match="\087"}}};{input="\087\097\108\108",matches={{index=0,match="\087"}}};{input="\090\101\098\114\097",matches={{index=0,match="\090"}}},{input="\088\121\108\111\112\104\111\110\101",matches={{index=0,match="\088"}}};{input="\052\050";matches={{index=0,match="\052"}}},{input="\091\097\098\099\100\093";matches={{index=0;match="\091"}}},{input="\093\097\098\099\100\091";matches={{index=0;match="\093"}}};{input="\092\098\097\099\107\115\108\097\115\104";matches={{index=0,match="\092"}}},{input="\042\042\042 \070\097\105\108\101\114\115"},{input="-\052\054\093\055\056\057"},{input="\119\101\108\108"}}};{source="\092\100\092\100\092\047\092\100\092\100\092\047\092\100\092\100\092\100\092\100",tests={{input="\048\049\047\048\049\047\050\048\048\048",matches={{index=0,match="\048\049\047\048\049\047\050\048\048\048"}}}}},{source="\119\111\114\100 \040\063\058\091\097-\122\065-\090\048-\057\093\043 \041\123\048\044\049\048\125\111\116\104\101\114\119\111\114\100",tests={{input="\119\111\114\100 \099\097\116 \100\111\103 \101\108\101\112\104\097\110\116 \109\117\115\115\101\108 \099\111\119 \104\111\114\115\101 \099\097\110\097\114\121 \098\097\098\111\111\110 \115\110\097\107\101 \115\104\097\114\107 \111\116\104\101\114\119\111\114\100";matches={{index=0,match="\119\111\114\100 \099\097\116 \100\111\103 \101\108\101\112\104\097\110\116 \109\117\115\115\101\108 \099\111\119 \104\111\114\115\101 \099\097\110\097\114\121 \098\097\098\111\111\110 \115\110\097\107\101 \115\104\097\114\107 \111\116\104\101\114\119\111\114\100"}}},{input="\119\111\114\100 \099\097\116 \100\111\103 \101\108\101\112\104\097\110\116 \109\117\115\115\101\108 \099\111\119 \104\111\114\115\101 \099\097\110\097\114\121 \098\097\098\111\111\110 \115\110\097\107\101 \115\104\097\114\107"}}},{source="\119\111\114\100 \040\063\058\091\097-\122\065-\090\048-\057\093\043 \041\123\048\044\051\048\048\125\111\116\104\101\114\119\111\114\100",tests={{input="\119\111\114\100 \099\097\116 \100\111\103 \101\108\101\112\104\097\110\116 \109\117\115\115\101\108 \099\111\119 \104\111\114\115\101 \099\097\110\097\114\121 \098\097\098\111\111\110 \115\110\097\107\101 \115\104\097\114\107 \116\104\101 \113\117\105\099\107 \098\114\111\119\110 \102\111\120 \097\110\100 \116\104\101 \108\097\122\121 \100\111\103 \097\110\100 \115\101\118\101\114\097\108 \111\116\104\101\114 \119\111\114\100\115 \103\101\116\116\105\110\103 \099\108\111\115\101 \116\111 \116\104\105\114\116\121 \098\121 \110\111\119 \073 \104\111\112\101"}}};{source="\094\040\097\041\123\048\044\049\125";tests={{input="\098\099\100";matches={{index=0;match=""}}},{input="\097\098\099",matches={{index=0;match="\097"},{index=1;match="\097"}}},{input="\097\097\098";matches={{index=0;match="\097"},{index=1;match="\097"}}}}},{source="\094\040\097\041\123\048\044\050\125",tests={{input="\098\099\100",matches={{index=0,match=""}}};{input="\097\098\099",matches={{index=0;match="\097"},{index=1;match="\097"}}};{input="\097\097\098";matches={{index=0;match="\097\097"},{index=1;match="\097"}}}}};{source="\094\040\097\041\123\048\044\051\125";tests={{input="\098\099\100",matches={{index=0;match=""}}},{input="\097\098\099";matches={{index=0,match="\097"},{index=1;match="\097"}}},{input="\097\097\098";matches={{index=0,match="\097\097"},{index=1;match="\097"}}};{input="\097\097\097",matches={{index=0,match="\097\097\097"},{index=1;match="\097"}}}}};{source="\094\040\097\041\123\048\044\125";tests={{input="\098\099\100",matches={{index=0;match=""}}};{input="\097\098\099",matches={{index=0;match="\097"},{index=1;match="\097"}}};{input="\097\097\098",matches={{index=0;match="\097\097"},{index=1;match="\097"}}};{input="\097\097\097";matches={{index=0,match="\097\097\097"};{index=1;match="\097"}}},{input="\097\097\097\097\097\097\097\097",matches={{index=0;match="\097\097\097\097\097\097\097\097"};{index=1,match="\097"}}}}};{source="\094\040\097\041\123\049\044\049\125";tests={{input="\098\099\100"},{input="\097\098\099";matches={{index=0,match="\097"},{index=1;match="\097"}}};{input="\097\097\098";matches={{index=0;match="\097"},{index=1;match="\097"}}}}},{source="\094\040\097\041\123\049\044\050\125";tests={{input="\098\099\100"};{input="\097\098\099",matches={{index=0;match="\097"},{index=1,match="\097"}}},{input="\097\097\098";matches={{index=0,match="\097\097"},{index=1,match="\097"}}}}};{source="\094\040\097\041\123\049\044\051\125",tests={{input="\098\099\100"};{input="\097\098\099",matches={{index=0,match="\097"},{index=1;match="\097"}}},{input="\097\097\098",matches={{index=0,match="\097\097"},{index=1,match="\097"}}};{input="\097\097\097",matches={{index=0;match="\097\097\097"},{index=1,match="\097"}}}}},{source="\094\040\097\041\123\049\044\125",tests={{input="\098\099\100"},{input="\097\098\099",matches={{index=0;match="\097"},{index=1,match="\097"}}};{input="\097\097\098",matches={{index=0,match="\097\097"};{index=1,match="\097"}}},{input="\097\097\097",matches={{index=0,match="\097\097\097"};{index=1,match="\097"}}},{input="\097\097\097\097\097\097\097\097",matches={{index=0;match="\097\097\097\097\097\097\097\097"};{index=1;match="\097"}}}}};{source="\046\042\092\046\103\105\102";tests={{input="\098\111\114\102\108\101\n\098\105\098\046\103\105\102\n\110\111";matches={{index=0;match="\098\105\098\046\103\105\102"}}}}},{source="\046\123\048\044\125\092\046\103\105\102";tests={{input="\098\111\114\102\108\101\n\098\105\098\046\103\105\102\n\110\111";matches={{index=0,match="\098\105\098\046\103\105\102"}}}}},{source="\046\042\092\046\103\105\102",flags="\109";tests={{input="\098\111\114\102\108\101\n\098\105\098\046\103\105\102\n\110\111",matches={{index=0;match="\098\105\098\046\103\105\102"}}}}},{source="\046\042\036";tests={{input="\098\111\114\102\108\101\n\098\105\098\046\103\105\102\n\110\111",matches={{index=0;match="\110\111"}}}}};{source="\040\046\042\088\124\094\066\041",tests={{input="\097\098\099\100\101\n\049\050\051\052\088\121\122",matches={{index=0;match="\049\050\051\052\088"};{index=1,match="\049\050\051\052\088"}}},{input="\066\097\114\070\111\111";matches={{index=0,match="\066"};{index=1;match="\066"}}},{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\097\098\099\100\101\n\066\097\114"}}},{source="\040\046\042\088\124\094\066\041",flags="\109";tests={{input="\097\098\099\100\101\n\049\050\051\052\088\121\122";matches={{index=0,match="\049\050\051\052\088"};{index=1,match="\049\050\051\052\088"}}};{input="\066\097\114\070\111\111",matches={{index=0;match="\066"},{index=1,match="\066"}}};{input="\097\098\099\100\101\n\066\097\114";matches={{index=0;match="\066"};{index=1;match="\066"}}}}},{source="\040\046\042\088\124\094\066\041",flags="\115",tests={{input="\066\097\114\070\111\111";matches={{index=0,match="\066"};{index=1,match="\066"}}},{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\097\098\099\100\101\n\066\097\114"}}},{source="\040\046\042\088\124\094\066\041",flags="\109\115";tests={{input="\066\097\114\070\111\111";matches={{index=0,match="\066"};{index=1;match="\066"}}};{input="\097\098\099\100\101\n\066\097\114",matches={{index=0;match="\066"},{index=1;match="\066"}}}}},{source="\094\046\042\066",tests={{input="\042\042\042\042 \070\097\105\108\101\114\115"},{input="\097\098\099\n\066"}}},{source="\094\091\048-\057\093\091\048-\057\093\091\048-\057\093\091\048-\057\093\091\048-\057\093\091\048-\057\093\091\048-\057\093\091\048-\057\093\091\048-\057\093\091\048-\057\093\091\048-\057\093\091\048-\057\093",tests={{input="\049\050\051\052\053\054\054\053\052\051\050\049",matches={{index=0;match="\049\050\051\052\053\054\054\053\052\051\050\049"}}}}},{source="\094\092\100\092\100\092\100\092\100\092\100\092\100\092\100\092\100\092\100\092\100\092\100\092\100";tests={{input="\049\050\051\052\053\054\054\053\052\051\050\049";matches={{index=0;match="\049\050\051\052\053\054\054\053\052\051\050\049"}}}}};{source="\094\091\092\100\093\091\092\100\093\091\092\100\093\091\092\100\093\091\092\100\093\091\092\100\093\091\092\100\093\091\092\100\093\091\092\100\093\091\092\100\093\091\092\100\093\091\092\100\093";tests={{input="\049\050\051\052\053\054\054\053\052\051\050\049",matches={{index=0;match="\049\050\051\052\053\054\054\053\052\051\050\049"}}}}};{source="\094\091\097\098\099\093\123\049\050\125",tests={{input="\097\098\099\097\098\099\097\098\099\097\098\099",matches={{index=0,match="\097\098\099\097\098\099\097\098\099\097\098\099"}}}}},{source="\094\091\097-\099\093\123\049\050\125";tests={{input="\097\098\099\097\098\099\097\098\099\097\098\099",matches={{index=0;match="\097\098\099\097\098\099\097\098\099\097\098\099"}}}}};{source="\094\040\097\124\098\124\099\041\123\049\050\125";tests={{input="\097\098\099\097\098\099\097\098\099\097\098\099",matches={{index=0,match="\097\098\099\097\098\099\097\098\099\097\098\099"};{index=1,match="\099"}}}}},{source="\094\091\097\098\099\100\101\102\103\104\105\106\107\108\109\110\111\112\113\114\115\116\117\118\119\120\121\048\049\050\051\052\053\054\055\056\057\093",tests={{input="\110";matches={{index=0,match="\110"}}},{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\122"}}};{source="\097\098\099\100\101\123\048\044\048\125",tests={{input="\097\098\099\100";matches={{index=0,match="\097\098\099\100"}}};{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\097\098\099\101"}}},{source="\097\098\091\099\100\093\123\048\044\048\125\101",tests={{input="\097\098\101";matches={{index=0,match="\097\098\101"}}};{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\097\098\099\100\101"}}};{source="\097\098\040\099\041\123\048\044\048\125\100",tests={{input="\042\042\042 \070\097\105\108\101\114\115"}}},{source="\097\040\098\042\041",tests={{input="\097",matches={{index=0,match="\097"};{index=1,match=""}}},{input="\097\098",matches={{index=0;match="\097\098"};{index=1,match="\098"}}};{input="\097\098\098\098\098";matches={{index=0,match="\097\098\098\098\098"};{index=1;match="\098\098\098\098"}}},{input="\042\042\042 \070\097\105\108\101\114\115",matches={{index=0;match="\097"},{index=1;match=""}}};{input="\098\098\098\098\098"}}};{source="\097\098\092\100\123\048\125\101";tests={{input="\097\098\101";matches={{index=0;match="\097\098\101"}}},{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\097\098\049\101"}}};{source="\097\091\094\097\093\098",tests={{input="\097\099\098",matches={{index=0,match="\097\099\098"}}};{input="\097\n\098";matches={{index=0;match="\097\n\098"}}}}},{source="\097\046\098",tests={{input="\097\099\098";matches={{index=0,match="\097\099\098"}}},{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\097\n\098"}}};{source="\097\091\094\097\093\098";flags="\115",tests={{input="\097\099\098",matches={{index=0;match="\097\099\098"}}};{input="\097\n\098";matches={{index=0,match="\097\n\098"}}}}},{source="\097\046\098";flags="\115",tests={{input="\097\099\098";matches={{index=0;match="\097\099\098"}}}}},{source="\094\040\098\043\063\124\097\041\123\049\044\050\125\063\099";tests={{input="\098\097\099",matches={{index=0;match="\098\097\099"},{index=1,match="\097"}}};{input="\098\098\097\099",matches={{index=0,match="\098\098\097\099"};{index=1;match="\097"}}};{input="\098\098\098\097\099",matches={{index=0;match="\098\098\098\097\099"},{index=1;match="\097"}}};{input="\098\098\098\098\097\099";matches={{index=0,match="\098\098\098\098\097\099"};{index=1,match="\097"}}};{input="\098\098\098\098\098\097\099",matches={{index=0;match="\098\098\098\098\098\097\099"},{index=1,match="\097"}}}}},{source="\094\040\098\043\124\097\041\123\049\044\050\125\063\099";tests={{input="\098\097\099";matches={{index=0,match="\098\097\099"},{index=1;match="\097"}}};{input="\098\098\097\099",matches={{index=0;match="\098\098\097\099"},{index=1;match="\097"}}};{input="\098\098\098\097\099",matches={{index=0,match="\098\098\098\097\099"};{index=1,match="\097"}}},{input="\098\098\098\098\097\099";matches={{index=0,match="\098\098\098\098\097\099"};{index=1;match="\097"}}};{input="\098\098\098\098\098\097\099";matches={{index=0,match="\098\098\098\098\098\097\099"},{index=1,match="\097"}}}}},{source="\040\063\033\092\065\041\120";flags="\109";tests={{input="\097\092\098\120\n",matches={{index=0,match="\120"}}}}},{source="\092\120\048\123\097\098\125";tests={{input="\000\123\097\098\125";matches={{index=0;match="\000\123\097\098\125"}}}}};{source="\040\065\124\066\041\042\063\067\068";tests={{input="\067\068",matches={{index=0;match="\067\068"}}}}},{source="\040\065\124\066\041\042\067\068",tests={{input="\067\068";matches={{index=0,match="\067\068"}}}}};{source="\040\065\066\041\042\092\049";tests={{input="\065\066\065\066\065\066",matches={{index=0,match="\065\066\065\066\065\066"};{index=1,match="\065\066"}}}}},{source="\040\063\060\033\098\097\114\041\102\111\111";tests={{input="\102\111\111";matches={{index=0,match="\102\111\111"}}};{input="\099\097\116\102\111\111\100",matches={{index=0;match="\102\111\111"}}};{input="\097\114\102\111\111\116\108\101";matches={{index=0,match="\102\111\111"}}},{input="\114\102\111\111\115\104",matches={{index=0;match="\102\111\111"}}};{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\098\097\114\102\111\111"};{input="\116\111\119\098\097\114\102\111\111"}}};{source="\092\119\123\051\125\040\063\060\033\098\097\114\041\102\111\111";tests={{input="\099\097\116\102\111\111\100";matches={{index=0,match="\099\097\116\102\111\111"}}};{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\102\111\111"},{input="\098\097\114\102\111\111"},{input="\116\111\119\098\097\114\102\111\111"}}};{source="\092\065\097\098\099\092\122";flags="\109";tests={{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\097\098\099\n"},{input="\113\113\113\n\097\098\099"},{input="\097\098\099\n\122\122\122"};{input="\113\113\113\n\097\098\099\n\122\122\122"}}};{source="\040\063\062\040\092\046\092\100\092\100\091\049-\057\093\063\041\041\092\100\043",tests={{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\049\046\050\051\053"}}};{source="\094\040\040\063\062\092\119\043\041\124\040\063\062\092\115\043\041\041\042\036";tests={{input="\110\111\119 \105\115 \116\104\101 \116\105\109\101 \102\111\114 \097\108\108 \103\111\111\100 \109\101\110 \116\111 \099\111\109\101 \116\111 \116\104\101 \097\105\100 \111\102 \116\104\101 \112\097\114\116\121",matches={{index=0,match="\110\111\119 \105\115 \116\104\101 \116\105\109\101 \102\111\114 \097\108\108 \103\111\111\100 \109\101\110 \116\111 \099\111\109\101 \116\111 \116\104\101 \097\105\100 \111\102 \116\104\101 \112\097\114\116\121"},{index=1;match="\112\097\114\116\121"}}};{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\116\104\105\115 \105\115 \110\111\116 \097 \108\105\110\101 \119\105\116\104 \111\110\108\121 \119\111\114\100\115 \097\110\100 \115\112\097\099\101\115\033"}}},{source="\040\092\100\043\041\040\092\119\041",tests={{input="\049\050\051\052\053\097",matches={{index=0;match="\049\050\051\052\053\097"};{index=1,match="\049\050\051\052\053"},{index=2,match="\097"}}},{input="\049\050\051\052\053\043";matches={{index=0,match="\049\050\051\052\053"};{index=1;match="\049\050\051\052"},{index=2,match="\053"}}}}},{source="\040\040\063\062\092\100\043\041\041\040\092\119\041";tests={{input="\049\050\051\052\053\097";matches={{index=0;match="\049\050\051\052\053\097"};{index=1;match="\049\050\051\052\053"};{index=2,match="\097"}}},{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\049\050\051\052\053\043"}}},{source="\040\063\062\097\043\041\098",tests={{input="\097\097\097\098",matches={{index=0;match="\097\097\097\098"}}}}},{source="\040\040\063\062\097\043\041\098\041",tests={{input="\097\097\097\098",matches={{index=0,match="\097\097\097\098"};{index=1;match="\097\097\097\098"}}}}},{source="\040\040\063\062\091\094\040\041\093\043\041\124\092\040\091\094\040\041\093\042\092\041\041\043",tests={{input="\040\040\097\098\099\040\097\100\101\041\117\102\104\040\041\040\041\120";matches={{index=0,match="\097\098\099\040\097\100\101\041\117\102\104\040\041\040\041\120"};{index=1,match="\120"}}}}};{source="\092\040\040\040\063\062\091\094\040\041\093\043\041\124\092\040\091\094\040\041\093\043\092\041\041\043\092\041",tests={{input="\040\097\098\099\041",matches={{index=0;match="\040\097\098\099\041"},{index=1;match="\097\098\099"}}};{input="\040\097\098\099\040\100\101\102\041\120\121\122\041";matches={{index=0;match="\040\097\098\099\040\100\101\102\041\120\121\122\041"},{index=1;match="\120\121\122"}}};{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\040\040\040\041\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097"}}};{source="\040\063\062\097\042\041\042";tests={{input="\097",matches={{index=0;match="\097"}}},{input="\097\097",matches={{index=0;match="\097\097"}}};{input="\097\097\097\097";matches={{index=0;match="\097\097\097\097"}}}}},{source="\084\104\101 \102\111\108\108\111\119\105\110\103 \116\101\115\116\115 \097\114\101 \116\097\107\101\110 \102\114\111\109 \116\104\101 \080\101\114\108 \053\046\048\048\053 \116\101\115\116 \115\117\105\116\101\059 \115\111\109\101 \111\102 \116\104\101\109";tests={{input="\047\097\114\101 \099\111\109\112\097\116\105\098\108\101 \119\105\116\104 \053\046\048\048\052\044 \098\117\116 \073\'\100 \114\097\116\104\101\114 \110\111\116 \104\097\118\101 \116\111 \115\111\114\116 \116\104\101\109 \111\117\116\046\047"}}},{source="\097\098\099";tests={{input="\097\098\099",matches={{index=0;match="\097\098\099"}}},{input="\120\097\098\099\121";matches={{index=0;match="\097\098\099"}}};{input="\097\098\097\098\099";matches={{index=0;match="\097\098\099"}}},{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\120\098\099"},{input="\097\120\099"};{input="\097\098\120"}}};{source="\097\098\042\099";tests={{input="\097\098\099",matches={{index=0,match="\097\098\099"}}}}};{source="\097\098\042\098\099",tests={{input="\097\098\099";matches={{index=0,match="\097\098\099"}}},{input="\097\098\098\099";matches={{index=0;match="\097\098\098\099"}}},{input="\097\098\098\098\098\099",matches={{index=0;match="\097\098\098\098\098\099"}}}}},{source="\046\123\049\125";tests={{input="\097\098\098\098\098\099",matches={{index=0,match="\097"}}}}};{source="\046\123\051\044\052\125";tests={{input="\097\098\098\098\098\099";matches={{index=0;match="\097\098\098\098"}}}}},{source="\097\098\123\048\044\125\098\099";tests={{input="\097\098\098\098\098\099",matches={{index=0;match="\097\098\098\098\098\099"}}}}};{source="\097\098\043\098\099",tests={{input="\097\098\098\099";matches={{index=0;match="\097\098\098\099"}}},{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\097\098\099"},{input="\097\098\113"}}};{source="\097\098\043\098\099",tests={{input="\097\098\098\098\098\099",matches={{index=0,match="\097\098\098\098\098\099"}}}}},{source="\097\098\123\049\044\125\098\099";tests={{input="\097\098\098\098\098\099";matches={{index=0;match="\097\098\098\098\098\099"}}}}};{source="\097\098\123\049\044\051\125\098\099",tests={{input="\097\098\098\098\098\099";matches={{index=0,match="\097\098\098\098\098\099"}}}}},{source="\097\098\123\051\044\052\125\098\099",tests={{input="\097\098\098\098\098\099",matches={{index=0;match="\097\098\098\098\098\099"}}}}},{source="\097\098\123\052\044\053\125\098\099";tests={{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\097\098\113"},{input="\097\098\098\098\098\099"}}},{source="\097\098\063\098\099";tests={{input="\097\098\098\099";matches={{index=0;match="\097\098\098\099"}}},{input="\097\098\099",matches={{index=0,match="\097\098\099"}}}}},{source="\097\098\123\048\044\049\125\098\099",tests={{input="\097\098\099";matches={{index=0,match="\097\098\099"}}}}},{source="\097\098\063\099";tests={{input="\097\098\099",matches={{index=0;match="\097\098\099"}}}}};{source="\097\098\123\048\044\049\125\099";tests={{input="\097\098\099";matches={{index=0,match="\097\098\099"}}}}},{source="\094\097\098\099\036";tests={{input="\097\098\099";matches={{index=0;match="\097\098\099"}}};{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\097\098\098\098\098\099"},{input="\097\098\099\099"}}};{source="\094\097\098\099";tests={{input="\097\098\099\099",matches={{index=0;match="\097\098\099"}}}}},{source="\097\098\099\036";tests={{input="\097\097\098\099";matches={{index=0;match="\097\098\099"}}};{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\097\097\098\099";matches={{index=0;match="\097\098\099"}}};{input="\097\097\098\099\100"}}};{source="\094";tests={{input="\097\098\099";matches={{index=0;match=""}}}}},{source="\036";tests={{input="\097\098\099",matches={{index=0,match=""}}}}},{source="\097\046\099";tests={{input="\097\098\099";matches={{index=0;match="\097\098\099"}}};{input="\097\120\099";matches={{index=0;match="\097\120\099"}}}}};{source="\097\046\042\099";tests={{input="\097\120\121\122\099",matches={{index=0,match="\097\120\121\122\099"}}}}},{source="\097\091\098\099\093\100",tests={{input="\097\098\100";matches={{index=0,match="\097\098\100"}}};{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\097\120\121\122\100"},{input="\097\098\099"}}},{source="\097\091\098-\100\093\101",tests={{input="\097\099\101",matches={{index=0;match="\097\099\101"}}}}};{source="\097\091\098-\100\093";tests={{input="\097\097\099";matches={{index=0;match="\097\099"}}}}};{source="\097\091-\098\093";tests={{input="\097-",matches={{index=0;match="\097-"}}}}},{source="\097\091\098-\093",tests={{input="\097-",matches={{index=0,match="\097-"}}}}},{source="\097\093",tests={{input="\097\093";matches={{index=0,match="\097\093"}}}}},{source="\097\091\093\093\098",tests={{input="\097\093\098";matches={{index=0;match="\097\093\098"}}}}},{source="\097\091\094\098\099\093\100";tests={{input="\097\101\100",matches={{index=0,match="\097\101\100"}}};{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\097\098\100"}}};{source="\097\091\094-\098\093\099",tests={{input="\097\100\099",matches={{index=0,match="\097\100\099"}}}}};{source="\097\091\094\093\098\093\099",tests={{input="\097\100\099",matches={{index=0;match="\097\100\099"}}},{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\097-\099",matches={{index=0,match="\097-\099"}}},{input="\097\093\099"}}},{source="\092\119";tests={{input="\097",matches={{index=0,match="\097"}}}}},{source="\092\087";tests={{input="-",matches={{index=0,match="-"}}};{input="\042\042\042 \070\097\105\108\101\114\115",matches={{index=0;match="\042"}}};{input="-";matches={{index=0;match="-"}}};{input="\097"}}};{source="\097\092\115\098",tests={{input="\097 \098",matches={{index=0;match="\097 \098"}}}}},{source="\097\092\083\098";tests={{input="\097-\098",matches={{index=0,match="\097-\098"}}};{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\097-\098";matches={{index=0;match="\097-\098"}}},{input="\097 \098"}}};{source="\092\100",tests={{input="\049",matches={{index=0;match="\049"}}}}},{source="\092\068",tests={{input="-";matches={{index=0,match="-"}}};{input="\042\042\042 \070\097\105\108\101\114\115",matches={{index=0,match="\042"}}},{input="-",matches={{index=0,match="-"}}},{input="\049"}}};{source="\091\092\119\093";tests={{input="\097",matches={{index=0,match="\097"}}}}};{source="\091\092\087\093",tests={{input="-";matches={{index=0;match="-"}}};{input="\042\042\042 \070\097\105\108\101\114\115",matches={{index=0;match="\042"}}},{input="-",matches={{index=0;match="-"}}},{input="\097"}}};{source="\097\091\092\115\093\098",tests={{input="\097 \098",matches={{index=0;match="\097 \098"}}}}},{source="\097\091\092\083\093\098";tests={{input="\097-\098";matches={{index=0,match="\097-\098"}}};{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\097-\098",matches={{index=0;match="\097-\098"}}},{input="\097 \098"}}},{source="\091\092\100\093",tests={{input="\049";matches={{index=0;match="\049"}}}}},{source="\091\092\068\093";tests={{input="-";matches={{index=0,match="-"}}};{input="\042\042\042 \070\097\105\108\101\114\115";matches={{index=0,match="\042"}}},{input="-",matches={{index=0,match="-"}}};{input="\049"}}};{source="\097\098\124\099\100";tests={{input="\097\098\099";matches={{index=0;match="\097\098"}}},{input="\097\098\099\100",matches={{index=0,match="\097\098"}}}}},{source="\040\041\101\102";tests={{input="\100\101\102",matches={{index=0,match="\101\102"},{index=1,match=""}}}}},{source="\097\092\040\098",tests={{input="\097\040\098";matches={{index=0;match="\097\040\098"}}}}};{source="\097\092\040\042\098",tests={{input="\097\098";matches={{index=0,match="\097\098"}}};{input="\097\040\040\098",matches={{index=0,match="\097\040\040\098"}}}}};{source="\097\092\092\098";tests={{input="\097\092\098",matches={{index=0,match="\097\092\098"}}}}};{source="\040\040\097\041\041",tests={{input="\097\098\099";matches={{index=0;match="\097"},{index=1;match="\097"},{index=2;match="\097"}}}}};{source="\040\097\041\098\040\099\041",tests={{input="\097\098\099";matches={{index=0,match="\097\098\099"},{index=1;match="\097"},{index=2;match="\099"}}}}},{source="\097\043\098\043\099",tests={{input="\097\097\098\098\097\098\099";matches={{index=0,match="\097\098\099"}}}}},{source="\097\123\049\044\125\098\123\049\044\125\099";tests={{input="\097\097\098\098\097\098\099";matches={{index=0;match="\097\098\099"}}}}};{source="\097\046\043\063\099";tests={{input="\097\098\099\097\098\099",matches={{index=0,match="\097\098\099"}}}}};{source="\040\097\043\124\098\041\042",tests={{input="\097\098",matches={{index=0;match="\097\098"},{index=1,match="\098"}}}}};{source="\040\097\043\124\098\041\123\048\044\125",tests={{input="\097\098";matches={{index=0;match="\097\098"},{index=1,match="\098"}}}}};{source="\040\097\043\124\098\041\043",tests={{input="\097\098",matches={{index=0;match="\097\098"},{index=1,match="\098"}}}}},{source="\040\097\043\124\098\041\123\049\044\125",tests={{input="\097\098";matches={{index=0;match="\097\098"};{index=1,match="\098"}}}}},{source="\040\097\043\124\098\041\063";tests={{input="\097\098",matches={{index=0,match="\097"},{index=1;match="\097"}}}}},{source="\040\097\043\124\098\041\123\048\044\049\125",tests={{input="\097\098",matches={{index=0,match="\097"};{index=1,match="\097"}}}}},{source="\091\094\097\098\093\042",tests={{input="\099\100\101";matches={{index=0;match="\099\100\101"}}}}},{source="\097\098\099";tests={{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\098"}}};{source="\040\091\097\098\099\093\041\042\100";tests={{input="\097\098\098\098\099\100";matches={{index=0,match="\097\098\098\098\099\100"};{index=1,match="\099"}}}}},{source="\040\091\097\098\099\093\041\042\098\099\100";tests={{input="\097\098\099\100",matches={{index=0;match="\097\098\099\100"},{index=1,match="\097"}}}}};{source="\097\124\098\124\099\124\100\124\101";tests={{input="\101";matches={{index=0,match="\101"}}}}};{source="\040\097\124\098\124\099\124\100\124\101\041\102",tests={{input="\101\102",matches={{index=0;match="\101\102"};{index=1;match="\101"}}}}};{source="\097\098\099\100\042\101\102\103";tests={{input="\097\098\099\100\101\102\103",matches={{index=0,match="\097\098\099\100\101\102\103"}}}}};{source="\097\098\042";tests={{input="\120\097\098\121\097\098\098\098\122",matches={{index=0;match="\097\098"}}},{input="\120\097\121\097\098\098\098\122",matches={{index=0,match="\097"}}}}},{source="\040\097\098\124\099\100\041\101",tests={{input="\097\098\099\100\101";matches={{index=0;match="\099\100\101"};{index=1;match="\099\100"}}}}};{source="\091\097\098\104\103\101\102\100\099\093\105\106";tests={{input="\104\105\106";matches={{index=0,match="\104\105\106"}}}}},{source="\040\097\098\099\124\041\101\102",tests={{input="\097\098\099\100\101\102",matches={{index=0,match="\101\102"};{index=1,match=""}}}}};{source="\040\097\124\098\041\099\042\100";tests={{input="\097\098\099\100";matches={{index=0;match="\098\099\100"},{index=1;match="\098"}}}}},{source="\040\097\098\124\097\098\042\041\098\099";tests={{input="\097\098\099";matches={{index=0;match="\097\098\099"};{index=1;match="\097"}}}}},{source="\097\040\091\098\099\093\042\041\099\042";tests={{input="\097\098\099",matches={{index=0,match="\097\098\099"},{index=1,match="\098\099"}}}}},{source="\097\040\091\098\099\093\042\041\040\099\042\100\041",tests={{input="\097\098\099\100";matches={{index=0,match="\097\098\099\100"};{index=1,match="\098\099"};{index=2;match="\100"}}}}};{source="\097\040\091\098\099\093\043\041\040\099\042\100\041",tests={{input="\097\098\099\100",matches={{index=0,match="\097\098\099\100"},{index=1,match="\098\099"},{index=2,match="\100"}}}}};{source="\097\040\091\098\099\093\042\041\040\099\043\100\041",tests={{input="\097\098\099\100";matches={{index=0,match="\097\098\099\100"};{index=1,match="\098"};{index=2,match="\099\100"}}}}};{source="\097\091\098\099\100\093\042\100\099\100\099\100\101";tests={{input="\097\100\099\100\099\100\101",matches={{index=0,match="\097\100\099\100\099\100\101"}}}}};{source="\097\091\098\099\100\093\043\100\099\100\099\100\101",tests={{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\097\098\099\100\101"};{input="\097\100\099\100\099\100\101"}}};{source="\040\097\098\124\097\041\098\042\099";tests={{input="\097\098\099",matches={{index=0;match="\097\098\099"},{index=1;match="\097\098"}}}}},{source="\040\040\097\041\040\098\041\099\041\040\100\041";tests={{input="\097\098\099\100";matches={{index=0;match="\097\098\099\100"};{index=1,match="\097\098\099"},{index=2,match="\097"};{index=3,match="\098"},{index=4;match="\100"}}}}};{source="\091\097-\122\065-\090\095\093\091\097-\122\065-\090\048-\057\095\093\042";tests={{input="\097\108\112\104\097";matches={{index=0;match="\097\108\112\104\097"}}}}},{source="\040\098\099\043\100\036\124\101\102\042\103\046\124\104\063\105\040\106\124\107\041\041",tests={{input="\101\102\102\103\122",matches={{index=0,match="\101\102\102\103\122"},{index=1,match="\101\102\102\103\122"}}};{input="\105\106";matches={{index=0;match="\105\106"},{index=1,match="\105\106"},{index=2,match="\106"}}},{input="\114\101\102\102\103\122";matches={{index=0;match="\101\102\102\103\122"};{index=1,match="\101\102\102\103\122"}}};{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\101\102\102\103"};{input="\098\099\100\100"}}},{source="\040\040\040\040\040\040\040\040\040\040\097\041\041\041\041\041\041\041\041\041\041",tests={{input="\097";matches={{index=0,match="\097"},{index=1;match="\097"};{index=2,match="\097"};{index=3,match="\097"},{index=4;match="\097"},{index=5;match="\097"};{index=6;match="\097"};{index=7;match="\097"};{index=8,match="\097"},{index=9,match="\097"};{index=10,match="\097"}}}}},{source="\040\040\040\040\040\040\040\040\040\040\097\041\041\041\041\041\041\041\041\041\041\092\049\048",tests={{input="\097\097";matches={{index=0;match="\097\097"},{index=1;match="\097"},{index=2,match="\097"},{index=3,match="\097"};{index=4,match="\097"};{index=5,match="\097"};{index=6,match="\097"};{index=7;match="\097"},{index=8;match="\097"},{index=9;match="\097"},{index=10;match="\097"}}}}},{source="\040\040\040\040\040\040\040\040\040\097\041\041\041\041\041\041\041\041\041";tests={{input="\097",matches={{index=0,match="\097"},{index=1,match="\097"};{index=2,match="\097"},{index=3,match="\097"};{index=4;match="\097"},{index=5;match="\097"},{index=6;match="\097"};{index=7,match="\097"};{index=8,match="\097"},{index=9;match="\097"}}}}},{source="\109\117\108\116\105\112\108\101 \119\111\114\100\115 \111\102 \116\101\120\116",tests={{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\097\097"};{input="\117\104-\117\104"}}},{source="\109\117\108\116\105\112\108\101 \119\111\114\100\115",tests={{input="\109\117\108\116\105\112\108\101 \119\111\114\100\115\044 \121\101\097\104";matches={{index=0,match="\109\117\108\116\105\112\108\101 \119\111\114\100\115"}}}}},{source="\040\046\042\041\099\040\046\042\041",tests={{input="\097\098\099\100\101";matches={{index=0;match="\097\098\099\100\101"},{index=1;match="\097\098"},{index=2,match="\100\101"}}}}},{source="\092\040\040\046\042\041\044 \040\046\042\041\092\041",tests={{input="\040\097\044 \098\041";matches={{index=0,match="\040\097\044 \098\041"};{index=1;match="\097"},{index=2,match="\098"}}}}};{source="\097\098\099\100";tests={{input="\097\098\099\100";matches={{index=0;match="\097\098\099\100"}}}}};{source="\097\040\098\099\041\100",tests={{input="\097\098\099\100",matches={{index=0,match="\097\098\099\100"};{index=1,match="\098\099"}}}}},{source="\097\091-\093\063\099",tests={{input="\097\099";matches={{index=0;match="\097\099"}}}}},{source="\040\097\098\099\041\092\049";tests={{input="\097\098\099\097\098\099",matches={{index=0;match="\097\098\099\097\098\099"};{index=1,match="\097\098\099"}}}}};{source="\040\091\097-\099\093\042\041\092\049";tests={{input="\097\098\099\097\098\099";matches={{index=0;match="\097\098\099\097\098\099"};{index=1;match="\097\098\099"}}}}},{source="\040\097\041\124\092\049",tests={{input="\097";matches={{index=0;match="\097"};{index=1,match="\097"}}};{input="\042\042\042 \070\097\105\108\101\114\115",matches={{index=0;match="\097"},{index=1,match="\097"}}},{input="\097\098";matches={{index=0,match="\097"},{index=1;match="\097"}}};{input="\120"}}},{source="\040\040\091\097-\099\093\041\098\042\063\092\050\041\042",tests={{input="\097\098\097\098\098\098\099\098\099",matches={{index=0;match="\097\098\097\098\098"},{index=1,match="\098\098"},{index=2;match="\098"}}}}};{source="\040\040\091\097-\099\093\041\098\042\063\092\050\041\123\051\125";tests={{input="\097\098\097\098\098\098\099\098\099",matches={{index=0;match="\097\098\097\098\098\098\099\098\099"};{index=1;match="\099\098\099"};{index=2,match="\099"}}}}};{source="\040\040\092\051\124\098\041\092\050\040\097\041\120\041\043";tests={{input="\097\097\097\120\097\098\097\120\098\097\097\120\098\098\097\120";matches={{index=0,match="\098\098\097\120"},{index=1;match="\098\098\097\120"};{index=2;match="\098"},{index=3,match="\097"}}}}};{source="\040\040\092\051\124\098\041\092\050\040\097\041\041\123\050\044\125",tests={{input="\098\098\097\097\098\097\098\098\097\098\097\097\097\097\097\098\098\097\097\097\097\098\098\097";matches={{index=0,match="\098\098\097\097\097\097\098\098\097"};{index=1;match="\098\098\097"},{index=2,match="\098"};{index=3;match="\097"}}}}},{source="\097\098\099";flags="\105",tests={{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\097\097\120\097\098\120\098\097\120\098\098\120"},{input="\088\066\067"},{input="\065\088\067"};{input="\065\066\088"}}},{source="\097\098\043\098\099",flags="\105";tests={{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\065\066\067"},{input="\065\066\081"}}},{source="\094\097\098\099\036";flags="\105";tests={{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\065\066\066\066\066\067"};{input="\065\066\067\067"}}};{source="\094",flags="\105";tests={{input="\065\066\067",matches={{index=0,match=""}}}}};{source="\036",flags="\105",tests={{input="\065\066\067",matches={{index=0;match=""}}}}},{source="\097\091\098-\100\093\101";flags="\105";tests={{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\065\066\067"};{input="\065\066\068"}}};{source="\097\091\094-\098\093\099";flags="\105";tests={{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\065\066\068"};{input="\065-\067"}}},{source="\036\098",flags="\105";tests={{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\065\093\067"};{input="\066"}}},{source="\091\097-\122\065-\090\095\093\091\097-\122\065-\090\048-\057\095\093\042";flags="\105",tests={{input="\065\076\080\072\065";matches={{index=0;match="\065\076\080\072\065"}}}}},{source="\109\117\108\116\105\112\108\101 \119\111\114\100\115 \111\102 \116\101\120\116",flags="\105",tests={{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\065\065"},{input="\085\072-\085\072"}}};{source="\092\040\040\046\042\041\044 \040\046\042\041\092\041";flags="\105",tests={{input="\040\065\044 \066\041";matches={{index=0,match="\040\065\044 \066\041"};{index=1;match="\065"},{index=2,match="\066"}}}}},{source="\097\040\063\033\098\041\046";tests={{input="\097\098\097\100";matches={{index=0,match="\097\100"}}}}};{source="\097\040\063\061\100\041\046";tests={{input="\097\098\097\100";matches={{index=0;match="\097\100"}}}}};{source="\097\040\063\061\099\124\100\041\046";tests={{input="\097\098\097\100";matches={{index=0,match="\097\100"}}}}};{source="\097\040\063\058\098\124\099\124\100\041\040\046\041",tests={{input="\097\099\101";matches={{index=0,match="\097\099\101"};{index=1;match="\101"}}}}};{source="\097\040\063\058\098\124\099\124\100\041\042\040\046\041",tests={{input="\097\099\101";matches={{index=0,match="\097\099\101"};{index=1;match="\101"}}}}},{source="\097\040\063\058\098\124\099\124\100\041\043\063\040\046\041",tests={{input="\097\099\101",matches={{index=0;match="\097\099\101"};{index=1,match="\101"}}};{input="\097\099\100\098\099\100\098\101";matches={{index=0,match="\097\099\100"};{index=1,match="\100"}}}}};{source="\097\040\063\058\098\124\099\124\100\041\043\040\046\041";tests={{input="\097\099\100\098\099\100\098\101",matches={{index=0,match="\097\099\100\098\099\100\098\101"};{index=1;match="\101"}}}}};{source="\097\040\063\058\098\124\099\124\100\041\123\050\125\040\046\041";tests={{input="\097\099\100\098\099\100\098\101";matches={{index=0,match="\097\099\100\098"},{index=1;match="\098"}}}}},{source="\097\040\063\058\098\124\099\124\100\041\123\052\044\053\125\040\046\041";tests={{input="\097\099\100\098\099\100\098\101";matches={{index=0,match="\097\099\100\098\099\100\098"};{index=1;match="\098"}}}}};{source="\097\040\063\058\098\124\099\124\100\041\123\052\044\053\125\063\040\046\041";tests={{input="\097\099\100\098\099\100\098\101";matches={{index=0;match="\097\099\100\098\099\100"};{index=1,match="\100"}}}}},{source="\040\040\102\111\111\041\124\040\098\097\114\041\041\042";tests={{input="\102\111\111\098\097\114",matches={{index=0,match="\102\111\111\098\097\114"};{index=1;match="\098\097\114"},{index=2,match="\102\111\111"};{index=3,match="\098\097\114"}}}}},{source="\097\040\063\058\098\124\099\124\100\041\123\054\044\055\125\040\046\041";tests={{input="\097\099\100\098\099\100\098\101",matches={{index=0,match="\097\099\100\098\099\100\098\101"};{index=1,match="\101"}}}}},{source="\097\040\063\058\098\124\099\124\100\041\123\054\044\055\125\063\040\046\041",tests={{input="\097\099\100\098\099\100\098\101",matches={{index=0;match="\097\099\100\098\099\100\098\101"};{index=1,match="\101"}}}}},{source="\097\040\063\058\098\124\099\124\100\041\123\053\044\054\125\040\046\041",tests={{input="\097\099\100\098\099\100\098\101",matches={{index=0,match="\097\099\100\098\099\100\098\101"};{index=1,match="\101"}}}}};{source="\097\040\063\058\098\124\099\124\100\041\123\053\044\054\125\063\040\046\041",tests={{input="\097\099\100\098\099\100\098\101",matches={{index=0;match="\097\099\100\098\099\100\098"},{index=1,match="\098"}}}}};{source="\097\040\063\058\098\124\099\124\100\041\123\053\044\055\125\040\046\041";tests={{input="\097\099\100\098\099\100\098\101",matches={{index=0;match="\097\099\100\098\099\100\098\101"},{index=1;match="\101"}}}}};{source="\097\040\063\058\098\124\099\124\100\041\123\053\044\055\125\063\040\046\041",tests={{input="\097\099\100\098\099\100\098\101";matches={{index=0;match="\097\099\100\098\099\100\098"};{index=1,match="\098"}}}}};{source="\097\040\063\058\098\124\040\099\124\101\041\123\049\044\050\125\063\124\100\041\043\063\040\046\041";tests={{input="\097\099\101",matches={{index=0,match="\097\099\101"};{index=2,match="\101"}}}}};{source="\094\040\046\043\041\063\066";tests={{input="\065\066";matches={{index=0,match="\065\066"};{index=1,match="\065"}}}}};{source="\094\040\091\094\097-\122\093\041\124\040\092\094\041\036",tests={{input="\046";matches={{index=0,match="\046"},{index=1;match="\046"}}}}};{source="\094\091\060\062\093\038";tests={{input="\060\038\079\085\084";matches={{index=0,match="\060\038"}}}}},{source="\094\040\097\092\049\063\041\123\052\125\036",tests={{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\065\066"}}},{source="\040\063\058\040\102\041\040\111\041\040\111\041\124\040\098\041\040\097\041\040\114\041\041\042",tests={{input="\102\111\111\098\097\114",matches={{index=0,match="\102\111\111\098\097\114"},{index=1,match="\102"},{index=2;match="\111"},{index=3;match="\111"},{index=4;match="\098"};{index=5;match="\097"};{index=6,match="\114"}}}}};{source="\040\063\060\061\097\041\098",tests={{input="\097\098";matches={{index=0;match="\098"}}};{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\099\098"},{input="\098"}}},{source="\040\063\060\033\099\041\098",tests={{input="\097\098";matches={{index=0;match="\098"}}},{input="\098",matches={{index=0;match="\098"}}},{input="\098",matches={{index=0;match="\098"}}}}};{source="\040\063\058\046\046\041\042\097",tests={{input="\097\098\097",matches={{index=0;match="\097\098\097"}}}}},{source="\040\063\058\046\046\041\042\063\097";tests={{input="\097\098\097";matches={{index=0;match="\097"}}}}};{source="\094\040\041\123\051\044\053\125",tests={{input="\097\098\099";matches={{index=0,match=""},{index=1,match=""}}}}},{source="\094\040\097\043\041\042\097\120";tests={{input="\097\097\120";matches={{index=0;match="\097\097\120"},{index=1;match="\097"}}}}},{source="\094\040\040\097\124\098\041\043\041\042\097\120";tests={{input="\097\097\120";matches={{index=0,match="\097\097\120"};{index=1;match="\097"},{index=2,match="\097"}}}}};{source="\094\040\040\097\124\098\099\041\043\041\042\097\120",tests={{input="\097\097\120";matches={{index=0;match="\097\097\120"};{index=1,match="\097"},{index=2;match="\097"}}}}},{source="\040\097\124\120\041\042\097\098",tests={{input="\099\097\098",matches={{index=0,match="\097\098"}}}}};{source="\040\097\041\042\097\098";tests={{input="\099\097\098";matches={{index=0,match="\097\098"}}}}},{source="\102\111\111\092\119\042\092\100\123\052\125\098\097\122";tests={{input="\102\111\111\098\097\114\049\050\051\052\098\097\122",matches={{index=0,match="\102\111\111\098\097\114\049\050\051\052\098\097\122"}}}}};{source="\120\040~~\041\042\040\063\058\040\063\058\070\041\063\041\063",tests={{input="\120~~";matches={{index=0;match="\120~~"},{index=1,match="~~"}}}}};{source="\094\097\040\063\035\120\120\120\041\123\051\125\099";tests={{input="\097\097\097\099",matches={{index=0,match="\097\097\097\099"}}}}},{source="\094\097 \040\063\035\120\120\120\041 \040\063\035\121\121\121\041 \123\051\125\099";flags="\120",tests={{input="\097\097\097\099",matches={{index=0,match="\097\097\097\099"}}}}},{source="\040\063\060\033\091\099\100\093\041\098";tests={{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\066\n\066"},{input="\100\098\099\098"}}},{source="\040\063\060\033\091\099\100\093\041\091\097\098\093",tests={{input="\100\098\097\097\099\098",matches={{index=0;match="\097"}}}}};{source="\040\063\060\033\099\100\041\091\097\098\093";tests={{input="\099\100\097\099\099\098";matches={{index=0;match="\098"}}}}};{source="\040\041\094\098",tests={{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\097\n\098\n\099\n"}}};{source="\040\092\119\043\058\041\043";tests={{input="\111\110\101\058";matches={{index=0,match="\111\110\101\058"},{index=1;match="\111\110\101\058"}}}}},{source="\094\040\063\061\040\097\043\063\041\041\092\049\097\098",tests={{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\097\097\097\098"}}},{source="\040\091\092\119\058\093\043\058\058\041\063\040\092\119\043\041\036";tests={{input="\097\098\099\100",matches={{index=0;match="\097\098\099\100"},{index=1,match="\060\117\110\115\101\116\062"};{index=2;match="\097\098\099\100"}}},{input="\120\121\058\122\058\058\058\097\098\099\100";matches={{index=0,match="\120\121\058\122\058\058\058\097\098\099\100"};{index=1;match="\120\121\058\122\058\058\058"};{index=2;match="\097\098\099\100"}}}}};{source="\094\091\094\098\099\100\093\042\040\099\043\041";tests={{input="\097\101\120\121\099\100",matches={{index=0;match="\097\101\120\121\099"};{index=1,match="\099"}}}}},{source="\040\097\042\041\098\043",tests={{input="\099\097\097\098",matches={{index=0,match="\097\097\098"};{index=1,match="\097\097"}}}}},{source="\040\091\092\119\058\093\043\058\058\041\063\040\092\119\043\041\036",tests={{input="\097\098\099\100",matches={{index=0;match="\097\098\099\100"},{index=1;match="\060\117\110\115\101\116\062"},{index=2;match="\097\098\099\100"}}};{input="\120\121\058\122\058\058\058\097\098\099\100";matches={{index=0,match="\120\121\058\122\058\058\058\097\098\099\100"},{index=1,match="\120\121\058\122\058\058\058"};{index=2;match="\097\098\099\100"}}},{input="\042\042\042 \070\097\105\108\101\114\115",matches={{index=0;match="\070\097\105\108\101\114\115"},{index=1;match="\060\117\110\115\101\116\062"},{index=2,match="\070\097\105\108\101\114\115"}}};{input="\097\098\099\100\058"}}};{source="\094\091\094\098\099\100\093\042\040\099\043\041",tests={{input="\097\101\120\121\099\100",matches={{index=0,match="\097\101\120\121\099"},{index=1;match="\099"}}}}};{source="\040\063\062\097\043\041\098";tests={{input="\097\097\097\098";matches={{index=0;match="\097\097\097\098"}}}}},{source="\040\091\091\058\093\043\041",tests={{input="\097\058\091\098\093\058",matches={{index=0,match="\058\091"};{index=1;match="\058\091"}}}}},{source="\040\091\091\061\093\043\041";tests={{input="\097\061\091\098\093\061",matches={{index=0,match="\061\091"};{index=1,match="\061\091"}}}}};{source="\040\091\091\046\093\043\041",tests={{input="\097\046\091\098\093\046",matches={{index=0,match="\046\091"},{index=1;match="\046\091"}}}}},{source="\040\040\063\062\097\043\041\098\041";tests={{input="\097\097\097\098",matches={{index=0;match="\097\097\097\098"},{index=1;match="\097\097\097\098"}}}}},{source="\040\063\062\040\097\043\041\041\098",tests={{input="\097\097\097\098";matches={{index=0,match="\097\097\097\098"}}}}},{source="\040\040\063\062\091\094\040\041\093\043\041\124\092\040\091\094\040\041\093\042\092\041\041\043",tests={{input="\040\040\097\098\099\040\097\100\101\041\117\102\104\040\041\040\041\120";matches={{index=0,match="\097\098\099\040\097\100\101\041\117\102\104\040\041\040\041\120"};{index=1,match="\120"}}}}},{source="\097\092\090";tests={{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\097\097\097\098"},{input="\097\n\098\n"}}},{source="\098\092\090";tests={{input="\097\n\098\n",matches={{index=0,match="\098"}}}}};{source="\098\092\090";tests={{input="\097\n\098";matches={{index=0,match="\098"}}}}},{source="\098\092\122",tests={{input="\097\n\098";matches={{index=0;match="\098"}}},{input="\042\042\042 \070\097\105\108\101\114\115"}}},{source="\119\111\114\100 \040\063\062\040\063\058\040\063\033\111\116\104\101\114\119\111\114\100\041\091\097-\122\065-\090\048-\057\093\043 \041\123\048\044\051\048\125\041\111\116\104\101\114\119\111\114\100",tests={{input="\119\111\114\100 \099\097\116 \100\111\103 \101\108\101\112\104\097\110\116 \109\117\115\115\101\108 \099\111\119 \104\111\114\115\101 \099\097\110\097\114\121 \098\097\098\111\111\110 \115\110\097\107\101 \115\104\097\114\107 \111\116\104\101\114\119\111\114\100",matches={{index=0;match="\119\111\114\100 \099\097\116 \100\111\103 \101\108\101\112\104\097\110\116 \109\117\115\115\101\108 \099\111\119 \104\111\114\115\101 \099\097\110\097\114\121 \098\097\098\111\111\110 \115\110\097\107\101 \115\104\097\114\107 \111\116\104\101\114\119\111\114\100"}}};{input="\119\111\114\100 \099\097\116 \100\111\103 \101\108\101\112\104\097\110\116 \109\117\115\115\101\108 \099\111\119 \104\111\114\115\101 \099\097\110\097\114\121 \098\097\098\111\111\110 \115\110\097\107\101 \115\104\097\114\107"}}},{source="\119\111\114\100 \040\063\062\091\097-\122\065-\090\048-\057\093\043 \041\123\048\044\051\048\125\111\116\104\101\114\119\111\114\100",tests={{input="\119\111\114\100 \099\097\116 \100\111\103 \101\108\101\112\104\097\110\116 \109\117\115\115\101\108 \099\111\119 \104\111\114\115\101 \099\097\110\097\114\121 \098\097\098\111\111\110 \115\110\097\107\101 \115\104\097\114\107 \116\104\101 \113\117\105\099\107 \098\114\111\119\110 \102\111\120 \097\110\100 \116\104\101 \108\097\122\121 \100\111\103 \097\110\100 \115\101\118\101\114\097\108 \111\116\104\101\114 \119\111\114\100\115 \103\101\116\116\105\110\103 \099\108\111\115\101 \116\111 \116\104\105\114\116\121 \098\121 \110\111\119 \073 \104\111\112\101"}}};{source="\040\063\060\061\092\100\123\051\125\046\046\046\041\040\063\060\033\057\057\057\041\102\111\111",tests={{input="\049\050\051\097\098\099\102\111\111",matches={{index=0;match="\102\111\111"}}},{input="\049\050\051\052\053\054\102\111\111";matches={{index=0;match="\102\111\111"}}},{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\049\050\051\057\057\057\102\111\111"}}};{source="\040\040\090\041\043\124\065\041\042";tests={{input="\090\065\066\067\068\069\070\071";matches={{index=0,match="\090\065"},{index=1;match="\065"},{index=2,match="\090"}}}}},{source="\040\090\040\041\124\065\041\042",tests={{input="\090\065\066\067\068\069\070\071",matches={{index=0;match="\090\065"};{index=1,match="\065"},{index=2,match=""}}}}},{source="\040\090\040\040\041\041\124\065\041\042";tests={{input="\090\065\066\067\068\069\070\071",matches={{index=0,match="\090\065"};{index=1,match="\065"};{index=2,match=""};{index=3,match=""}}}}},{source="\040\040\063\062\090\041\043\124\065\041\042";tests={{input="\090\065\066\067\068\069\070\071";matches={{index=0;match="\090\065"},{index=1;match="\065"}}}}};{source="\094\091\092\100-\097\093",tests={{input="\097\098\099\100\101";matches={{index=0;match="\097"}}},{input="-\116\104\105\110\103\115",matches={{index=0,match="-"}}};{input="\048\100\105\103\105\116";matches={{index=0,match="\048"}}},{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\098\099\100\101\102"}}},{source="\091\091\058\115\112\097\099\101\058\093\093\043",tests={{input="\062 \t\n\012\r\v\060";matches={{index=0,match=" \t\n\012\r\v"}}}}};{source="\091\091\058\098\108\097\110\107\058\093\093\043";tests={{input="\062 \t\n\012\r\v\060";matches={{index=0,match=" \t"}}}}};{source="\091\092\115\093\043",tests={{input="\062 \t\n\012\r\v\060",matches={{index=0;match=" \t\n\012\r\v"}}}}};{source="\092\115\043";tests={{input="\062 \t\n\012\r\v\060";matches={{index=0,match=" \t\n\012\r\v"}}}}};{source="\097\v\098";flags="\120";tests={{input="\097\098";matches={{index=0;match="\097\098"}}}}};{source="\040\063\033\092\065\041\120",flags="\109",tests={{input="\097\n\120\098\n";matches={{index=0;match="\120"}}}}},{source="\040\063\033\094\041\120",flags="\109",tests={{input="\097\n\120\098\n"}}},{source="\097\098\099\092\081\097\098\099\092\069\097\098\099";tests={{input="\097\098\099\097\098\099\097\098\099",matches={{index=0,match="\097\098\099\097\098\099\097\098\099"}}}}};{source="\097\098\099\092\081\040\042\043\124\092\069\097\098\099";tests={{input="\097\098\099\040\042\043\124\097\098\099";matches={{index=0;match="\097\098\099\040\042\043\124\097\098\099"}}}}};{source="   \097\098\099\092\081 \097\098\099\092\069\097\098\099";flags="\120";tests={{input="\097\098\099 \097\098\099\097\098\099",matches={{index=0;match="\097\098\099 \097\098\099\097\098\099"}}},{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\097\098\099\097\098\099\097\098\099"}}},{source="\097\098\099\035\099\111\109\109\101\110\116\n    \092\081\035\110\111\116 \099\111\109\109\101\110\116\n    \108\105\116\101\114\097\108\092\069",flags="\120",tests={{input="\097\098\099\035\110\111\116 \099\111\109\109\101\110\116\n    \108\105\116\101\114\097\108";matches={{index=0,match="\097\098\099\035\110\111\116 \099\111\109\109\101\110\116\n    \108\105\116\101\114\097\108"}}}}},{source="\097\098\099\035\099\111\109\109\101\110\116\n    \092\081\035\110\111\116 \099\111\109\109\101\110\116\n    \108\105\116\101\114\097\108";flags="\120",tests={{input="\097\098\099\035\110\111\116 \099\111\109\109\101\110\116\n    \108\105\116\101\114\097\108",matches={{index=0;match="\097\098\099\035\110\111\116 \099\111\109\109\101\110\116\n    \108\105\116\101\114\097\108"}}}}},{source="\097\098\099\035\099\111\109\109\101\110\116\n    \092\081\035\110\111\116 \099\111\109\109\101\110\116\n    \108\105\116\101\114\097\108\092\069 \035\109\111\114\101 \099\111\109\109\101\110\116\n    ",flags="\120";tests={{input="\097\098\099\035\110\111\116 \099\111\109\109\101\110\116\n    \108\105\116\101\114\097\108",matches={{index=0;match="\097\098\099\035\110\111\116 \099\111\109\109\101\110\116\n    \108\105\116\101\114\097\108"}}}}},{source="\097\098\099\035\099\111\109\109\101\110\116\n    \092\081\035\110\111\116 \099\111\109\109\101\110\116\n    \108\105\116\101\114\097\108\092\069 \035\109\111\114\101 \099\111\109\109\101\110\116",flags="\120",tests={{input="\097\098\099\035\110\111\116 \099\111\109\109\101\110\116\n    \108\105\116\101\114\097\108",matches={{index=0,match="\097\098\099\035\110\111\116 \099\111\109\109\101\110\116\n    \108\105\116\101\114\097\108"}}}}},{source="\092\081\097\098\099\092\036\120\121\122\092\069";tests={{input="\097\098\099\092\036\120\121\122";matches={{index=0,match="\097\098\099\092\036\120\121\122"}}}}},{source="\092\081\097\098\099\092\069\092\036\092\081\120\121\122\092\069";tests={{input="\097\098\099\036\120\121\122";matches={{index=0,match="\097\098\099\036\120\121\122"}}}}},{source="\092\071\097\098\099",tests={{input="\097\098\099",matches={{index=0,match="\097\098\099"}}};{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\120\121\122\097\098\099"}}};{source="\040\046\042\041\092\100\043\092\049";tests={{input="\097\098\099\049\050\051\097\098\099",matches={{index=0,match="\097\098\099\049\050\051\097\098\099"},{index=1,match="\097\098\099"}}},{input="\097\098\099\049\050\051\098\099";matches={{index=0,match="\098\099\049\050\051\098\099"},{index=1,match="\098\099"}}}}};{source="\040\046\042\041\092\100\043\092\049",flags="\115",tests={{input="\097\098\099\049\050\051\097\098\099",matches={{index=0,match="\097\098\099\049\050\051\097\098\099"},{index=1;match="\097\098\099"}}},{input="\097\098\099\049\050\051\098\099";matches={{index=0,match="\098\099\049\050\051\098\099"},{index=1;match="\098\099"}}}}};{source="\040\040\046\042\041\041\092\100\043\092\049";tests={{input="\097\098\099\049\050\051\097\098\099";matches={{index=0;match="\097\098\099\049\050\051\097\098\099"};{index=1;match="\097\098\099"},{index=2;match="\097\098\099"}}},{input="\097\098\099\049\050\051\098\099",matches={{index=0;match="\098\099\049\050\051\098\099"},{index=1,match="\098\099"};{index=2,match="\098\099"}}}}},{source="\040\063\060\033\091\094\102\093\111\111\041\040\098\097\114\041",tests={{input="\102\111\111\098\097\114\088",matches={{index=0;match="\098\097\114"};{index=1;match="\098\097\114"}}},{input="\042\042 \070\097\105\108\101\114\115"};{input="\098\111\111\098\097\114\088"}}};{source="\040\063\060\033\091\094\102\093\041\088";tests={{input="\111\102\102\088",matches={{index=0;match="\088"}}};{input="\042\042 \070\097\105\108\101\114\115"},{input="\111\110\121\088"}}},{source="\040\063\060\061\091\094\102\093\041\088";tests={{input="\111\110\121\088";matches={{index=0;match="\088"}}},{input="\042\042 \070\097\105\108\101\114\115"};{input="\111\102\102\088"}}},{source="\091\091\044\097\098\099\044\093\043\093",tests={{input="\097\098\099\093",matches={{index=0,match="\097\098\099\093"}}};{input="\097\044\098\093",matches={{index=0;match="\097\044\098\093"}}};{input="\091\097\044\098\044\099\093";matches={{index=0,match="\091\097\044\098\044\099\093"}}}}},{source="\097\042\098\042\092\119",tests={{input="\097\097\097\098\098\098\098",matches={{index=0;match="\097\097\097\098\098\098\098"}}};{input="\097\097\097\097";matches={{index=0;match="\097\097\097\097"}}},{input="\097",matches={{index=0;match="\097"}}}}};{source="\097\042\098\063\092\119",tests={{input="\097\097\097\098\098\098\098",matches={{index=0,match="\097\097\097\098\098"}}},{input="\097\097\097\097";matches={{index=0,match="\097\097\097\097"}}},{input="\097";matches={{index=0,match="\097"}}}}},{source="\097\042\098\123\048\044\052\125\092\119",tests={{input="\097\097\097\098\098\098\098",matches={{index=0;match="\097\097\097\098\098\098\098"}}};{input="\097\097\097\097",matches={{index=0;match="\097\097\097\097"}}},{input="\097";matches={{index=0;match="\097"}}}}},{source="\097\042\098\123\048\044\125\092\119",tests={{input="\097\097\097\098\098\098\098",matches={{index=0,match="\097\097\097\098\098\098\098"}}},{input="\097\097\097\097",matches={{index=0;match="\097\097\097\097"}}};{input="\097",matches={{index=0;match="\097"}}}}};{source="\097\042\092\100\042\092\119",tests={{input="\048\097";matches={{index=0;match="\048\097"}}},{input="\097";matches={{index=0,match="\097"}}}}};{source="\097\042\098 \042\092\119",flags="\120";tests={{input="\097",matches={{index=0,match="\097"}}}}},{source="\097\042\098\035\099\111\109\109\101\110\116\n  \042\092\119";flags="\120";tests={{input="\097",matches={{index=0;match="\097"}}}}};{source="\097\042 \098 \042\092\119",flags="\120";tests={{input="\097",matches={{index=0;match="\097"}}}}},{source="\094\092\119\043\061\046\042\040\092\092\092\110\046\042\041\042",tests={{input="\097\098\099\061\120\121\122\092\n\112\113\114";matches={{index=0;match="\097\098\099\061\120\121\122\092"}}}}};{source="\094\092\069\097\098\099";tests={{input="\097\098\099",matches={{index=0;match="\097\098\099"}}}}};{source="\094\091\092\069\097\098\099\093";tests={{input="\097";matches={{index=0,match="\097"}}};{input="\042\042 \070\097\105\108\101\114\115"};{input="\069"}}};{source="\094\091\097-\092\069\099\093";tests={{input="\042\042 \070\097\105\108\101\114\115"};{input="-"};{input="\069"}}};{source="\094\091\097\092\069\092\069-\092\069\099\093";tests={{input="\042\042 \070\097\105\108\101\114\115"},{input="-"};{input="\069"}}},{source="\094\091\092\069\092\081\097\092\069-\092\081\122\092\069\093\043";tests={{input="\042\042 \070\097\105\108\101\114\115"};{input="-"}}};{source="\094\040\063\033\091\094\092\110\093\042\092\110\092\122\041",tests={{input="\097\098\099";matches={{index=0,match=""}}};{input="\097\098\099\n"}}},{source="\091\091\058\097\098\099\100\058\120\121\122\093\093";tests={{input="\097\093",matches={{index=0,match="\097\093"}}},{input="\058\093";matches={{index=0;match="\058\093"}}}}},{source="\046\042\091\111\112\093\091\120\121\122\093";tests={{input="\102\111\111\097\098\099\102\111\111"}}},{source="\091\092\120\048\048-\092\120\102\102\092\115\093\043";tests={{input="\n\v\012\r";matches={{index=0;match="\n\v\012\r"}}}}};{source="\040\097\098\099\041\092\049",flags="\105",tests={{input="\097\098\099"}}};{source="\040\097\098\099\041\092\049",tests={{input="\097\098\099"}}};{source="\091\094\097\093\042";flags="\105",tests={{input="\049\050\097\098\099",matches={{index=0,match="\049\050"}}}}},{source="\091\094\097\093\042\043";flags="\105",tests={{input="\049\050\097\098\099";matches={{index=0;match="\049\050"}}}}};{source="\091\094\097\093\042\063\088";flags="\105";tests={{input="\042\042 \070\097\105\108\101\114\115"};{input="\049\050\097\098\099"},{input="\049\050\065\066\067"}}},{source="\091\094\097\093\043\063\088";flags="\105";tests={{input="\042\042 \070\097\105\108\101\114\115"};{input="\049\050\097\098\099"},{input="\049\050\065\066\067"}}};{source="\091\094\097\093\063\088";flags="\105";tests={{input="\049\050\097\088\098\099\088",matches={{index=0;match="\088"}}},{input="\066\067\088";matches={{index=0;match="\067\088"}}}}};{source="\091\094\097\093\063\063\088",flags="\105",tests={{input="\049\050\097\088\098\099\088",matches={{index=0,match="\088"}}};{input="\066\067\088";matches={{index=0;match="\067\088"}}}}},{source="\091\094\097\093\063\043\088";flags="\105";tests={{input="\049\050\097\088\098\099\088",matches={{index=0,match="\099\088"}}};{input="\066\067\088";matches={{index=0;match="\067\088"}}}}},{source="\091\094\097\093\123\050\044\051\125";flags="\105";tests={{input="\097\098\099\100\101\102";matches={{index=0,match="\098\099\100"}}}}},{source="\091\094\097\093\123\050\044\051\125\063",flags="\105";tests={{input="\097\098\099\100\101\102";matches={{index=0,match="\098\099"}}}}};{source="\091\094\097\093\123\050\044\051\125\043",flags="\105";tests={{input="\097\098\099\100\101\102",matches={{index=0,match="\098\099\100"}}}}},{source="\040\097\041\098\124\040\097\041\099",tests={{input="\097\099";matches={{index=0,match="\097\099"};{index=1,match="\060\117\110\115\101\116\062"};{index=2;match="\097"}}}}},{source="\040\063\062\040\097\041\041\098\124\040\097\041\099";tests={{input="\097\099";matches={{index=0;match="\097\099"},{index=1;match="\060\117\110\115\101\116\062"};{index=2,match="\097"}}}}};{source="\040\063\061\040\097\041\041\097\098\124\040\097\041\099";tests={{input="\097\099";matches={{index=0;match="\097\099"},{index=1,match="\060\117\110\115\101\116\062"},{index=2;match="\097"}}}}},{source="\040\040\063\062\040\097\041\041\098\124\040\097\041\099\041",tests={{input="\097\099";matches={{index=0;match="\097\099"},{index=1,match="\097\099"};{index=2;match="\060\117\110\115\101\116\062"},{index=3,match="\097"}}}}};{source="\040\063\061\040\063\062\040\097\041\041\098\124\040\097\041\099\041\040\046\046\041";tests={{input="\097\099",matches={{index=0,match="\097\099"},{index=1;match="\060\117\110\115\101\116\062"},{index=3;match="\097\099"}}}}},{source="\040\063\062\040\063\062\040\097\041\041\098\124\040\097\041\099\041";tests={{input="\097\099",matches={{index=0,match="\097\099"};{index=1;match="\060\117\110\115\101\116\062"}}}}};{source="\040\040\063\062\040\097\043\041\098\041\043\040\097\097\098\097\098\041\041",tests={{input="\097\097\097\097\098\097\097\097\098\097\097\098\097\098",matches={{index=3,match="\097\097\098\097\098"}}}}};{source="\040\063\062\097\043\124\097\098\041\043\063\099";tests={{input="\097\097\098\099"}}},{source="\040\063\062\097\043\124\097\098\041\043\099";tests={{input="\097\097\098\099"}}},{source="\040\063\058\097\043\124\097\098\041\043\099",tests={{input="\097\097\098\099";matches={{index=0;match="\097\097\098\099"}}}}};{source="\094\040\063\058\097\124\097\098\041\043\043\099";tests={{input="\097\097\097\097\098\099"}}},{source="\094\040\063\062\097\124\097\098\041\043\043\099",tests={{input="\097\097\097\097\098\099"}}};{source="\094\040\063\058\097\124\097\098\041\043\099";tests={{input="\097\097\097\097\098\099",matches={{index=0,match="\097\097\097\097\098\099"}}}}},{source="\040\063\061\097\098\099\041\123\049\125\120\121\122";tests={{input="\042\042 \070\097\105\108\101\114\115"},{input="\120\121\122"}}};{source="\040\063\061\040\097\041\041\063\046";tests={{input="\097\098";matches={{index=0,match="\097"}}};{input="\098\099";matches={{index=0;match="\098"}}}}};{source="\040\063\061\040\097\041\041\063\063\046";tests={{input="\097\098",matches={{index=0,match="\097"}}},{input="\098\099";matches={{index=0;match="\098"}}}}},{source="\094\040\063\061\040\063\049\041\041\063\091\097\122\093\040\091\097\098\099\093\041\100";tests={{input="\097\098\100";matches={{index=0;match="\097\098\100"};{index=1;match="\098"}}};{input="\122\099\100\120\120",matches={{index=0;match="\122\099\100"};{index=1,match="\099"}}}}};{source="\094\040\063\033\097\041\123\048\125\092\119\043",tests={{input="\097\097\097\097\097";matches={{index=0,match="\097\097\097\097\097"}}}}};{source="\040\063\060\061\040\097\098\099\041\041\063\120\121\122",tests={{input="\112\113\114\120\121\122";matches={{index=0;match="\120\121\122"}}}}};{source="\094\091\092\103\060\097\062\093\043";tests={{input="\103\103\103\060\060\060\097\097\097\062\062\062",matches={{index=0,match="\103\103\103\060\060\060\097\097\097\062\062\062"}}},{input="\042\042 \070\097\105\108\101\114\115"},{input="\092\103\097"}}},{source="\094\091\092\103\097\093\043",tests={{input="\103\103\103\097\103\097\103\097\120\121\122";matches={{index=0;match="\103\103\103\097\103\097\103\097"}}}}},{source="\094\091\058\097\091\058\100\105\103\105\116\058\093\093\043",tests={{input="\097\097\097\097\052\052\052\058\058\058\090",matches={{index=0;match="\097\097\097\097\052\052\052\058\058\058"}}}}},{source="\094\091\058\097\091\058\100\105\103\105\116\058\093\058\098\093\043";tests={{input="\097\097\097\097\052\052\052\058\058\058\098\098\098\090";matches={{index=0,match="\097\097\097\097\052\052\052\058\058\058\098\098\098"}}}}};{source="\091\058\097\093\120\120\120\091\098\058\093",tests={{input="\058\120\120\120\058",matches={{index=0,match="\058\120\120\120\058"}}}}},{source="\040\063\060\061\097\123\050\125\041\098",flags="\105",tests={{input="\120\097\097\098\099",matches={{index=0,match="\098"}}},{input="\042\042 \070\097\105\108\101\114\115"},{input="\120\097\098\099"}}},{source="\040\063\060\033\097\123\050\125\041\098";flags="\105",tests={{input="\120\097\098\099";matches={{index=0;match="\098"}}};{input="\042\042 \070\097\105\108\101\114\115"},{input="\120\097\097\098\099"}}};{source="\040\063\060\061\097\092\104\041\099",tests={{input="\120\097 \099";matches={{index=0,match="\099"}}}}},{source="\040\063\060\061\091\094\097\093\123\050\125\041\098";tests={{input="\097\120\120\098\099",matches={{index=0,match="\098"}}};{input="\097\065\065\098\099";matches={{index=0;match="\098"}}};{input="\042\042 \070\097\105\108\101\114\115"};{input="\120\097\097\098\099"}}};{source="\040\063\060\061\091\094\097\093\123\050\125\041\098";flags="\105";tests={{input="\097\120\120\098\099";matches={{index=0,match="\098"}}},{input="\042\042 \070\097\105\108\101\114\115"},{input="\120\097\097\098\099"}}};{source="\040\063\060\061\097\092\072\041\099",tests={{input="\097\098\099";matches={{index=0;match="\099"}}}}},{source="\040\063\060\061\097\092\086\041\099";tests={{input="\097\098\099",matches={{index=0,match="\099"}}}}},{source="\040\063\060\061\097\092\118\041\099";tests={{input="\097\n\099";matches={{index=0;match="\099"}}}}},{source="\094\040\097\123\050\044\051\125\041\123\050\044\125\043\097",tests={{input="\042\042 \070\097\105\108\101\114\115"},{input="\097\097\097\097\097\097"},{input="\097\097\097\097\097\097\097\097\097"}}},{source="\094\040\097\123\050\044\051\125\041\043\043\097",tests={{input="\042\042 \070\097\105\108\101\114\115"};{input="\097\097\097\097\097\097"}}},{source="\094\040\097\123\050\044\051\125\041\042\043\097",tests={{input="\042\042 \070\097\105\108\101\114\115"};{input="\097\097\097\097\097\097"}}};{source="\092\072\092\104\092\086\092\118",tests={{input="\088 \088\n",matches={{index=0,match="\088 \088\n"}}},{input="\088\t\088\v",matches={{index=0;match="\088\t\088\v"}}},{input="\042\042 \070\097\105\108\101\114\115"}}},{source="\092\072\123\051\044\052\125",tests={{input="\088\089  \065\066\067\068\069",matches={{index=0;match="\065\066\067\068"}}},{input="\088\089  \080\081\082 \083\084";matches={{index=0,match="\080\081\082"}}}}},{source="\046\092\104\123\051\044\052\125\046";tests={{input="\088\089  \065\066    \080\081\082\083";matches={{index=0;match="\066    \080"}}}}},{source="\092\104\042\088\092\104\063\092\072\043\089\092\072\063\090";tests={{input="\062\088\078\078\078\089\090";matches={{index=0,match="\088\078\078\078\089\090"}}},{input="\062  \088 \078\089\081\090";matches={{index=0,match="  \088 \078\089\081\090"}}};{input="\042\042 \070\097\105\108\101\114\115"};{input="\062\088\089\090"},{input="\062  \088 \078\089 \090"}}};{source="\092\118\042\088\092\118\063\089\092\118\043\090\092\086\042\092\120\048\097\092\086\043\092\120\048\098\092\086\123\050\044\051\125\092\120\048\099";tests={{input="\062\088\089\n\090\n\065\v\078\078\012",matches={{index=0;match="\088\089\n\090\n\065\v\078\078\012"}}};{input="\062\n\r\088\n\089\n\v\090\090\090\n\065\065\065\v\078\078\078\012";matches={{index=0;match="\n\r\088\n\089\n\v\090\090\090\n\065\065\065\v\078\078\078\012"}}}}};{source="\040\102\111\111\041\092\075\098\097\114";tests={{input="\102\111\111\098\097\114",matches={{index=0;match="\098\097\114"},{index=1,match="\102\111\111"}}}}};{source="\040\102\111\111\041\040\092\075\098\097\114\124\098\097\122\041";tests={{input="\102\111\111\098\097\114",matches={{index=0;match="\098\097\114"};{index=1;match="\102\111\111"};{index=2;match="\098\097\114"}}},{input="\102\111\111\098\097\122";matches={{index=0,match="\102\111\111\098\097\122"};{index=1;match="\102\111\111"},{index=2;match="\098\097\122"}}}}};{source="\040\102\111\111\092\075\098\097\114\041\098\097\122";tests={{input="\102\111\111\098\097\114\098\097\122",matches={{index=0;match="\098\097\114\098\097\122"},{index=1;match="\102\111\111\098\097\114"}}}}};{source="\040\063\124\040\097\098\099\041\124\040\120\121\122\041\041\092\049";tests={{input="\097\098\099\097\098\099";matches={{index=0;match="\097\098\099\097\098\099"},{index=1,match="\097\098\099"}}},{input="\120\121\122\120\121\122",matches={{index=0;match="\120\121\122\120\121\122"};{index=1,match="\120\121\122"}}},{input="\042\042 \070\097\105\108\101\114\115"},{input="\097\098\099\120\121\122"},{input="\120\121\122\097\098\099"}}};{source="\040\063\124\040\097\098\099\041\124\040\120\121\122\041\041\040\063\049\041",tests={{input="\097\098\099\097\098\099";matches={{index=0;match="\097\098\099\097\098\099"},{index=1,match="\097\098\099"}}};{input="\120\121\122\097\098\099",matches={{index=0;match="\120\121\122\097\098\099"},{index=1;match="\120\121\122"}}};{input="\042\042 \070\097\105\108\101\114\115"};{input="\120\121\122\120\121\122"}}};{source="\040\063\'\097\098\099\'\092\119\043\041\058\092\107\060\097\098\099\062\123\050\125";tests={{input="\042\042 \070\097\105\108\101\114\115"},{input="\097\058\097\120\121\122"},{input="\097\098\058\097\098\120\121\122"}}},{source="\040\063\'\097\098\099\'\092\119\043\041\058\092\103\123\097\098\099\125\123\050\125";tests={{input="\042\042 \070\097\105\108\101\114\115"},{input="\097\058\097\120\121\122"},{input="\097\098\058\097\098\120\121\122"}}},{source="\094\040\092\119\043\043\124\092\115\043\043\041\042\036";tests={{input="\110\111\119 \105\115 \116\104\101 \116\105\109\101 \102\111\114 \097\108\108 \103\111\111\100 \109\101\110 \116\111 \099\111\109\101 \116\111 \116\104\101 \097\105\100 \111\102 \116\104\101 \112\097\114\116\121",matches={{index=0,match="\110\111\119 \105\115 \116\104\101 \116\105\109\101 \102\111\114 \097\108\108 \103\111\111\100 \109\101\110 \116\111 \099\111\109\101 \116\111 \116\104\101 \097\105\100 \111\102 \116\104\101 \112\097\114\116\121"},{index=1;match="\112\097\114\116\121"}}};{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\116\104\105\115 \105\115 \110\111\116 \097 \108\105\110\101 \119\105\116\104 \111\110\108\121 \119\111\114\100\115 \097\110\100 \115\112\097\099\101\115\033"}}};{source="\040\092\100\043\043\041\040\092\119\041",tests={{input="\049\050\051\052\053\097",matches={{index=0;match="\049\050\051\052\053\097"},{index=1;match="\049\050\051\052\053"};{index=2,match="\097"}}},{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\049\050\051\052\053\043"}}},{source="\097\043\043\098",tests={{input="\097\097\097\098",matches={{index=0,match="\097\097\097\098"}}}}},{source="\040\097\043\043\098\041",tests={{input="\097\097\097\098",matches={{index=0,match="\097\097\097\098"};{index=1,match="\097\097\097\098"}}}}},{source="\040\097\043\043\041\098",tests={{input="\097\097\097\098",matches={{index=0;match="\097\097\097\098"},{index=1;match="\097\097\097"}}}}},{source="\040\091\094\040\041\093\043\043\124\092\040\091\094\040\041\093\042\092\041\041\043",tests={{input="\040\040\097\098\099\040\097\100\101\041\117\102\104\040\041\040\041\120",matches={{index=0,match="\097\098\099\040\097\100\101\041\117\102\104\040\041\040\041\120"};{index=1,match="\120"}}}}},{source="\092\040\040\091\094\040\041\093\043\043\124\092\040\091\094\040\041\093\043\092\041\041\043\092\041",tests={{input="\040\097\098\099\041";matches={{index=0;match="\040\097\098\099\041"},{index=1,match="\097\098\099"}}};{input="\040\097\098\099\040\100\101\102\041\120\121\122\041",matches={{index=0,match="\040\097\098\099\040\100\101\102\041\120\121\122\041"};{index=1,match="\120\121\122"}}},{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\040\040\040\041\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097\097"}}};{source="\094\040\091\094\040\041\093\124\092\040\040\063\049\041\042\092\041\041\042\036";tests={{input="\097\098\099";matches={{index=0;match="\097\098\099"},{index=1;match="\099"}}},{input="\042\042\042 \070\097\105\108\101\114\115\041"},{input="\097\040\098\040\099\041\100"}}};{source="\094\062\097\098\099\062\040\091\094\040\041\093\124\092\040\040\063\049\041\042\092\041\041\042\060\120\121\122\060\036";tests={{input="\062\097\098\099\062\049\050\051\060\120\121\122\060",matches={{index=0,match="\062\097\098\099\062\049\050\051\060\120\121\122\060"},{index=1,match="\051"}}}}};{source="\094\040\063\058\040\040\046\041\040\063\049\041\092\050\124\041\124\040\040\046\041\040\063\051\041\092\052\124\046\041\041\036";flags="\105";tests={{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\084\104\101\113\117\105\099\107\098\114\111\119\110\102\111\120"}}},{source="\094\040\120\040\121\124\040\063\049\041\123\050\125\041\122\041";tests={{input="\120\121\122",matches={{index=0,match="\120\121\122"};{index=1,match="\120\121\122"};{index=2;match="\121"}}},{input="\042\042\042 \070\097\105\108\101\114\115"};{input="\120\120\121\122\122"},{input="\120\120\121\122\120\121\122\120\121\122\122"}}},{source="\094\097\043\040\042\070\065\073\076\041";tests={{input="\097\097\097\097\097\097"}}},{source="\097\043\098\063\099\043\040\042\070\065\073\076\041",tests={{input="\097\097\097\098\099\099\099"}}},{source="\040\065 \040\065\124\066\040\042\065\067\067\069\080\084\041\124\067\041 \068\041\040\069\041",flags="\120",tests={{input="\065\066";matches={{index=0;match="\065\066"}}};{input="\065\066\088";matches={{index=0;match="\065\066"}}};{input="\065\065\068\069",matches={{index=0,match="\065\065\068\069"};{index=1,match="\065\065\068"};{index=2;match="\065"},{index=3,match="\069"}}};{input="\065\067\068\069";matches={{index=0;match="\065\067\068\069"},{index=1;match="\065\067\068"},{index=2,match="\067"};{index=3,match="\069"}}};{input="\042\042 \070\097\105\108\101\114\115"},{input="\065\068"}}},{source="\094\092\087\042\043\040\063\058\040\040\046\041\092\087\042\043\040\063\049\041\092\087\042\043\092\050\124\041\124\040\040\046\041\092\087\042\043\040\063\051\041\092\087\042\043\092\052\124\092\087\042\043\046\092\087\042\043\041\041\092\087\042\043\036";flags="\105",tests={{input="\042\042\042 \070\097\105\108\101\114\115"},{input="\084\104\101 \113\117\105\099\107 \098\114\111\119\110 \102\111\120"}}},{source="\094\040\040\046\041\040\063\049\041\092\050\124\046\041\036",tests={{input="\097",matches={{index=0;match="\097"},{index=1,match="\097"}}},{input="\114\104\117\098\097\114\098"},{input="\116\104\101 \113\117\105\099\107 \098\114\111\119\110 \102\111\120"}}};{source="\040\097\041\040\063\060\061\098\040\063\049\041\041",tests={{input="\098\097\122";matches={{index=0;match="\097"},{index=1;match="\097"}}},{input="\042\042 \070\097\105\108\101\114\115"},{input="\099\097\122"}}};{source="\040\063\060\061\098\040\063\049\041\041\040\097\041",tests={{input="\122\098\097\097\122";matches={{index=0,match="\097"};{index=1,match="\097"}}},{input="\042\042 \070\097\105\108\101\114\115"},{input="\097\097\097"}}},{source="\094\040\063\124\040\097\098\099\041\124\040\100\101\102\041\041\092\049";tests={{input="\097\098\099\097\098\099";matches={{index=0,match="\097\098\099\097\098\099"},{index=1,match="\097\098\099"}}};{input="\100\101\102\100\101\102";matches={{index=0;match="\100\101\102\100\101\102"};{index=1;match="\100\101\102"}}};{input="\042\042 \070\097\105\108\101\114\115"};{input="\097\098\099\100\101\102"},{input="\100\101\102\097\098\099"}}};{source="\094\040\063\124\040\097\098\099\041\124\040\100\101\102\041\041\040\063\049\041",tests={{input="\097\098\099\097\098\099";matches={{index=0,match="\097\098\099\097\098\099"},{index=1;match="\097\098\099"}}},{input="\100\101\102\097\098\099",matches={{index=0;match="\100\101\102\097\098\099"},{index=1;match="\100\101\102"}}};{input="\042\042 \070\097\105\108\101\114\115"};{input="\100\101\102\100\101\102"},{input="\097\098\099\100\101\102"}}},{source="\040\063\058\040\063\049\041\124\066\041\040\065\040\042\070\041\124\067\041",tests={{input="\065\066\067\068",matches={{index=0,match="\066\067"};{index=1;match="\067"}}},{input="\067\067\068";matches={{index=0;match="\067\067"},{index=1;match="\067"}}};{input="\042\042 \070\097\105\108\101\114\115"},{input="\067\065\068"}}},{source="\094\040\063\058\040\063\049\041\124\066\041\040\065\040\042\070\041\124\067\041",tests={{input="\067\067\068";matches={{index=0,match="\067\067"},{index=1;match="\067"}}},{input="\066\067\068";matches={{index=0;match="\066\067"};{index=1,match="\067"}}},{input="\042\042 \070\097\105\108\101\114\115"},{input="\065\066\067\068"};{input="\067\065\068"};{input="\066\065\068"}}},{source="\040\063\058\040\063\049\041\124\066\041\040\065\040\042\065\067\067\069\080\084\041\088\088\124\067\041\068",tests={{input="\066\065\068",matches={{index=0,match="\066\065"}}},{input="\066\067\068",matches={{index=0;match="\066\067\068"},{index=1,match="\067"}}};{input="\042\042 \070\097\105\108\101\114\115"}}},{source="\094\040\063\061\097\040\042\083\075\073\080\041\098\124\097\099\041";tests={{input="\042\042 \070\097\105\108\101\114\115"}}};{source="\094\040\063\061\097\040\042\080\082\085\078\069\041\098\041",tests={{input="\097\098",matches={{index=0,match=""}}};{input="\042\042 \070\097\105\108\101\114\115"}}};{source="\040\040\063\062\097\092\075\098\041\041",tests={{input="\097\098",matches={{index=1,match="\097\098"}}}}},{source="\040\097\092\075\098\041";tests={{input="\097\098",matches={{index=0,match="\098"},{index=1;match="\097\098"}}}}};{source="\094\097\092\075\099\122\124\097\099",tests={{input="\097\099";matches={{index=0;match="\097\099"}}}}},{source="\040\063\062\097\092\075\098\122\124\097\098\041";tests={{input="\097\098",matches={{index=0;match="\097\098"}}}}};{source="\094\040\063\058\097\041\043\043\040\092\119\041",tests={{input="\042\042 \070\097\105\108\101\114\115"},{input="\097\097\097\097"},{input="\089\090"}}};{source="\094\040\097\041\063\043\040\092\119\041";tests={{input="\097\097\097\097\088";matches={{index=0,match="\097\097"};{index=1,match="\097"},{index=2,match="\097"}}}}},{source="\094\040\063\058\097\041\063\043\040\092\119\041";tests={{input="\097\097\097\097\088";matches={{index=0,match="\097\097"};{index=1;match="\097"}}}}};{source="\094\040\097\041\123\050\044\125\043\040\092\119\041",tests={{input="\042\042 \070\097\105\108\101\114\115"};{input="\097\097\097"};{input="\089\090"}}};{source="\094\040\063\058\097\041\123\050\044\125\043\040\092\119\041";tests={{input="\042\042 \070\097\105\108\101\114\115"};{input="\097\097\097"};{input="\089\090"}}};{source="\040\097\041\043\043\040\063\049\041\098";tests={{input="\042\042 \070\097\105\108\101\114\115"},{input="\097\098"};{input="\097\097\098"}}};{source="\040\097\041\042\043\040\063\049\041\098";tests={{input="\042\042 \070\097\105\108\101\114\115"},{input="\097\098"},{input="\097\097\098"}}},{source="\040\065 \040\065\124\066\040\042\065\067\067\069\080\084\041\124\067\041 \068\041\040\069\041",flags="\120";tests={{input="\065\066",matches={{index=0,match="\065\066"}}}}},{source="\094\040\097\041\040\063\049\041\043\043\097\098";tests={{input="\097\097\097\097\098"}}},{source="\094\092\078\043",tests={{input="\097\098\099\n\100\101\102";matches={{index=0;match="\097\098\099"}}}}};{source="\094\092\078\123\049\044\125";tests={{input="\097\098\099\n\100\101\102";matches={{index=0;match="\097\098\099"}}}}};{source="\040\097\110\111\116\104\101\114\041\063\040\092\049\043\041\116\101\115\116",tests={{input="\104\101\108\108\111 \119\111\114\108\100 \116\101\115\116"}}};{source="\040\063\062\046\042\063\097\041\040\063\060\061\098\097\041",tests={{input="\097\098\097",matches={{index=0,match="\098\097"}}}}},{source="\040\063\058\046\042\063\097\041\040\063\060\061\098\097\041";tests={{input="\097\098\097";matches={{index=0,match="\097\098\097"}}}}};{source="\040\063\062\046\042\063\097\041\098";flags="\115",tests={{input="\097\097\098";matches={{index=0,match="\097\098"}}}}},{source="\040\063\062\046\042\063\097\041\098";tests={{input="\097\097\098",matches={{index=0,match="\097\098"}}}}};{source="\040\063\062\094\097\041\098";flags="\115";tests={{input="\097\097\098"}}},{source="\097\040\063\061\098\099\041\046\124\097\098\100",tests={{input="\097\098\100";matches={{index=0,match="\097\098\100"}}},{input="\097\098\099",matches={{index=0;match="\097\098"}}}}},{source="\040\063\033\097\092\075\098\041\097\099";tests={{input="\097\099",matches={{index=0,match="\097\099"}}}}},{source="\094\097\098\099\040\063\060\033\098\092\075\113\041\100",tests={{input="\097\098\099\100",matches={{index=0,match="\097\098\099\100"}}}}};{source="\094\092\100\042\092\119\123\052\125";tests={{input="\049\050\051\052";matches={{index=0;match="\049\050\051\052"}}};{input="\049\050\051"}}},{source="\094\091\094\098\093\042\092\119\123\052\125",tests={{input="\097\097\097\097",matches={{index=0;match="\097\097\097\097"}}},{input="\097\097\097"}}};{source="\094\091\094\098\093\042\092\119\123\052\125",flags="\105";tests={{input="\097\097\097\097",matches={{index=0;match="\097\097\097\097"}}};{input="\097\097\097"}}},{source="\094\097\042\092\119\123\052\125";tests={{input="\097\097\097\097";matches={{index=0,match="\097\097\097\097"}}};{input="\097\097\097"}}},{source="\094\097\042\092\119\123\052\125";flags="\105",tests={{input="\097\097\097\097",matches={{index=0;match="\097\097\097\097"}}};{input="\097\097\097"}}},{source="\094\040\092\100\043\041\092\115\043\073\078\092\115\043\083\079\065\092\115\043\040\092\083\043\041\092\115\043\040\092\083\043\041\092\115\042\092\040\092\115\042\036";tests={{input="\049 \073\078 \083\079\065 \110\111\110-\115\112\049 \110\111\110-\115\112\050\040",matches={{index=0,match="\049 \073\078 \083\079\065 \110\111\110-\115\112\049 \110\111\110-\115\112\050\040"};{index=1,match="\049"},{index=2;match="\110\111\110-\115\112\049"},{index=3,match="\110\111\110-\115\112\050"}}}}};{source="\094\065\092\120\090",tests={{input="\065\000\090";matches={{index=0,match="\065\000\090"}}}}},{source=" \094 \040\063\062 \097 \043 \041 \098 \036 ",flags="\120";tests={{input="\097\097\097\097\098",matches={{index=0;match="\097\097\097\097\098"}}}}};{source="\040\063\058\120\124\040\063\058\040\120\120\124\121\121\041\043\124\120\124\120\124\120\124\120\124\120\041\124\097\124\097\124\097\041\098\099",tests={{input="\097\099\098"}}},{source="\094\092\119\043\040\063\062\092\115\042\041\040\063\060\061\092\119\041",tests={{input="\116\101\115\116 \116\101\115\116",matches={{index=0;match="\116\101\115"}}}}};{source="\065\040\040\040\040\040\040\040\040\097\041\041\041\041\041\041\041\041\092\056\066",tests={{input="\065\097\097\066";matches={{index=0,match="\065\097\097\066"};{index=1,match="\097"};{index=2,match="\097"},{index=3,match="\097"};{index=4;match="\097"},{index=5,match="\097"},{index=6;match="\097"};{index=7;match="\097"},{index=8;match="\097"}}}}};{source="\065\040\040\040\040\040\040\040\040\040\097\041\041\041\041\041\041\041\041\041\092\057\066";tests={{input="\065\097\097\066";matches={{index=0;match="\065\097\097\066"},{index=1,match="\097"},{index=2,match="\097"},{index=3;match="\097"};{index=4,match="\097"},{index=5;match="\097"};{index=6,match="\097"};{index=7;match="\097"};{index=8;match="\097"},{index=9,match="\097"}}}}};{source="\065\091\092\056\092\057\093\066";tests={{input="\065\056\066",matches={{index=0,match="\065\056\066"}}};{input="\065\057\066",matches={{index=0;match="\065\057\066"}}}}};{source="\040\063\058\040\040\097\098\099\100\041\041\124\040\040\040\063\058\040\063\058\040\063\058\040\063\058\097\098\099\124\040\063\058\097\098\099\100\101\102\041\041\041\041\098\041\097\098\099\100\101\102\103\104\105\041\097\098\099\041\124\040\040\042\065\067\067\069\080\084\041\041\041",tests={{input="\049\050\051\052\097\098\099\100";matches={{index=0,match=""},{index=1,match="\060\117\110\115\101\116\062"},{index=2;match="\060\117\110\115\101\116\062"},{index=3;match="\060\117\110\115\101\116\062"},{index=4,match="\060\117\110\115\101\116\062"}}}}};{source="\040\092\050\124\097\041\040\092\049\041";tests={{input="\097\097\097";matches={{index=0,match="\097\097"},{index=1;match="\097"},{index=2,match="\097"}}}}}}
-- this file was generated by parsing data from pcre2 test program:
-- https://github.com/luvit/pcre2/blob/a677f5b51bac251082856d35a48a01670e2fd4a7/testdata/testoutput1
-- some cases were not properly parsed, so those were simply fixed by
-- hand for simplicity.

return {
	{
		source = [==[the quick brown fox]==],
		tests = {
			{
				input = "the quick brown fox",
				matches = {{ index = 0, match = "the quick brown fox" }},
			},
			{ input = "The quick brown FOX" },
			{
				input = "What do you know about the quick brown fox?",
				matches = {{ index = 0, match = "the quick brown fox" }},
			},
			{ input = "What do you know about THE QUICK BROWN FOX?" },
		},
	},
-- 	{
-- 		source = [==[The quick brown fox]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "the quick brown fox",
-- 				matches = {{ index = 0, match = "the quick brown fox" }},
-- 			},
-- 			{
-- 				input = "The quick brown FOX",
-- 				matches = {{ index = 0, match = "The quick brown FOX" }},
-- 			},
-- 			{
-- 				input = "What do you know about the quick brown fox?",
-- 				matches = {{ index = 0, match = "the quick brown fox" }},
-- 			},
-- 			{
-- 				input = "What do you know about THE QUICK BROWN FOX?",
-- 				matches = {{ index = 0, match = "THE QUICK BROWN FOX" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz]==],
-- 		tests = {
-- 			{
-- 				input = "abcd\t\n\r\f\a\0279;$\\?caxyz",
-- 				matches = {{ index = 0, match = "abcd\009\010\013\012\007\0279;$\\?caxyz" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz]==],
-- 		tests = {
-- 			{
-- 				input = "abxyzpqrrrabbxyyyypqAzz",
-- 				matches = {{ index = 0, match = "abxyzpqrrrabbxyyyypqAzz" }},
-- 			},
-- 			{
-- 				input = "abxyzpqrrrabbxyyyypqAzz",
-- 				matches = {{ index = 0, match = "abxyzpqrrrabbxyyyypqAzz" }},
-- 			},
-- 			{
-- 				input = "aabxyzpqrrrabbxyyyypqAzz",
-- 				matches = {{ index = 0, match = "aabxyzpqrrrabbxyyyypqAzz" }},
-- 			},
-- 			{
-- 				input = "aaabxyzpqrrrabbxyyyypqAzz",
-- 				matches = {{ index = 0, match = "aaabxyzpqrrrabbxyyyypqAzz" }},
-- 			},
-- 			{
-- 				input = "aaaabxyzpqrrrabbxyyyypqAzz",
-- 				matches = {{ index = 0, match = "aaaabxyzpqrrrabbxyyyypqAzz" }},
-- 			},
-- 			{
-- 				input = "abcxyzpqrrrabbxyyyypqAzz",
-- 				matches = {{ index = 0, match = "abcxyzpqrrrabbxyyyypqAzz" }},
-- 			},
-- 			{
-- 				input = "aabcxyzpqrrrabbxyyyypqAzz",
-- 				matches = {{ index = 0, match = "aabcxyzpqrrrabbxyyyypqAzz" }},
-- 			},
-- 			{
-- 				input = "aaabcxyzpqrrrabbxyyyypAzz",
-- 				matches = {{ index = 0, match = "aaabcxyzpqrrrabbxyyyypAzz" }},
-- 			},
-- 			{
-- 				input = "aaabcxyzpqrrrabbxyyyypqAzz",
-- 				matches = {{ index = 0, match = "aaabcxyzpqrrrabbxyyyypqAzz" }},
-- 			},
-- 			{
-- 				input = "aaabcxyzpqrrrabbxyyyypqqAzz",
-- 				matches = {{ index = 0, match = "aaabcxyzpqrrrabbxyyyypqqAzz" }},
-- 			},
-- 			{
-- 				input = "aaabcxyzpqrrrabbxyyyypqqqAzz",
-- 				matches = {{ index = 0, match = "aaabcxyzpqrrrabbxyyyypqqqAzz" }},
-- 			},
-- 			{
-- 				input = "aaabcxyzpqrrrabbxyyyypqqqqAzz",
-- 				matches = {{ index = 0, match = "aaabcxyzpqrrrabbxyyyypqqqqAzz" }},
-- 			},
-- 			{
-- 				input = "aaabcxyzpqrrrabbxyyyypqqqqqAzz",
-- 				matches = {{ index = 0, match = "aaabcxyzpqrrrabbxyyyypqqqqqAzz" }},
-- 			},
-- 			{
-- 				input = "aaabcxyzpqrrrabbxyyyypqqqqqqAzz",
-- 				matches = {{ index = 0, match = "aaabcxyzpqrrrabbxyyyypqqqqqqAzz" }},
-- 			},
-- 			{
-- 				input = "aaaabcxyzpqrrrabbxyyyypqAzz",
-- 				matches = {{ index = 0, match = "aaaabcxyzpqrrrabbxyyyypqAzz" }},
-- 			},
-- 			{
-- 				input = "abxyzzpqrrrabbxyyyypqAzz",
-- 				matches = {{ index = 0, match = "abxyzzpqrrrabbxyyyypqAzz" }},
-- 			},
-- 			{
-- 				input = "aabxyzzzpqrrrabbxyyyypqAzz",
-- 				matches = {{ index = 0, match = "aabxyzzzpqrrrabbxyyyypqAzz" }},
-- 			},
-- 			{
-- 				input = "aaabxyzzzzpqrrrabbxyyyypqAzz",
-- 				matches = {{ index = 0, match = "aaabxyzzzzpqrrrabbxyyyypqAzz" }},
-- 			},
-- 			{
-- 				input = "aaaabxyzzzzpqrrrabbxyyyypqAzz",
-- 				matches = {{ index = 0, match = "aaaabxyzzzzpqrrrabbxyyyypqAzz" }},
-- 			},
-- 			{
-- 				input = "abcxyzzpqrrrabbxyyyypqAzz",
-- 				matches = {{ index = 0, match = "abcxyzzpqrrrabbxyyyypqAzz" }},
-- 			},
-- 			{
-- 				input = "aabcxyzzzpqrrrabbxyyyypqAzz",
-- 				matches = {{ index = 0, match = "aabcxyzzzpqrrrabbxyyyypqAzz" }},
-- 			},
-- 			{
-- 				input = "aaabcxyzzzzpqrrrabbxyyyypqAzz",
-- 				matches = {{ index = 0, match = "aaabcxyzzzzpqrrrabbxyyyypqAzz" }},
-- 			},
-- 			{
-- 				input = "aaaabcxyzzzzpqrrrabbxyyyypqAzz",
-- 				matches = {{ index = 0, match = "aaaabcxyzzzzpqrrrabbxyyyypqAzz" }},
-- 			},
-- 			{
-- 				input = "aaaabcxyzzzzpqrrrabbbxyyyypqAzz",
-- 				matches = {{ index = 0, match = "aaaabcxyzzzzpqrrrabbbxyyyypqAzz" }},
-- 			},
-- 			{
-- 				input = "aaaabcxyzzzzpqrrrabbbxyyyyypqAzz",
-- 				matches = {{ index = 0, match = "aaaabcxyzzzzpqrrrabbbxyyyyypqAzz" }},
-- 			},
-- 			{
-- 				input = "aaabcxyzpqrrrabbxyyyypABzz",
-- 				matches = {{ index = 0, match = "aaabcxyzpqrrrabbxyyyypABzz" }},
-- 			},
-- 			{
-- 				input = "aaabcxyzpqrrrabbxyyyypABBzz",
-- 				matches = {{ index = 0, match = "aaabcxyzpqrrrabbxyyyypABBzz" }},
-- 			},
-- 			{
-- 				input = ">>>aaabxyzpqrrrabbxyyyypqAzz",
-- 				matches = {{ index = 0, match = "aaabxyzpqrrrabbxyyyypqAzz" }},
-- 			},
-- 			{
-- 				input = ">aaaabxyzpqrrrabbxyyyypqAzz",
-- 				matches = {{ index = 0, match = "aaaabxyzpqrrrabbxyyyypqAzz" }},
-- 			},
-- 			{
-- 				input = ">>>>abcxyzpqrrrabbxyyyypqAzz",
-- 				matches = {{ index = 0, match = "abcxyzpqrrrabbxyyyypqAzz" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "abxyzpqrrabbxyyyypqAzz" },
-- 			{ input = "abxyzpqrrrrabbxyyyypqAzz" },
-- 			{ input = "abxyzpqrrrabxyyyypqAzz" },
-- 			{ input = "aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz" },
-- 			{ input = "aaaabcxyzzzzpqrrrabbbxyyypqAzz" },
-- 			{ input = "aaabcxyzpqrrrabbxyyyypqqqqqqqAzz" },
-- 		},
-- 	},
	{
		source = [==[^(abc){1,2}zz]==],
		tests = {
			{
				input = "abczz",
				matches = {
					{ index = 0, match = "abczz" },
					{ index = 1, match = "abc" },
				}
			},
			{
				input = "abcabczz",
				matches = {
					{ index = 0, match = "abcabczz" },
					{ index = 1, match = "abc" },
				}
			},
			{ input = "*** Failers" },
			{ input = "zz" },
			{ input = "abcabcabczz" },
			{ input = ">>abczz" },
		},
	},
	{
		source = [==[^(b+?|a){1,2}?c]==],
		tests = {
-- 			{
-- 				input = "bc",
-- 				matches = {
-- 					{ index = 0, match = "bc" },
-- 					{ index = 1, match = "b" },
-- 				}
-- 			},
			{
				input = "bbc",
				matches = {
					{ index = 0, match = "bbc" },
					{ index = 1, match = "b" },
				}
			},
			{
				input = "bbbc",
				matches = {
					{ index = 0, match = "bbbc" },
					{ index = 1, match = "bb" },
				}
			},
			{
				input = "bac",
				matches = {
					{ index = 0, match = "bac" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "bbac",
				matches = {
					{ index = 0, match = "bbac" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "aac",
				matches = {
					{ index = 0, match = "aac" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "abbbbbbbbbbbc",
				matches = {
					{ index = 0, match = "abbbbbbbbbbbc" },
					{ index = 1, match = "bbbbbbbbbbb" },
				}
			},
			{
				input = "bbbbbbbbbbbac",
				matches = {
					{ index = 0, match = "bbbbbbbbbbbac" },
					{ index = 1, match = "a" },
				}
			},
			{ input = "*** Failers" },
			{ input = "aaac" },
			{ input = "abbbbbbbbbbbac" },
		},
	},
	{
		source = [==[^(b+|a){1,2}c]==],
		tests = {
			{
				input = "bc",
				matches = {
					{ index = 0, match = "bc" },
					{ index = 1, match = "b" },
				}
			},
			{
				input = "bbc",
				matches = {
					{ index = 0, match = "bbc" },
					{ index = 1, match = "bb" },
				}
			},
			{
				input = "bbbc",
				matches = {
					{ index = 0, match = "bbbc" },
					{ index = 1, match = "bbb" },
				}
			},
			{
				input = "bac",
				matches = {
					{ index = 0, match = "bac" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "bbac",
				matches = {
					{ index = 0, match = "bbac" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "aac",
				matches = {
					{ index = 0, match = "aac" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "abbbbbbbbbbbc",
				matches = {
					{ index = 0, match = "abbbbbbbbbbbc" },
					{ index = 1, match = "bbbbbbbbbbb" },
				}
			},
			{
				input = "bbbbbbbbbbbac",
				matches = {
					{ index = 0, match = "bbbbbbbbbbbac" },
					{ index = 1, match = "a" },
				}
			},
			{ input = "*** Failers" },
			{ input = "aaac" },
			{ input = "abbbbbbbbbbbac" },
		},
	},
	{
		source = [==[^(b+|a){1,2}?bc]==],
		tests = {
			{
				input = "bbc",
				matches = {
					{ index = 0, match = "bbc" },
					-- { index = 1, match = "b" },
				}
			},
		},
	},
	{
		source = [==[^(b*|ba){1,2}?bc]==],
		tests = {
			{
				input = "babc",
				matches = {
					{ index = 0, match = "babc" },
					{ index = 1, match = "ba" },
				}
			},
			{
				input = "bbabc",
				matches = {
					{ index = 0, match = "bbabc" },
					{ index = 1, match = "ba" },
				}
			},
			{
				input = "bababc",
				matches = {
					{ index = 0, match = "bababc" },
					{ index = 1, match = "ba" },
				}
			},
			{ input = "*** Failers" },
			{ input = "bababbc" },
			{ input = "babababc" },
		},
	},
	{
		source = [==[^(ba|b*){1,2}?bc]==],
		tests = {
			{
				input = "babc",
				matches = {
					{ index = 0, match = "babc" },
					-- { index = 1, match = "ba" },
				}
			},
			{
				input = "bbabc",
				matches = {
					{ index = 0, match = "bbabc" },
					{ index = 1, match = "ba" },
				}
			},
			{
				input = "bababc",
				matches = {
					{ index = 0, match = "bababc" },
					{ index = 1, match = "ba" },
				}
			},
			{ input = "*** Failers" },
			{ input = "bababbc" },
			{ input = "babababc" },
		},
	},
-- 	{
-- 		source = [==[^\ca\cA\c[;\c:]==],
-- 		tests = {
-- 			{
-- 				input = "\001\001\027;z",
-- 				matches = {{ index = 0, match = "\001\001\027;z" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[^[ab\]cde]]==],
		tests = {
			{
				input = "athing",
				matches = {{ index = 0, match = "a" }},
			},
			{
				input = "bthing",
				matches = {{ index = 0, match = "b" }},
			},
			{
				input = "]thing",
				matches = {{ index = 0, match = "]" }},
			},
			{
				input = "cthing",
				matches = {{ index = 0, match = "c" }},
			},
			{
				input = "dthing",
				matches = {{ index = 0, match = "d" }},
			},
			{
				input = "ething",
				matches = {{ index = 0, match = "e" }},
			},
			{ input = "*** Failers" },
			{ input = "fthing" },
			{ input = "[thing" },
			{ input = "\\thing" },
		},
	},
	{
		source = [==[^[]cde]]==],
		tests = {
			{
				input = "]thing",
				matches = {{ index = 0, match = "]" }},
			},
			{
				input = "cthing",
				matches = {{ index = 0, match = "c" }},
			},
			{
				input = "dthing",
				matches = {{ index = 0, match = "d" }},
			},
			{
				input = "ething",
				matches = {{ index = 0, match = "e" }},
			},
			{ input = "*** Failers" },
			{ input = "athing" },
			{ input = "fthing" },
		},
	},
	{
		source = [==[^[^ab\]cde]]==],
		tests = {
			{
				input = "fthing",
				matches = {{ index = 0, match = "f" }},
			},
			{
				input = "[thing",
				matches = {{ index = 0, match = "[" }},
			},
			{
				input = "\\thing",
				matches = {{ index = 0, match = "\\" }},
			},
			{
				input = "*** Failers",
				matches = {{ index = 0, match = "*" }},
			},
			{ input = "athing" },
			{ input = "bthing" },
			{ input = "]thing" },
			{ input = "cthing" },
			{ input = "dthing" },
			{ input = "ething" },
		},
	},
	{
		source = [==[^[^]cde]]==],
		tests = {
			{
				input = "athing",
				matches = {{ index = 0, match = "a" }},
			},
			{
				input = "fthing",
				matches = {{ index = 0, match = "f" }},
			},
			{
				input = "*** Failers",
				matches = {{ index = 0, match = "*" }},
			},
			{ input = "]thing" },
			{ input = "cthing" },
			{ input = "dthing" },
			{ input = "ething" },
		},
	},
-- 	{
-- 		source = [==[^\�]==],
-- 		tests = {
-- 			{
-- 				input = "�",
-- 				matches = {{ index = 0, match = "\129" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^�]==],
-- 		tests = {
-- 			{
-- 				input = "�",
-- 				matches = {{ index = 0, match = "\255" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[^[0-9]+$]==],
		tests = {
			{
				input = "0",
				matches = {{ index = 0, match = "0" }},
			},
			{
				input = "1",
				matches = {{ index = 0, match = "1" }},
			},
			{
				input = "2",
				matches = {{ index = 0, match = "2" }},
			},
			{
				input = "3",
				matches = {{ index = 0, match = "3" }},
			},
			{
				input = "4",
				matches = {{ index = 0, match = "4" }},
			},
			{
				input = "5",
				matches = {{ index = 0, match = "5" }},
			},
			{
				input = "6",
				matches = {{ index = 0, match = "6" }},
			},
			{
				input = "7",
				matches = {{ index = 0, match = "7" }},
			},
			{
				input = "8",
				matches = {{ index = 0, match = "8" }},
			},
			{
				input = "9",
				matches = {{ index = 0, match = "9" }},
			},
			{
				input = "10",
				matches = {{ index = 0, match = "10" }},
			},
			{
				input = "100",
				matches = {{ index = 0, match = "100" }},
			},
			{ input = "*** Failers" },
			{ input = "abc" },
		},
	},
	{
		source = [==[^.*nter]==],
		tests = {
			{
				input = "enter",
				matches = {{ index = 0, match = "enter" }},
			},
			{
				input = "inter",
				matches = {{ index = 0, match = "inter" }},
			},
			{
				input = "uponter",
				matches = {{ index = 0, match = "uponter" }},
			},
		},
	},
	{
		source = [==[^xxx[0-9]+$]==],
		tests = {
			{
				input = "xxx0",
				matches = {{ index = 0, match = "xxx0" }},
			},
			{
				input = "xxx1234",
				matches = {{ index = 0, match = "xxx1234" }},
			},
			{ input = "*** Failers" },
			{ input = "xxx" },
		},
	},
	{
		source = [==[^.+[0-9][0-9][0-9]$]==],
		tests = {
			{
				input = "x123",
				matches = {{ index = 0, match = "x123" }},
			},
			{
				input = "xx123",
				matches = {{ index = 0, match = "xx123" }},
			},
			{
				input = "123456",
				matches = {{ index = 0, match = "123456" }},
			},
			{ input = "*** Failers" },
			{ input = "123" },
			{
				input = "x1234",
				matches = {{ index = 0, match = "x1234" }},
			},
		},
	},
	{
		source = [==[^.+?[0-9][0-9][0-9]$]==],
		tests = {
			{
				input = "x123",
				matches = {{ index = 0, match = "x123" }},
			},
			{
				input = "xx123",
				matches = {{ index = 0, match = "xx123" }},
			},
			{
				input = "123456",
				matches = {{ index = 0, match = "123456" }},
			},
			{ input = "*** Failers" },
			{ input = "123" },
			{
				input = "x1234",
				matches = {{ index = 0, match = "x1234" }},
			},
		},
	},
	{
		source = [==[^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$]==],
		tests = {
			{
				input = "abc!pqr=apquxz.ixr.zzz.ac.uk",
				matches = {
					{ index = 0, match = "abc!pqr=apquxz.ixr.zzz.ac.uk" },
					{ index = 1, match = "abc" },
					{ index = 2, match = "pqr" },
				}
			},
			{ input = "*** Failers" },
			{ input = "!pqr=apquxz.ixr.zzz.ac.uk" },
			{ input = "abc!=apquxz.ixr.zzz.ac.uk" },
			{ input = "abc!pqr=apquxz:ixr.zzz.ac.uk" },
			{ input = "abc!pqr=apquxz.ixr.zzz.ac.ukk" },
		},
	},
	{
		source = [==[:]==],
		tests = {
			{
				input = "Well, we need a colon: somewhere",
				matches = {{ index = 0, match = ":" }},
			},
			{ input = "*** Fail if we don't" },
		},
	},
	{
		source = [==[([\da-f:]+)$]==],
		flags = "i",
		tests = {
			{
				input = "0abc",
				matches = {
					{ index = 0, match = "0abc" },
					{ index = 1, match = "0abc" },
				}
			},
			{
				input = "abc",
				matches = {
					{ index = 0, match = "abc" },
					{ index = 1, match = "abc" },
				}
			},
			{
				input = "fed",
				matches = {
					{ index = 0, match = "fed" },
					{ index = 1, match = "fed" },
				}
			},
			-- {
			-- 	input = "E",
			-- 	matches = {
			-- 		{ index = 0, match = "E" },
			-- 		{ index = 1, match = "E" },
			-- 	}
			-- },
			{
				input = "::",
				matches = {
					{ index = 0, match = "::" },
					{ index = 1, match = "::" },
				}
			},
			-- {
			-- 	input = "5f03:12C0::932e",
			-- 	matches = {
			-- 		{ index = 0, match = "5f03:12C0::932e" },
			-- 		{ index = 1, match = "5f03:12C0::932e" },
			-- 	}
			-- },
			{
				input = "fed def",
				matches = {
					{ index = 0, match = "def" },
					{ index = 1, match = "def" },
				}
			},
			{
				input = "Any old stuff",
				matches = {
					{ index = 0, match = "ff" },
					{ index = 1, match = "ff" },
				}
			},
			{ input = "*** Failers" },
			{ input = "0zzz" },
			{ input = "gzzz" },
			{ input = "fed\032" },
			{ input = "Any old rubbish" },
		},
	},
	{
		source = [==[^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$]==],
		tests = {
			{
				input = ".1.2.3",
				matches = {
					{ index = 0, match = ".1.2.3" },
					{ index = 1, match = "1" },
					{ index = 2, match = "2" },
					{ index = 3, match = "3" },
				}
			},
			{
				input = "A.12.123.0",
				matches = {
					{ index = 0, match = "A.12.123.0" },
					{ index = 1, match = "12" },
					{ index = 2, match = "123" },
					{ index = 3, match = "0" },
				}
			},
			{ input = "*** Failers" },
			{ input = ".1.2.3333" },
			{ input = "1.2.3" },
			{ input = "1234.2.3" },
		},
	},
	{
		source = [==[^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$]==],
		tests = {
			{
				input = "1 IN SOA non-sp1 non-sp2(",
				matches = {
					{ index = 0, match = "1 IN SOA non-sp1 non-sp2(" },
					{ index = 1, match = "1" },
					{ index = 2, match = "non-sp1" },
					{ index = 3, match = "non-sp2" },
				}
			},
			{
				input = "1    IN    SOA    non-sp1    non-sp2   (",
				matches = {
					{ index = 0, match = "1    IN    SOA    non-sp1    non-sp2   (" },
					{ index = 1, match = "1" },
					{ index = 2, match = "non-sp1" },
					{ index = 3, match = "non-sp2" },
				}
			},
			{ input = "*** Failers" },
			{ input = "1IN SOA non-sp1 non-sp2(" },
		},
	},
	{
		source = [==[^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$]==],
		tests = {
			{
				input = "a.",
				matches = {{ index = 0, match = "a." }},
			},
			{
				input = "Z.",
				matches = {{ index = 0, match = "Z." }},
			},
			{
				input = "2.",
				matches = {{ index = 0, match = "2." }},
			},
			{
				input = "ab-c.pq-r.",
				matches = {
					{ index = 0, match = "ab-c.pq-r." },
					{ index = 1, match = ".pq-r" },
				}
			},
			{
				input = "sxk.zzz.ac.uk.",
				matches = {
					{ index = 0, match = "sxk.zzz.ac.uk." },
					{ index = 1, match = ".uk" },
				}
			},
			{
				input = "x-.y-.",
				matches = {
					{ index = 0, match = "x-.y-." },
					{ index = 1, match = ".y-" },
				}
			},
			{ input = "*** Failers" },
			{ input = "-abc.peq." },
		},
	},
	{
		source = [==[^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$]==],
		tests = {
			{
				input = "*.a",
				matches = {{ index = 0, match = "*.a" }},
			},
			{
				input = "*.b0-a",
				matches = {
					{ index = 0, match = "*.b0-a" },
					{ index = 1, match = "0-a" },
				}
			},
			{
				input = "*.c3-b.c",
				matches = {
					{ index = 0, match = "*.c3-b.c" },
					{ index = 1, match = "3-b" },
					{ index = 2, match = ".c" },
				}
			},
			{
				input = "*.c-a.b-c",
				matches = {
					{ index = 0, match = "*.c-a.b-c" },
					{ index = 1, match = "-a" },
					{ index = 2, match = ".b-c" },
					{ index = 3, match = "-c" },
				}
			},
			{ input = "*** Failers" },
			{ input = "*.0" },
			{ input = "*.a-" },
			{ input = "*.a-b.c-" },
			{ input = "*.c-a.0-c" },
		},
	},
	{
		source = [==[^(?=ab(de))(abd)(e)]==],
		tests = {
			{
				input = "abde",
				matches = {
					{ index = 0, match = "abde" },
					-- { index = 1, match = "de" },
					{ index = 2, match = "abd" },
					{ index = 3, match = "e" },
				}
			},
		},
	},
	{
		source = [==[^(?!(ab)de|x)(abd)(f)]==],
		tests = {
			{
				input = "abdf",
				matches = {
					{ index = 0, match = "abdf" },
					{ index = 1, match = "<unset>" },
					{ index = 2, match = "abd" },
					{ index = 3, match = "f" },
				}
			},
		},
	},
	{
		source = [==[^(?=(ab(cd)))(ab)]==],
		tests = {
			{
				input = "abcd",
				matches = {
					{ index = 0, match = "ab" },
					-- { index = 1, match = "abcd" },
					-- { index = 2, match = "cd" },
					{ index = 3, match = "ab" },
				}
			},
		},
	},
	{
		source = [==[^[\da-f](\.[\da-f])*$]==],
		flags = "i",
		tests = {
			{
				input = "a.b.c.d",
				matches = {
					{ index = 0, match = "a.b.c.d" },
					{ index = 1, match = ".d" },
				}
			},
			-- {
			-- 	input = "A.B.C.D",
			-- 	matches = {
			-- 		{ index = 0, match = "A.B.C.D" },
			-- 		{ index = 1, match = ".D" },
			-- 	}
			-- },
			-- {
			-- 	input = "a.b.c.1.2.3.C",
			-- 	matches = {
			-- 		{ index = 0, match = "a.b.c.1.2.3.C" },
			-- 		{ index = 1, match = ".C" },
			-- 	}
			-- },
		},
	},
	{
		source = [==[^\".*\"\s*(;.*)?$]==],
		tests = {
			-- {
			-- 	input = "\\\"1234\\\"",
			-- 	matches = {{ index = 0, match = "\"1234\"" }},
			-- },
			-- {
			-- 	input = "\\\"abcd\\\" ;",
			-- 	matches = {
			-- 		{ index = 0, match = "\"abcd\" ;" },
			-- 		{ index = 1, match = ";" },
			-- 	}
			-- },
			-- {
			-- 	input = "\\\"\\\" ; rhubarb",
			-- 	matches = {
			-- 		{ index = 0, match = "\"\" ; rhubarb" },
			-- 		{ index = 1, match = "; rhubarb" },
			-- 	}
			-- },
			{ input = "*** Failers" },
			{ input = "\\\"1234\\\" : things" },
		},
	},
	{
		source = [==[^$]==],
		tests = {
			-- {
			-- 	input = "\\",
			-- 	matches = {{ index = 0, match = "" }},
			-- },
			{ input = "*** Failers" },
		},
	},
	{
		source = [==[   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)]==],
		flags = "x",
		tests = {
			{
				input = "ab c",
				matches = {{ index = 0, match = "ab c" }},
			},
			{ input = "*** Failers" },
			{ input = "abc" },
			{ input = "ab cde" },
		},
	},
-- 	{
-- 		source = [==[(?x)   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)]==],
-- 		tests = {
-- 			{
-- 				input = "ab c",
-- 				matches = {{ index = 0, match = "ab c" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "abc" },
-- 			{ input = "ab cde" },
-- 		},
-- 	},
	{
		source = [==[^   a\ b[c ]d       $]==],
		flags = "x",
		tests = {
			{
				input = "a bcd",
				matches = {{ index = 0, match = "a bcd" }},
			},
			{
				input = "a b d",
				matches = {{ index = 0, match = "a b d" }},
			},
			{ input = "*** Failers" },
			{ input = "abcd" },
			{ input = "ab d" },
		},
	},
	{
		source = [==[^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$]==],
		tests = {
			{
				input = "abcdefhijklm",
				matches = {
					{ index = 0, match = "abcdefhijklm" },
					{ index = 1, match = "abc" },
					{ index = 2, match = "bc" },
					{ index = 3, match = "c" },
					{ index = 4, match = "def" },
					{ index = 5, match = "ef" },
					{ index = 6, match = "f" },
					{ index = 7, match = "hij" },
					{ index = 8, match = "ij" },
					{ index = 9, match = "j" },
					{ index = 10, match = "klm" },
					{ index = 11, match = "lm" },
					{ index = 12, match = "m" },
				}
			},
		},
	},
	{
		source = [==[^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$]==],
		tests = {
			{
				input = "abcdefhijklm",
				matches = {
					{ index = 0, match = "abcdefhijklm" },
					{ index = 1, match = "bc" },
					{ index = 2, match = "c" },
					{ index = 3, match = "ef" },
					{ index = 4, match = "f" },
					{ index = 5, match = "ij" },
					{ index = 6, match = "j" },
					{ index = 7, match = "lm" },
					{ index = 8, match = "m" },
				}
			},
		},
	},
-- 	{
-- 		source = [==[^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]]==],
-- 		tests = {
-- 			{
-- 				input = "a+ Z0+\008\n\029\018",
-- 				matches = {{ index = 0, match = "a+ Z0+\008\010\029\018" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^[.^$|()*+?{,}]+]==],
-- 		tests = {
-- 			{
-- 				input = ".^$(*+)|{?,?}",
-- 				matches = {{ index = 0, match = ".^$(*+)|{?,?}" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[^a*\w]==],
		tests = {
			{
				input = "z",
				matches = {{ index = 0, match = "z" }},
			},
			{
				input = "az",
				matches = {{ index = 0, match = "az" }},
			},
			{
				input = "aaaz",
				matches = {{ index = 0, match = "aaaz" }},
			},
			{
				input = "a",
				matches = {{ index = 0, match = "a" }},
			},
			{
				input = "aa",
				matches = {{ index = 0, match = "aa" }},
			},
			{
				input = "aaaa",
				matches = {{ index = 0, match = "aaaa" }},
			},
			{
				input = "a+",
				matches = {{ index = 0, match = "a" }},
			},
			{
				input = "aa+",
				matches = {{ index = 0, match = "aa" }},
			},
		},
	},
	{
		source = [==[^a*?\w]==],
		tests = {
			{
				input = "z",
				matches = {{ index = 0, match = "z" }},
			},
			{
				input = "az",
				matches = {{ index = 0, match = "a" }},
			},
			{
				input = "aaaz",
				matches = {{ index = 0, match = "a" }},
			},
			{
				input = "a",
				matches = {{ index = 0, match = "a" }},
			},
			{
				input = "aa",
				matches = {{ index = 0, match = "a" }},
			},
			{
				input = "aaaa",
				matches = {{ index = 0, match = "a" }},
			},
			{
				input = "a+",
				matches = {{ index = 0, match = "a" }},
			},
			{
				input = "aa+",
				matches = {{ index = 0, match = "a" }},
			},
		},
	},
	{
		source = [==[^a+\w]==],
		tests = {
			{
				input = "az",
				matches = {{ index = 0, match = "az" }},
			},
			{
				input = "aaaz",
				matches = {{ index = 0, match = "aaaz" }},
			},
			{
				input = "aa",
				matches = {{ index = 0, match = "aa" }},
			},
			{
				input = "aaaa",
				matches = {{ index = 0, match = "aaaa" }},
			},
			{
				input = "aa+",
				matches = {{ index = 0, match = "aa" }},
			},
		},
	},
	{
		source = [==[^a+?\w]==],
		tests = {
			{
				input = "az",
				matches = {{ index = 0, match = "az" }},
			},
			{
				input = "aaaz",
				matches = {{ index = 0, match = "aa" }},
			},
			{
				input = "aa",
				matches = {{ index = 0, match = "aa" }},
			},
			{
				input = "aaaa",
				matches = {{ index = 0, match = "aa" }},
			},
			{
				input = "aa+",
				matches = {{ index = 0, match = "aa" }},
			},
		},
	},
	{
		source = [==[^\d{8}\w{2,}]==],
		tests = {
			{
				input = "1234567890",
				matches = {{ index = 0, match = "1234567890" }},
			},
			{
				input = "12345678ab",
				matches = {{ index = 0, match = "12345678ab" }},
			},
			{
				input = "12345678__",
				matches = {{ index = 0, match = "12345678__" }},
			},
			{ input = "*** Failers" },
			{ input = "1234567" },
		},
	},
	{
		source = [==[^[aeiou\d]{4,5}$]==],
		tests = {
			{
				input = "uoie",
				matches = {{ index = 0, match = "uoie" }},
			},
			{
				input = "1234",
				matches = {{ index = 0, match = "1234" }},
			},
			{
				input = "12345",
				matches = {{ index = 0, match = "12345" }},
			},
			{
				input = "aaaaa",
				matches = {{ index = 0, match = "aaaaa" }},
			},
			{ input = "*** Failers" },
			{ input = "123456" },
		},
	},
	{
		source = [==[^[aeiou\d]{4,5}?]==],
		tests = {
			{
				input = "uoie",
				matches = {{ index = 0, match = "uoie" }},
			},
			{
				input = "1234",
				matches = {{ index = 0, match = "1234" }},
			},
			{
				input = "12345",
				matches = {{ index = 0, match = "1234" }},
			},
			{
				input = "aaaaa",
				matches = {{ index = 0, match = "aaaa" }},
			},
			{
				input = "123456",
				matches = {{ index = 0, match = "1234" }},
			},
		},
	},
	{
		source = [==[\A(abc|def)=(\1){2,3}\Z]==],
		tests = {
			-- {
			-- 	input = "abc=abcabc",
			-- 	matches = {
			-- 		{ index = 0, match = "abc=abcabc" },
			-- 		{ index = 1, match = "abc" },
			-- 		{ index = 2, match = "abc" },
			-- 	}
			-- },
			-- {
			-- 	input = "def=defdefdef",
			-- 	matches = {
			-- 		{ index = 0, match = "def=defdefdef" },
			-- 		{ index = 1, match = "def" },
			-- 		{ index = 2, match = "def" },
			-- 	}
			-- },
			{ input = "*** Failers" },
			{ input = "abc=defdef" },
		},
	},
	{
		source = [==[^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$]==],
		tests = {
			{
				input = "abcdefghijkcda2",
				matches = {
					{ index = 0, match = "abcdefghijkcda2" },
					{ index = 1, match = "a" },
					{ index = 2, match = "b" },
					{ index = 3, match = "c" },
					{ index = 4, match = "d" },
					{ index = 5, match = "e" },
					{ index = 6, match = "f" },
					{ index = 7, match = "g" },
					{ index = 8, match = "h" },
					{ index = 9, match = "i" },
					{ index = 10, match = "j" },
					{ index = 11, match = "k" },
					{ index = 12, match = "cd" },
				}
			},
			{
				input = "abcdefghijkkkkcda2",
				matches = {
					{ index = 0, match = "abcdefghijkkkkcda2" },
					{ index = 1, match = "a" },
					{ index = 2, match = "b" },
					{ index = 3, match = "c" },
					{ index = 4, match = "d" },
					{ index = 5, match = "e" },
					{ index = 6, match = "f" },
					{ index = 7, match = "g" },
					{ index = 8, match = "h" },
					{ index = 9, match = "i" },
					{ index = 10, match = "j" },
					{ index = 11, match = "k" },
					{ index = 12, match = "cd" },
				}
			},
		},
	},
	{
		source = [==[(cat(a(ract|tonic)|erpillar)) \1()2(3)]==],
		tests = {
			{
				input = "cataract cataract23",
				matches = {
					{ index = 0, match = "cataract cataract23" },
					{ index = 1, match = "cataract" },
					{ index = 2, match = "aract" },
					{ index = 3, match = "ract" },
					{ index = 4, match = "" },
					{ index = 5, match = "3" },
				}
			},
			{
				input = "catatonic catatonic23",
				matches = {
					{ index = 0, match = "catatonic catatonic23" },
					{ index = 1, match = "catatonic" },
					{ index = 2, match = "atonic" },
					{ index = 3, match = "tonic" },
					{ index = 4, match = "" },
					{ index = 5, match = "3" },
				}
			},
			{
				input = "caterpillar caterpillar23",
				matches = {
					{ index = 0, match = "caterpillar caterpillar23" },
					{ index = 1, match = "caterpillar" },
					{ index = 2, match = "erpillar" },
					{ index = 3, match = "<unset>" },
					{ index = 4, match = "" },
					{ index = 5, match = "3" },
				}
			},
		},
	},
	{
		source = [==[^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]]==],
		tests = {
			{
				input = "From abcd  Mon Sep 01 12:33:02 1997",
				matches = {
					{ index = 0, match = "From abcd  Mon Sep 01 12:33" },
					{ index = 1, match = "abcd" },
				}
			},
		},
	},
	{
		source = [==[^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d]==],
		tests = {
			{
				input = "From abcd  Mon Sep 01 12:33:02 1997",
				matches = {
					{ index = 0, match = "From abcd  Mon Sep 01 12:33" },
					-- { index = 1, match = "Sep" },
				}
			},
			{
				input = "From abcd  Mon Sep  1 12:33:02 1997",
				matches = {
					{ index = 0, match = "From abcd  Mon Sep  1 12:33" },
					-- { index = 1, match = "Sep" },
				}
			},
			{ input = "*** Failers" },
			{ input = "From abcd  Sep 01 12:33:02 1997" },
		},
	},
	{
		source = [==[^12.34]==],
		flags = "s",
		tests = {
			-- {
			-- 	input = "12\n34",
			-- 	matches = {{ index = 0, match = "12\01034" }},
			-- },
			{
				input = "12\r34",
				matches = {{ index = 0, match = "12\01334" }},
			},
		},
	},
	{
		source = [==[\w+(?=\t)]==],
		tests = {
			{
				input = "the quick brown\t fox",
				matches = {{ index = 0, match = "brown" }},
			},
		},
	},
	{
		source = [==[foo(?!bar)(.*)]==],
		tests = {
			{
				input = "foobar is foolish see?",
				matches = {
					{ index = 0, match = "foolish see?" },
					{ index = 1, match = "lish see?" },
				}
			},
		},
	},
	{
		source = [==[(?:(?!foo)...|^.{0,2})bar(.*)]==],
		tests = {
			{
				input = "foobar crowbar etc",
				matches = {
					{ index = 0, match = "rowbar etc" },
					{ index = 1, match = " etc" },
				}
			},
			{
				input = "barrel",
				matches = {
					{ index = 0, match = "barrel" },
					{ index = 1, match = "rel" },
				}
			},
			{
				input = "2barrel",
				matches = {
					{ index = 0, match = "2barrel" },
					{ index = 1, match = "rel" },
				}
			},
			{
				input = "A barrel",
				matches = {
					{ index = 0, match = "A barrel" },
					{ index = 1, match = "rel" },
				}
			},
		},
	},
	{
		source = [==[^(\D*)(?=\d)(?!123)]==],
		tests = {
			{
				input = "abc456",
				matches = {
					{ index = 0, match = "abc" },
					{ index = 1, match = "abc" },
				}
			},
			{ input = "*** Failers" },
			{ input = "abc123" },
		},
	},
	{
		source = [==[^1234(?# test newlines
  inside)]==],
		tests = {
			{
				input = "1234",
				matches = {{ index = 0, match = "1234" }},
			},
		},
	},
	{
		source = [==[^1234 #comment in extended re
  ]==],
		flags = "x",
		tests = {
			{
				input = "1234",
				matches = {{ index = 0, match = "1234" }},
			},
		},
	},
	{
		source = [==[#rhubarb
  abcd]==],
		flags = "x",
		tests = {
			{
				input = "abcd",
				matches = {{ index = 0, match = "abcd" }},
			},
		},
	},
	{
		source = [==[^abcd#rhubarb]==],
		flags = "x",
		tests = {
			{
				input = "abcd",
				matches = {{ index = 0, match = "abcd" }},
			},
		},
	},
	{
		source = [==[^(a)\1{2,3}(.)]==],
		tests = {
			{
				input = "aaab",
				matches = {
					{ index = 0, match = "aaab" },
					{ index = 1, match = "a" },
					{ index = 2, match = "b" },
				}
			},
			{
				input = "aaaab",
				matches = {
					{ index = 0, match = "aaaab" },
					{ index = 1, match = "a" },
					{ index = 2, match = "b" },
				}
			},
			{
				input = "aaaaab",
				matches = {
					{ index = 0, match = "aaaaa" },
					{ index = 1, match = "a" },
					{ index = 2, match = "a" },
				}
			},
			{
				input = "aaaaaab",
				matches = {
					{ index = 0, match = "aaaaa" },
					{ index = 1, match = "a" },
					{ index = 2, match = "a" },
				}
			},
		},
	},
	{
		source = [==[(?!^)abc]==],
		tests = {
			{
				input = "the abc",
				matches = {{ index = 0, match = "abc" }},
			},
			{ input = "*** Failers" },
			{ input = "abc" },
		},
	},
	{
		source = [==[(?=^)abc]==],
		tests = {
			{
				input = "abc",
				matches = {{ index = 0, match = "abc" }},
			},
			{ input = "*** Failers" },
			{ input = "the abc" },
		},
	},
	{
		source = [==[^[ab]{1,3}(ab*|b)]==],
		tests = {
			{
				input = "aabbbbb",
				matches = {
					{ index = 0, match = "aabb" },
					{ index = 1, match = "b" },
				}
			},
		},
	},
	{
		source = [==[^[ab]{1,3}?(ab*|b)]==],
		tests = {
			{
				input = "aabbbbb",
				matches = {
					{ index = 0, match = "aabbbbb" },
					{ index = 1, match = "abbbbb" },
				}
			},
		},
	},
	{
		source = [==[^[ab]{1,3}?(ab*?|b)]==],
		tests = {
			{
				input = "aabbbbb",
				matches = {
					{ index = 0, match = "aa" },
					{ index = 1, match = "a" },
				}
			},
		},
	},
	{
		source = [==[^[ab]{1,3}(ab*?|b)]==],
		tests = {
			{
				input = "aabbbbb",
				matches = {
					{ index = 0, match = "aabb" },
					{ index = 1, match = "b" },
				}
			},
		},
	},
-- 	{
-- 		source = [==[  (?: [\040\t] |  \(
-- (?:  [^\\\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...

-- " (?:                      # opening quote...
-- [^\\\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
-- )*

-- (?:  (?: [\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\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
-- ]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "Alan Other <user\\@dom.ain>",
-- 				matches = {{ index = 0, match = "Alan Other <user@dom.ain>" }},
-- 			},
-- 			{
-- 				input = "<user\\@dom.ain>",
-- 				matches = {{ index = 0, match = "user@dom.ain" }},
-- 			},
-- 			{
-- 				input = "user\\@dom.ain",
-- 				matches = {{ index = 0, match = "user@dom.ain" }},
-- 			},
-- 			{
-- 				input = "\\\"A. Other\\\" <user.1234\\@dom.ain> (a comment)",
-- 				matches = {{ index = 0, match = "\"A. Other\" <user.1234@dom.ain> (a comment)" }},
-- 			},
-- 			{
-- 				input = "A. Other <user.1234\\@dom.ain> (a comment)",
-- 				matches = {{ index = 0, match = " Other <user.1234@dom.ain> (a comment)" }},
-- 			},
-- 			{
-- 				input = "\\\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\\\"\\@x400-re.lay",
-- 				matches = {{ index = 0, match = "\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"@x400-re.lay" }},
-- 			},
-- 			{
-- 				input = "A missing angle <user\\@some.where",
-- 				matches = {{ index = 0, match = "user@some.where" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "The quick brown fox" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[[\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 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
-- )
-- ]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "Alan Other <user\\@dom.ain>",
-- 				matches = {{ index = 0, match = "Alan Other <user@dom.ain>" }},
-- 			},
-- 			{
-- 				input = "<user\\@dom.ain>",
-- 				matches = {{ index = 0, match = "user@dom.ain" }},
-- 			},
-- 			{
-- 				input = "user\\@dom.ain",
-- 				matches = {{ index = 0, match = "user@dom.ain" }},
-- 			},
-- 			{
-- 				input = "\\\"A. Other\\\" <user.1234\\@dom.ain> (a comment)",
-- 				matches = {{ index = 0, match = "\"A. Other\" <user.1234@dom.ain>" }},
-- 			},
-- 			{
-- 				input = "A. Other <user.1234\\@dom.ain> (a comment)",
-- 				matches = {{ index = 0, match = " Other <user.1234@dom.ain>" }},
-- 			},
-- 			{
-- 				input = "\\\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\\\"\\@x400-re.lay",
-- 				matches = {{ index = 0, match = "\"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"@x400-re.lay" }},
-- 			},
-- 			{
-- 				input = "A missing angle <user\\@some.where",
-- 				matches = {{ index = 0, match = "user@some.where" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "The quick brown fox" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[abc\0def\00pqr\000xyz\0000AB]==],
-- 		tests = {
-- 			{
-- 				input = "abc\0def\00pqr\000xyz\0000AB",
-- 				matches = {{ index = 0, match = "abc\000def\000pqr\000xyz\0000AB" }},
-- 			},
-- 			{
-- 				input = "abc456 abc\0def\00pqr\000xyz\0000ABCDE",
-- 				matches = {{ index = 0, match = "abc\000def\000pqr\000xyz\0000AB" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[abc\x0def\x00pqr\x000xyz\x0000AB]==],
		tests = {
			{
				input = "abc\013ef\000pqr\0000xyz\00000AB",
				matches = {{ index = 0, match = "abc\013ef\000pqr\0000xyz\00000AB" }},
			},
			{
				input = "abc456 abc\013ef\000pqr\0000xyz\00000ABCDE",
				matches = {{ index = 0, match = "abc\013ef\000pqr\0000xyz\00000AB" }},
			},
		},
	},
	{
		source = [==[^[\000-\037]]==],
		tests = {
			{
				input = "\0A",
				matches = {{ index = 0, match = "\000" }},
			},
			{
				input = "\01B",
				matches = {{ index = 0, match = "\001" }},
			},
			-- {
			-- 	input = "\037C",
			-- 	matches = {{ index = 0, match = "\031" }},
			-- },
		},
	},
-- 	{
-- 		source = [==[\0*]==],
-- 		tests = {
-- 			{
-- 				input = "\0\0\0\0",
-- 				matches = {{ index = 0, match = "\000\000\000\000" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[A\x0{2,3}Z]==],
		tests = {
			{
				input = "The A\000\000Z",
				matches = {{ index = 0, match = "A\000\000Z" }},
			},
			{
				input = "An A\0\000\0Z",
				matches = {{ index = 0, match = "A\000\000\000Z" }},
			},
			{ input = "*** Failers" },
			{ input = "A\0Z" },
			{ input = "A\0\000\0\000Z" },
		},
	},
	{
		source = [==[^(cow|)\1(bell)]==],
		tests = {
			{
				input = "cowcowbell",
				matches = {
					{ index = 0, match = "cowcowbell" },
					{ index = 1, match = "cow" },
					{ index = 2, match = "bell" },
				}
			},
			{
				input = "bell",
				matches = {
					{ index = 0, match = "bell" },
					{ index = 1, match = "" },
					{ index = 2, match = "bell" },
				}
			},
			{ input = "*** Failers" },
			{ input = "cowbell" },
		},
	},
	{
		source = [==[^\s]==],
		tests = {
			-- {
			-- 	input = "\040abc",
			-- 	matches = {{ index = 0, match = "" }},
			-- },
			{
				input = "\012abc",
				matches = {{ index = 0, match = "\012" }},
			},
			{
				input = "\nabc",
				matches = {{ index = 0, match = "\010" }},
			},
			{
				input = "\rabc",
				matches = {{ index = 0, match = "\013" }},
			},
			{
				input = "\tabc",
				matches = {{ index = 0, match = "\009" }},
			},
			{ input = "*** Failers" },
			{ input = "abc" },
		},
	},
	{
		source = [==[^a	b
      c]==],
		flags = "x",
		tests = {
			{
				input = "abc",
				matches = {{ index = 0, match = "abc" }},
			},
		},
	},
	{
		source = [==[^(a|)\1*b]==],
		tests = {
			{
				input = "ab",
				matches = {
					{ index = 0, match = "ab" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "aaaab",
				matches = {
					{ index = 0, match = "aaaab" },
					{ index = 1, match = "a" },
				}
			},
			-- {
			-- 	input = "b",
			-- 	matches = {
			-- 		{ index = 0, match = "b" },
			-- 		{ index = 1, match = "" },
			-- 	}
			-- },
			-- { input = "*** Failers" },
			-- { input = "acb" },
		},
	},
	{
		source = [==[^(a|)\1+b]==],
		tests = {
			{
				input = "aab",
				matches = {
					{ index = 0, match = "aab" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "aaaab",
				matches = {
					{ index = 0, match = "aaaab" },
					{ index = 1, match = "a" },
				}
			},
			-- {
			-- 	input = "b",
			-- 	matches = {
			-- 		{ index = 0, match = "b" },
			-- 		{ index = 1, match = "" },
			-- 	}
			-- },
			-- { input = "*** Failers" },
			-- { input = "ab" },
		},
	},
	{
		source = [==[^(a|)\1?b]==],
		tests = {
			{
				input = "ab",
				matches = {
					{ index = 0, match = "ab" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "aab",
				matches = {
					{ index = 0, match = "aab" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "b",
				matches = {
					{ index = 0, match = "b" },
					{ index = 1, match = "" },
				}
			},
			-- { input = "*** Failers" },
			-- { input = "acb" },
		},
	},
	{
		source = [==[^(a|)\1{2}b]==],
		tests = {
			{
				input = "aaab",
				matches = {
					{ index = 0, match = "aaab" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "b",
				matches = {
					{ index = 0, match = "b" },
					{ index = 1, match = "" },
				}
			},
			-- { input = "*** Failers" },
			-- { input = "ab" },
			-- { input = "aab" },
			-- { input = "aaaab" },
		},
	},
	{
		source = [==[^(a|)\1{2,3}b]==],
		tests = {
			{
				input = "aaab",
				matches = {
					{ index = 0, match = "aaab" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "aaaab",
				matches = {
					{ index = 0, match = "aaaab" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "b",
				matches = {
					{ index = 0, match = "b" },
					{ index = 1, match = "" },
				}
			},
			-- { input = "*** Failers" },
			-- { input = "ab" },
			-- { input = "aab" },
			-- { input = "aaaaab" },
		},
	},
	{
		source = [==[ab{1,3}bc]==],
		tests = {
			{
				input = "abbbbc",
				matches = {{ index = 0, match = "abbbbc" }},
			},
			{
				input = "abbbc",
				matches = {{ index = 0, match = "abbbc" }},
			},
			{
				input = "abbc",
				matches = {{ index = 0, match = "abbc" }},
			},
			{ input = "*** Failers" },
			{ input = "abc" },
			{ input = "abbbbbc" },
		},
	},
	{
		source = [==[([^.]*)\.([^:]*):[T ]+(.*)]==],
		tests = {
			{
				input = "track1.title:TBlah blah blah",
				matches = {
					{ index = 0, match = "track1.title:TBlah blah blah" },
					{ index = 1, match = "track1" },
					{ index = 2, match = "title" },
					{ index = 3, match = "Blah blah blah" },
				}
			},
		},
	},
	{
		source = [==[([^.]*)\.([^:]*):[T ]+(.*)]==],
		flags = "i",
		tests = {
			{
				input = "track1.title:TBlah blah blah",
				matches = {
					{ index = 0, match = "track1.title:TBlah blah blah" },
					{ index = 1, match = "track1" },
					{ index = 2, match = "title" },
					{ index = 3, match = "Blah blah blah" },
				}
			},
		},
	},
-- 	{
-- 		source = [==[([^.]*)\.([^:]*):[t ]+(.*)]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "track1.title:TBlah blah blah",
-- 				matches = {
-- 					{ index = 0, match = "track1.title:TBlah blah blah" },
-- 					{ index = 1, match = "track1" },
-- 					{ index = 2, match = "title" },
-- 					{ index = 3, match = "Blah blah blah" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[^[W-c]+$]==],
		tests = {
			{
				input = "WXY_^abc",
				matches = {{ index = 0, match = "WXY_^abc" }},
			},
			{ input = "*** Failers" },
			{ input = "wxy" },
		},
	},
	{
		source = [==[^[W-c]+$]==],
		flags = "i",
		tests = {
			{
				input = "WXY_^abc",
				matches = {{ index = 0, match = "WXY_^abc" }},
			},
			-- {
			-- 	input = "wxy_^ABC",
			-- 	matches = {{ index = 0, match = "wxy_^ABC" }},
			-- },
		},
	},
-- 	{
-- 		source = [==[^[\x3f-\x5F]+$]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "WXY_^abc",
-- 				matches = {{ index = 0, match = "WXY_^abc" }},
-- 			},
-- 			{
-- 				input = "wxy_^ABC",
-- 				matches = {{ index = 0, match = "wxy_^ABC" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[^abc$]==],
		flags = "m",
		tests = {
			{
				input = "abc",
				matches = {{ index = 0, match = "abc" }},
			},
			{
				input = "qqq\nabc",
				matches = {{ index = 0, match = "abc" }},
			},
			-- {
			-- 	input = "abc\nzzz",
			-- 	matches = {{ index = 0, match = "abc" }},
			-- },
			-- {
			-- 	input = "qqq\nabc\nzzz",
			-- 	matches = {{ index = 0, match = "abc" }},
			-- },
		},
	},
	{
		source = [==[^abc$]==],
		tests = {
			{
				input = "abc",
				matches = {{ index = 0, match = "abc" }},
			},
			{ input = "*** Failers" },
			{ input = "qqq\nabc" },
			{ input = "abc\nzzz" },
			{ input = "qqq\nabc\nzzz" },
		},
	},
	{
		source = [==[\Aabc\Z]==],
		flags = "m",
		tests = {
			-- {
			-- 	input = "abc",
			-- 	matches = {{ index = 0, match = "abc" }},
			-- },
			-- {
			-- 	input = "abc\n",
			-- 	matches = {{ index = 0, match = "abc" }},
			-- },
			{ input = "*** Failers" },
			{ input = "qqq\nabc" },
			{ input = "abc\nzzz" },
			{ input = "qqq\nabc\nzzz" },
		},
	},
-- 	{
-- 		source = [==[\A(.)*\Z]==],
-- 		flags = "s",
-- 		tests = {
-- 			{
-- 				input = "abc\ndef",
-- 				matches = {
-- 					{ index = 0, match = "abc\010def" },
-- 					{ index = 1, match = "f" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[\A(.)*\Z]==],
		flags = "m",
		tests = {
			-- {
			-- 	input = "*** Failers",
			-- 	matches = {
			-- 		{ index = 0, match = "*** Failers" },
			-- 		{ index = 1, match = "s" },
			-- 	}
			-- },
			{ input = "abc\ndef" },
		},
	},
	{
		source = [==[(?:b)|(?::+)]==],
		tests = {
			{
				input = "b::c",
				matches = {{ index = 0, match = "b" }},
			},
			-- {
			-- 	input = "c::b",
			-- 	matches = {{ index = 0, match = "::" }},
			-- },
		},
	},
	{
		source = [==[[-az]+]==],
		tests = {
			{
				input = "az-",
				matches = {{ index = 0, match = "az-" }},
			},
			{
				input = "*** Failers",
				matches = {{ index = 0, match = "a" }},
			},
			{ input = "b" },
		},
	},
	{
		source = [==[[az-]+]==],
		tests = {
			{
				input = "za-",
				matches = {{ index = 0, match = "za-" }},
			},
			{
				input = "*** Failers",
				matches = {{ index = 0, match = "a" }},
			},
			{ input = "b" },
		},
	},
	{
		source = [==[[a\-z]+]==],
		tests = {
			{
				input = "a-z",
				matches = {{ index = 0, match = "a-z" }},
			},
			{
				input = "*** Failers",
				matches = {{ index = 0, match = "a" }},
			},
			{ input = "b" },
		},
	},
	{
		source = [==[[a-z]+]==],
		tests = {
			{
				input = "abcdxyz",
				matches = {{ index = 0, match = "abcdxyz" }},
			},
		},
	},
	{
		source = [==[[\d-]+]==],
		tests = {
			{
				input = "12-34",
				matches = {{ index = 0, match = "12-34" }},
			},
			{ input = "*** Failers" },
			{ input = "aaa" },
		},
	},
	{
		source = [==[[\d-z]+]==],
		tests = {
			{
				input = "12-34z",
				matches = {{ index = 0, match = "12-34z" }},
			},
			{ input = "*** Failers" },
			{ input = "aaa" },
		},
	},
	{
		source = [==[\x5c]==],
		tests = {
			{
				input = "\\",
				matches = {{ index = 0, match = "\\" }},
			},
		},
	},
	{
		source = [==[\x20Z]==],
		tests = {
			{
				input = "the Zoo",
				matches = {{ index = 0, match = " Z" }},
			},
			{ input = "*** Failers" },
			{ input = "Zulu" },
		},
	},
	{
		source = [==[(abc)\1]==],
		flags = "i",
		tests = {
			{
				input = "abcabc",
				matches = {
					{ index = 0, match = "abcabc" },
					{ index = 1, match = "abc" },
				}
			},
			-- {
			-- 	input = "ABCabc",
			-- 	matches = {
			-- 		{ index = 0, match = "ABCabc" },
			-- 		{ index = 1, match = "ABC" },
			-- 	}
			-- },
			-- {
			-- 	input = "abcABC",
			-- 	matches = {
			-- 		{ index = 0, match = "abcABC" },
			-- 		{ index = 1, match = "abc" },
			-- 	}
			-- },
		},
	},
	{
		source = [==[ab{3cd]==],
		tests = {
			{
				input = "ab{3cd",
				matches = {{ index = 0, match = "ab{3cd" }},
			},
		},
	},
	{
		source = [==[ab{3,cd]==],
		tests = {
			{
				input = "ab{3,cd",
				matches = {{ index = 0, match = "ab{3,cd" }},
			},
		},
	},
	{
		source = [==[ab{3,4a}cd]==],
		tests = {
			{
				input = "ab{3,4a}cd",
				matches = {{ index = 0, match = "ab{3,4a}cd" }},
			},
		},
	},
	{
		source = [==[{4,5a}bc]==],
		tests = {
			{
				input = "{4,5a}bc",
				matches = {{ index = 0, match = "{4,5a}bc" }},
			},
		},
	},
	{
		source = [==[abc$]==],
		tests = {
			{
				input = "abc",
				matches = {{ index = 0, match = "abc" }},
			},
			-- {
			-- 	input = "abc\n",
			-- 	matches = {{ index = 0, match = "abc" }},
			-- },
			{ input = "*** Failers" },
			{ input = "abc\ndef" },
		},
	},
	{
		source = [==[(abc)\123]==],
		tests = {
			{
				input = "abc\083",
				matches = {
					{ index = 0, match = "abcS" },
					{ index = 1, match = "abc" },
				}
			},
		},
	},
-- 	{
-- 		source = [==[(abc)\223]==],
-- 		tests = {
-- 			{
-- 				input = "abc\147",
-- 				matches = {
-- 					{ index = 0, match = "abc\147" },
-- 					{ index = 1, match = "abc" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(abc)\323]==],
-- 		tests = {
-- 			{
-- 				input = "abc\211",
-- 				matches = {
-- 					{ index = 0, match = "abc\211" },
-- 					{ index = 1, match = "abc" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[(abc)\100]==],
		tests = {
			{
				input = "abc\064",
				matches = {
					{ index = 0, match = "abc@" },
					{ index = 1, match = "abc" },
				}
			},
			-- {
			-- 	input = "abc\100",
			-- 	matches = {
			-- 		{ index = 0, match = "abc@" },
			-- 		{ index = 1, match = "abc" },
			-- 	}
			-- },
		},
	},
	{
		source = [==[(abc)\1000]==],
		tests = {
			{
				input = "abc\0640",
				matches = {
					{ index = 0, match = "abc@0" },
					{ index = 1, match = "abc" },
				}
			},
			{
				input = "abc\064\048",
				matches = {
					{ index = 0, match = "abc@0" },
					{ index = 1, match = "abc" },
				}
			},
			-- {
			-- 	input = "abc\1000",
			-- 	matches = {
			-- 		{ index = 0, match = "abc@0" },
			-- 		{ index = 1, match = "abc" },
			-- 	}
			-- },
			-- {
			-- 	input = "abc\100\048",
			-- 	matches = {
			-- 		{ index = 0, match = "abc@0" },
			-- 		{ index = 1, match = "abc" },
			-- 	}
			-- },
			-- {
			-- 	input = "abc\100\060",
			-- 	matches = {
			-- 		{ index = 0, match = "abc@0" },
			-- 		{ index = 1, match = "abc" },
			-- 	}
			-- },
			-- {
			-- 	input = "abc\100\60",
			-- 	matches = {
			-- 		{ index = 0, match = "abc@0" },
			-- 		{ index = 1, match = "abc" },
			-- 	}
			-- },
		},
	},
	{
		source = [==[^(A)(B)(C)(D)(E)(F)(G)(H)(I)\8\9$]==],
		tests = {
			{
				input = "ABCDEFGHIHI",
				matches = {
					{ index = 0, match = "ABCDEFGHIHI" },
					{ index = 1, match = "A" },
					{ index = 2, match = "B" },
					{ index = 3, match = "C" },
					{ index = 4, match = "D" },
					{ index = 5, match = "E" },
					{ index = 6, match = "F" },
					{ index = 7, match = "G" },
					{ index = 8, match = "H" },
					{ index = 9, match = "I" },
				}
			},
		},
	},
	{
		source = [==[^[A\8B\9C]+$]==],
		tests = {
			{
				input = "A8B9C",
				matches = {{ index = 0, match = "A8B9C" }},
			},
			{ input = "*** Failers" },
			{ input = "A8B9C\000" },
		},
	},
	{
		source = [==[(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123]==],
		tests = {
			{
				input = "abcdefghijkllS",
				matches = {
					{ index = 0, match = "abcdefghijkllS" },
					{ index = 1, match = "a" },
					{ index = 2, match = "b" },
					{ index = 3, match = "c" },
					{ index = 4, match = "d" },
					{ index = 5, match = "e" },
					{ index = 6, match = "f" },
					{ index = 7, match = "g" },
					{ index = 8, match = "h" },
					{ index = 9, match = "i" },
					{ index = 10, match = "j" },
					{ index = 11, match = "k" },
					{ index = 12, match = "l" },
				}
			},
		},
	},
-- 	{
-- 		source = [==[(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123]==],
-- 		tests = {
-- 			{
-- 				input = "abcdefghijk\12S",
-- 				matches = {
-- 					{ index = 0, match = "abcdefghijk\010S" },
-- 					{ index = 1, match = "a" },
-- 					{ index = 2, match = "b" },
-- 					{ index = 3, match = "c" },
-- 					{ index = 4, match = "d" },
-- 					{ index = 5, match = "e" },
-- 					{ index = 6, match = "f" },
-- 					{ index = 7, match = "g" },
-- 					{ index = 8, match = "h" },
-- 					{ index = 9, match = "i" },
-- 					{ index = 10, match = "j" },
-- 					{ index = 11, match = "k" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[a{0}bc]==],
		tests = {
			{
				input = "bc",
				matches = {{ index = 0, match = "bc" }},
			},
		},
	},
-- 	{
-- 		source = [==[(a|(bc)){0,0}?xyz]==],
-- 		tests = {
-- 			{
-- 				input = "xyz",
-- 				matches = {{ index = 0, match = "xyz" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[abc[\10]de]==],
-- 		tests = {
-- 			{
-- 				input = "abc\010de",
-- 				matches = {{ index = 0, match = "abc\008de" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[abc[\1]de]==],
		tests = {
			{
				input = "abc\1de",
				matches = {{ index = 0, match = "abc\001de" }},
			},
		},
	},
	{
		source = [==[(abc)[\1]de]==],
		tests = {
			{
				input = "abc\1de",
				matches = {
					{ index = 0, match = "abc\001de" },
					{ index = 1, match = "abc" },
				}
			},
		},
	},
-- 	{
-- 		source = [==[(?s)a.b]==],
-- 		tests = {
-- 			{
-- 				input = "a\nb",
-- 				matches = {{ index = 0, match = "a\010b" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[^([^a])([^\b])([^c]*)([^d]{3,4})]==],
		tests = {
			{
				input = "baNOTccccd",
				matches = {
					{ index = 0, match = "baNOTcccc" },
					{ index = 1, match = "b" },
					{ index = 2, match = "a" },
					{ index = 3, match = "NOT" },
					{ index = 4, match = "cccc" },
				}
			},
			{
				input = "baNOTcccd",
				matches = {
					{ index = 0, match = "baNOTccc" },
					{ index = 1, match = "b" },
					{ index = 2, match = "a" },
					{ index = 3, match = "NOT" },
					{ index = 4, match = "ccc" },
				}
			},
			{
				input = "baNOTccd",
				matches = {
					{ index = 0, match = "baNOTcc" },
					{ index = 1, match = "b" },
					{ index = 2, match = "a" },
					{ index = 3, match = "NO" },
					{ index = 4, match = "Tcc" },
				}
			},
			{
				input = "bacccd",
				matches = {
					{ index = 0, match = "baccc" },
					{ index = 1, match = "b" },
					{ index = 2, match = "a" },
					{ index = 3, match = "" },
					{ index = 4, match = "ccc" },
				}
			},
			{
				input = "*** Failers",
				matches = {
					{ index = 0, match = "*** Failers" },
					{ index = 1, match = "*" },
					{ index = 2, match = "*" },
					{ index = 3, match = "* Fail" },
					{ index = 4, match = "ers" },
				}
			},
			{ input = "anything" },
			{ input = "b\\bc" },
			{ input = "baccd" },
		},
	},
	{
		source = [==[[^a]]==],
		tests = {
			{
				input = "Abc",
				matches = {{ index = 0, match = "A" }},
			},
		},
	},
-- 	{
-- 		source = [==[[^a]]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "Abc",
-- 				matches = {{ index = 0, match = "b" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[[^a]+]==],
		tests = {
			{
				input = "AAAaAbc",
				matches = {{ index = 0, match = "AAA" }},
			},
		},
	},
-- 	{
-- 		source = [==[[^a]+]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "AAAaAbc",
-- 				matches = {{ index = 0, match = "bc" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[[^a]+]==],
		tests = {
			{
				input = "bbb\nccc",
				matches = {{ index = 0, match = "bbb\010ccc" }},
			},
		},
	},
	{
		source = [==[[^k]$]==],
		tests = {
			{
				input = "abc",
				matches = {{ index = 0, match = "c" }},
			},
			{
				input = "*** Failers",
				matches = {{ index = 0, match = "s" }},
			},
			{ input = "abk" },
		},
	},
	{
		source = [==[[^k]{2,3}$]==],
		tests = {
			{
				input = "abc",
				matches = {{ index = 0, match = "abc" }},
			},
			{
				input = "kbc",
				matches = {{ index = 0, match = "bc" }},
			},
			{
				input = "kabc",
				matches = {{ index = 0, match = "abc" }},
			},
			{
				input = "*** Failers",
				matches = {{ index = 0, match = "ers" }},
			},
			{ input = "abk" },
			{ input = "akb" },
			{ input = "akk" },
		},
	},
	{
		source = [==[^\d{8,}\@.+[^k]$]==],
		tests = {
			-- {
			-- 	input = "12345678\\@a.b.c.d",
			-- 	matches = {{ index = 0, match = "12345678@a.b.c.d" }},
			-- },
			-- {
			-- 	input = "123456789\\@x.y.z",
			-- 	matches = {{ index = 0, match = "123456789@x.y.z" }},
			-- },
			{ input = "*** Failers" },
			{ input = "12345678\\@x.y.uk" },
			{ input = "1234567\\@a.b.c.d" },
		},
	},
	{
		source = [==[(a)\1{8,}]==],
		tests = {
			{
				input = "aaaaaaaaa",
				matches = {
					{ index = 0, match = "aaaaaaaaa" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "aaaaaaaaaa",
				matches = {
					{ index = 0, match = "aaaaaaaaaa" },
					{ index = 1, match = "a" },
				}
			},
			{ input = "*** Failers" },
			{ input = "aaaaaaa" },
		},
	},
	{
		source = [==[[^a]]==],
		tests = {
			{
				input = "aaaabcd",
				matches = {{ index = 0, match = "b" }},
			},
			{
				input = "aaAabcd",
				matches = {{ index = 0, match = "A" }},
			},
		},
	},
	{
		source = [==[[^a]]==],
		flags = "i",
		tests = {
			{
				input = "aaaabcd",
				matches = {{ index = 0, match = "b" }},
			},
			-- {
			-- 	input = "aaAabcd",
			-- 	matches = {{ index = 0, match = "b" }},
			-- },
		},
	},
	{
		source = [==[[^az]]==],
		tests = {
			{
				input = "aaaabcd",
				matches = {{ index = 0, match = "b" }},
			},
			{
				input = "aaAabcd",
				matches = {{ index = 0, match = "A" }},
			},
		},
	},
	{
		source = [==[[^az]]==],
		flags = "i",
		tests = {
			{
				input = "aaaabcd",
				matches = {{ index = 0, match = "b" }},
			},
			-- {
			-- 	input = "aaAabcd",
			-- 	matches = {{ index = 0, match = "b" }},
			-- },
		},
	},
	-- {
	-- 	source = [==[\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]==],
	-- 	tests = {
	-- 		{
	-- 			input = "\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",
	-- 			matches = {{ index = 0, match = "\000\001\002\003\004\005\006\007\008\009\010\011\012\013\014\015\016\017\018\019\020\021\022\023\024\025\026\027\028\029\030\031 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127\128\129\130\131\132\133\134\135\136\137\138\139\140\141\142\143\144\145\146\147\148\149\150\151\152\153\154\155\156\157\158\159\160\161\162\163\164\165\166\167\168\169\170\171\172\173\174\175\176\177\178\179\180\181\182\183\184\185\186\187\188\189\190\191\192\193\194\195\196\197\198\199\200\201\202\203\204\205\206\207\208\209\210\211\212\213\214\215\216\217\218\219\220\221\222\223\224\225\226\227\228\229\230\231\232\233\234\235\236\237\238\239\240\241\242\243\244\245\246\247\248\249\250\251\252\253\254\255" }},
	-- 		},
	-- 	},
	-- },
	{
		source = [==[P[^*]TAIRE[^*]{1,6}?LL]==],
		tests = {
			{
				input = "xxxxxxxxxxxPSTAIREISLLxxxxxxxxx",
				matches = {{ index = 0, match = "PSTAIREISLL" }},
			},
		},
	},
	{
		source = [==[P[^*]TAIRE[^*]{1,}?LL]==],
		tests = {
			{
				input = "xxxxxxxxxxxPSTAIREISLLxxxxxxxxx",
				matches = {{ index = 0, match = "PSTAIREISLL" }},
			},
		},
	},
	{
		source = [==[(\.\d\d[1-9]?)\d+]==],
		tests = {
			{
				input = "1.230003938",
				matches = {
					{ index = 0, match = ".230003938" },
					{ index = 1, match = ".23" },
				}
			},
			{
				input = "1.875000282",
				matches = {
					{ index = 0, match = ".875000282" },
					{ index = 1, match = ".875" },
				}
			},
			{
				input = "1.235",
				matches = {
					{ index = 0, match = ".235" },
					{ index = 1, match = ".23" },
				}
			},
		},
	},
	{
		source = [==[(\.\d\d((?=0)|\d(?=\d)))]==],
		tests = {
			{
				input = "1.230003938",
				matches = {
					{ index = 0, match = ".23" },
					{ index = 1, match = ".23" },
					{ index = 2, match = "" },
				}
			},
			{
				input = "1.875000282",
				matches = {
					{ index = 0, match = ".875" },
					{ index = 1, match = ".875" },
					{ index = 2, match = "5" },
				}
			},
			{ input = "*** Failers" },
			{ input = "1.235" },
		},
	},
-- 	{
-- 		source = [==[a(?)b]==],
-- 		tests = {
-- 			{
-- 				input = "ab",
-- 				matches = {{ index = 0, match = "ab" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[\b(foo)\s+(\w+)]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "Food is on the foo table",
-- 				matches = {
-- 					{ index = 0, match = "foo table" },
-- 					{ index = 1, match = "foo" },
-- 					{ index = 2, match = "table" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[foo(.*)bar]==],
		tests = {
			{
				input = "The food is under the bar in the barn.",
				matches = {
					{ index = 0, match = "food is under the bar in the bar" },
					-- { index = 1, match = "d is under the bar in the" },
				}
			},
		},
	},
	{
		source = [==[foo(.*?)bar]==],
		tests = {
			{
				input = "The food is under the bar in the barn.",
				matches = {
					{ index = 0, match = "food is under the bar" },
					-- { index = 1, match = "d is under the" },
				}
			},
		},
	},
	{
		source = [==[(.*)(\d*)]==],
		tests = {
			{
				input = "I have 2 numbers: 53147",
				matches = {
					{ index = 0, match = "I have 2 numbers: 53147" },
					{ index = 1, match = "I have 2 numbers: 53147" },
					{ index = 2, match = "" },
				}
			},
		},
	},
	{
		source = [==[(.*)(\d+)]==],
		tests = {
			{
				input = "I have 2 numbers: 53147",
				matches = {
					{ index = 0, match = "I have 2 numbers: 53147" },
					{ index = 1, match = "I have 2 numbers: 5314" },
					{ index = 2, match = "7" },
				}
			},
		},
	},
	{
		source = [==[(.*?)(\d*)]==],
		tests = {
			{
				input = "I have 2 numbers: 53147",
				matches = {
					{ index = 0, match = "" },
					{ index = 1, match = "" },
					{ index = 2, match = "" },
				}
			},
		},
	},
	{
		source = [==[(.*?)(\d+)]==],
		tests = {
			{
				input = "I have 2 numbers: 53147",
				matches = {
					{ index = 0, match = "I have 2" },
					-- { index = 1, match = "I have" },
					{ index = 2, match = "2" },
				}
			},
		},
	},
	{
		source = [==[(.*)(\d+)$]==],
		tests = {
			{
				input = "I have 2 numbers: 53147",
				matches = {
					{ index = 0, match = "I have 2 numbers: 53147" },
					{ index = 1, match = "I have 2 numbers: 5314" },
					{ index = 2, match = "7" },
				}
			},
		},
	},
	{
		source = [==[(.*?)(\d+)$]==],
		tests = {
			{
				input = "I have 2 numbers: 53147",
				matches = {
					{ index = 0, match = "I have 2 numbers: 53147" },
					-- { index = 1, match = "I have 2 numbers:" },
					{ index = 2, match = "53147" },
				}
			},
		},
	},
-- 	{
-- 		source = [==[(.*)\b(\d+)$]==],
-- 		tests = {
-- 			{
-- 				input = "I have 2 numbers: 53147",
-- 				matches = {
-- 					{ index = 0, match = "I have 2 numbers: 53147" },
-- 					{ index = 1, match = "I have 2 numbers:" },
-- 					{ index = 2, match = "53147" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[(.*\D)(\d+)$]==],
		tests = {
			{
				input = "I have 2 numbers: 53147",
				matches = {
					{ index = 0, match = "I have 2 numbers: 53147" },
					-- { index = 1, match = "I have 2 numbers:" },
					{ index = 2, match = "53147" },
				}
			},
		},
	},
	{
		source = [==[^\D*(?!123)]==],
		tests = {
			{
				input = "ABC123",
				matches = {{ index = 0, match = "AB" }},
			},
		},
	},
	{
		source = [==[^(\D*)(?=\d)(?!123)]==],
		tests = {
			{
				input = "ABC445",
				matches = {
					{ index = 0, match = "ABC" },
					{ index = 1, match = "ABC" },
				}
			},
			{ input = "*** Failers" },
			{ input = "ABC123" },
		},
	},
	{
		source = [==[^[W-]46]]==],
		tests = {
			{
				input = "W46]789",
				matches = {{ index = 0, match = "W46]" }},
			},
			{
				input = "-46]789",
				matches = {{ index = 0, match = "-46]" }},
			},
			{ input = "*** Failers" },
			{ input = "Wall" },
			{ input = "Zebra" },
			{ input = "42" },
			{ input = "[abcd]" },
			{ input = "]abcd[" },
		},
	},
	{
		source = [==[^[W-\]46]]==],
		tests = {
			{
				input = "W46]789",
				matches = {{ index = 0, match = "W" }},
			},
			{
				input = "Wall",
				matches = {{ index = 0, match = "W" }},
			},
			{
				input = "Zebra",
				matches = {{ index = 0, match = "Z" }},
			},
			{
				input = "Xylophone",
				matches = {{ index = 0, match = "X" }},
			},
			{
				input = "42",
				matches = {{ index = 0, match = "4" }},
			},
			{
				input = "[abcd]",
				matches = {{ index = 0, match = "[" }},
			},
			{
				input = "]abcd[",
				matches = {{ index = 0, match = "]" }},
			},
			{
				input = "\\backslash",
				matches = {{ index = 0, match = "\\" }},
			},
			{ input = "*** Failers" },
			{ input = "-46]789" },
			{ input = "well" },
		},
	},
	{
		source = [==[\d\d\/\d\d\/\d\d\d\d]==],
		tests = {
			{
				input = "01/01/2000",
				matches = {{ index = 0, match = "01/01/2000" }},
			},
		},
	},
	{
		source = [==[word (?:[a-zA-Z0-9]+ ){0,10}otherword]==],
		tests = {
			{
				input = "word cat dog elephant mussel cow horse canary baboon snake shark otherword",
				matches = {{ index = 0, match = "word cat dog elephant mussel cow horse canary baboon snake shark otherword" }},
			},
			{ input = "word cat dog elephant mussel cow horse canary baboon snake shark" },
		},
	},
	{
		source = [==[word (?:[a-zA-Z0-9]+ ){0,300}otherword]==],
		tests = {
			{ input = "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" },
		},
	},
-- 	{
-- 		source = [==[^(a){0,0}]==],
-- 		tests = {
-- 			{
-- 				input = "bcd",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 			{
-- 				input = "abc",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 			{
-- 				input = "aab",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[^(a){0,1}]==],
		tests = {
			{
				input = "bcd",
				matches = {{ index = 0, match = "" }},
			},
			{
				input = "abc",
				matches = {
					{ index = 0, match = "a" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "aab",
				matches = {
					{ index = 0, match = "a" },
					{ index = 1, match = "a" },
				}
			},
		},
	},
	{
		source = [==[^(a){0,2}]==],
		tests = {
			{
				input = "bcd",
				matches = {{ index = 0, match = "" }},
			},
			{
				input = "abc",
				matches = {
					{ index = 0, match = "a" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "aab",
				matches = {
					{ index = 0, match = "aa" },
					{ index = 1, match = "a" },
				}
			},
		},
	},
	{
		source = [==[^(a){0,3}]==],
		tests = {
			{
				input = "bcd",
				matches = {{ index = 0, match = "" }},
			},
			{
				input = "abc",
				matches = {
					{ index = 0, match = "a" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "aab",
				matches = {
					{ index = 0, match = "aa" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "aaa",
				matches = {
					{ index = 0, match = "aaa" },
					{ index = 1, match = "a" },
				}
			},
		},
	},
	{
		source = [==[^(a){0,}]==],
		tests = {
			{
				input = "bcd",
				matches = {{ index = 0, match = "" }},
			},
			{
				input = "abc",
				matches = {
					{ index = 0, match = "a" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "aab",
				matches = {
					{ index = 0, match = "aa" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "aaa",
				matches = {
					{ index = 0, match = "aaa" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "aaaaaaaa",
				matches = {
					{ index = 0, match = "aaaaaaaa" },
					{ index = 1, match = "a" },
				}
			},
		},
	},
	{
		source = [==[^(a){1,1}]==],
		tests = {
			{ input = "bcd" },
			{
				input = "abc",
				matches = {
					{ index = 0, match = "a" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "aab",
				matches = {
					{ index = 0, match = "a" },
					{ index = 1, match = "a" },
				}
			},
		},
	},
	{
		source = [==[^(a){1,2}]==],
		tests = {
			{ input = "bcd" },
			{
				input = "abc",
				matches = {
					{ index = 0, match = "a" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "aab",
				matches = {
					{ index = 0, match = "aa" },
					{ index = 1, match = "a" },
				}
			},
		},
	},
	{
		source = [==[^(a){1,3}]==],
		tests = {
			{ input = "bcd" },
			{
				input = "abc",
				matches = {
					{ index = 0, match = "a" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "aab",
				matches = {
					{ index = 0, match = "aa" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "aaa",
				matches = {
					{ index = 0, match = "aaa" },
					{ index = 1, match = "a" },
				}
			},
		},
	},
	{
		source = [==[^(a){1,}]==],
		tests = {
			{ input = "bcd" },
			{
				input = "abc",
				matches = {
					{ index = 0, match = "a" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "aab",
				matches = {
					{ index = 0, match = "aa" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "aaa",
				matches = {
					{ index = 0, match = "aaa" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "aaaaaaaa",
				matches = {
					{ index = 0, match = "aaaaaaaa" },
					{ index = 1, match = "a" },
				}
			},
		},
	},
	{
		source = [==[.*\.gif]==],
		tests = {
			{
				input = "borfle\nbib.gif\nno",
				matches = {{ index = 0, match = "bib.gif" }},
			},
		},
	},
	{
		source = [==[.{0,}\.gif]==],
		tests = {
			{
				input = "borfle\nbib.gif\nno",
				matches = {{ index = 0, match = "bib.gif" }},
			},
		},
	},
	{
		source = [==[.*\.gif]==],
		flags = "m",
		tests = {
			{
				input = "borfle\nbib.gif\nno",
				matches = {{ index = 0, match = "bib.gif" }},
			},
		},
	},
-- 	{
-- 		source = [==[.*\.gif]==],
-- 		flags = "s",
-- 		tests = {
-- 			{
-- 				input = "borfle\nbib.gif\nno",
-- 				matches = {{ index = 0, match = "borfle\010bib.gif" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[.*\.gif]==],
-- 		flags = "ms",
-- 		tests = {
-- 			{
-- 				input = "borfle\nbib.gif\nno",
-- 				matches = {{ index = 0, match = "borfle\010bib.gif" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[.*$]==],
		tests = {
			{
				input = "borfle\nbib.gif\nno",
				matches = {{ index = 0, match = "no" }},
			},
		},
	},
-- 	{
-- 		source = [==[.*$]==],
-- 		flags = "m",
-- 		tests = {
-- 			{
-- 				input = "borfle\nbib.gif\nno",
-- 				matches = {{ index = 0, match = "borfle" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[.*$]==],
-- 		flags = "s",
-- 		tests = {
-- 			{
-- 				input = "borfle\nbib.gif\nno",
-- 				matches = {{ index = 0, match = "borfle\010bib.gif\010no" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[.*$]==],
-- 		flags = "ms",
-- 		tests = {
-- 			{
-- 				input = "borfle\nbib.gif\nno",
-- 				matches = {{ index = 0, match = "borfle\010bib.gif\010no" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[.*$]==],
-- 		tests = {
-- 			{
-- 				input = "borfle\nbib.gif\nno\n",
-- 				matches = {{ index = 0, match = "no" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[.*$]==],
-- 		flags = "m",
-- 		tests = {
-- 			{
-- 				input = "borfle\nbib.gif\nno\n",
-- 				matches = {{ index = 0, match = "borfle" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[.*$]==],
-- 		flags = "s",
-- 		tests = {
-- 			{
-- 				input = "borfle\nbib.gif\nno\n",
-- 				matches = {{ index = 0, match = "borfle\010bib.gif\010no\010" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[.*$]==],
-- 		flags = "ms",
-- 		tests = {
-- 			{
-- 				input = "borfle\nbib.gif\nno\n",
-- 				matches = {{ index = 0, match = "borfle\010bib.gif\010no\010" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[(.*X|^B)]==],
		tests = {
			{
				input = "abcde\n1234Xyz",
				matches = {
					{ index = 0, match = "1234X" },
					{ index = 1, match = "1234X" },
				}
			},
			{
				input = "BarFoo",
				matches = {
					{ index = 0, match = "B" },
					{ index = 1, match = "B" },
				}
			},
			{ input = "*** Failers" },
			{ input = "abcde\nBar" },
		},
	},
	{
		source = [==[(.*X|^B)]==],
		flags = "m",
		tests = {
			{
				input = "abcde\n1234Xyz",
				matches = {
					{ index = 0, match = "1234X" },
					{ index = 1, match = "1234X" },
				}
			},
			{
				input = "BarFoo",
				matches = {
					{ index = 0, match = "B" },
					{ index = 1, match = "B" },
				}
			},
			{
				input = "abcde\nBar",
				matches = {
					{ index = 0, match = "B" },
					{ index = 1, match = "B" },
				}
			},
		},
	},
	{
		source = [==[(.*X|^B)]==],
		flags = "s",
		tests = {
			-- {
			-- 	input = "abcde\n1234Xyz",
			-- 	matches = {
			-- 		{ index = 0, match = "abcde\0101234X" },
			-- 		{ index = 1, match = "abcde\0101234X" },
			-- 	}
			-- },
			{
				input = "BarFoo",
				matches = {
					{ index = 0, match = "B" },
					{ index = 1, match = "B" },
				}
			},
			{ input = "*** Failers" },
			{ input = "abcde\nBar" },
		},
	},
	{
		source = [==[(.*X|^B)]==],
		flags = "ms",
		tests = {
			-- {
			-- 	input = "abcde\n1234Xyz",
			-- 	matches = {
			-- 		{ index = 0, match = "abcde\0101234X" },
			-- 		{ index = 1, match = "abcde\0101234X" },
			-- 	}
			-- },
			{
				input = "BarFoo",
				matches = {
					{ index = 0, match = "B" },
					{ index = 1, match = "B" },
				}
			},
			{
				input = "abcde\nBar",
				matches = {
					{ index = 0, match = "B" },
					{ index = 1, match = "B" },
				}
			},
		},
	},
-- 	{
-- 		source = [==[(?s)(.*X|^B)]==],
-- 		tests = {
-- 			{
-- 				input = "abcde\n1234Xyz",
-- 				matches = {
-- 					{ index = 0, match = "abcde\0101234X" },
-- 					{ index = 1, match = "abcde\0101234X" },
-- 				}
-- 			},
-- 			{
-- 				input = "BarFoo",
-- 				matches = {
-- 					{ index = 0, match = "B" },
-- 					{ index = 1, match = "B" },
-- 				}
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "abcde\nBar" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?s:.*X|^B)]==],
-- 		tests = {
-- 			{
-- 				input = "abcde\n1234Xyz",
-- 				matches = {{ index = 0, match = "abcde\0101234X" }},
-- 			},
-- 			{
-- 				input = "BarFoo",
-- 				matches = {{ index = 0, match = "B" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "abcde\nBar" },
-- 		},
-- 	},
	{
		source = [==[^.*B]==],
		tests = {
			{ input = "**** Failers" },
			{ input = "abc\nB" },
		},
	},
-- 	{
-- 		source = [==[(?s)^.*B]==],
-- 		tests = {
-- 			{
-- 				input = "abc\nB",
-- 				matches = {{ index = 0, match = "abc\010B" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?m)^.*B]==],
-- 		tests = {
-- 			{
-- 				input = "abc\nB",
-- 				matches = {{ index = 0, match = "B" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?ms)^.*B]==],
-- 		tests = {
-- 			{
-- 				input = "abc\nB",
-- 				matches = {{ index = 0, match = "abc\010B" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?ms)^B]==],
-- 		tests = {
-- 			{
-- 				input = "abc\nB",
-- 				matches = {{ index = 0, match = "B" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?s)B$]==],
-- 		tests = {
-- 			{
-- 				input = "B\n",
-- 				matches = {{ index = 0, match = "B" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]]==],
		tests = {
			{
				input = "123456654321",
				matches = {{ index = 0, match = "123456654321" }},
			},
		},
	},
	{
		source = [==[^\d\d\d\d\d\d\d\d\d\d\d\d]==],
		tests = {
			{
				input = "123456654321",
				matches = {{ index = 0, match = "123456654321" }},
			},
		},
	},
	{
		source = [==[^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]]==],
		tests = {
			{
				input = "123456654321",
				matches = {{ index = 0, match = "123456654321" }},
			},
		},
	},
	{
		source = [==[^[abc]{12}]==],
		tests = {
			{
				input = "abcabcabcabc",
				matches = {{ index = 0, match = "abcabcabcabc" }},
			},
		},
	},
	{
		source = [==[^[a-c]{12}]==],
		tests = {
			{
				input = "abcabcabcabc",
				matches = {{ index = 0, match = "abcabcabcabc" }},
			},
		},
	},
	{
		source = [==[^(a|b|c){12}]==],
		tests = {
			{
				input = "abcabcabcabc",
				matches = {
					{ index = 0, match = "abcabcabcabc" },
					{ index = 1, match = "c" },
				}
			},
		},
	},
	{
		source = [==[^[abcdefghijklmnopqrstuvwxy0123456789]]==],
		tests = {
			{
				input = "n",
				matches = {{ index = 0, match = "n" }},
			},
			{ input = "*** Failers" },
			{ input = "z" },
		},
	},
	{
		source = [==[abcde{0,0}]==],
		tests = {
			{
				input = "abcd",
				matches = {{ index = 0, match = "abcd" }},
			},
			{ input = "*** Failers" },
			{ input = "abce" },
		},
	},
	{
		source = [==[ab[cd]{0,0}e]==],
		tests = {
			{
				input = "abe",
				matches = {{ index = 0, match = "abe" }},
			},
			{ input = "*** Failers" },
			{ input = "abcde" },
		},
	},
	{
		source = [==[ab(c){0,0}d]==],
		tests = {
			-- {
			-- 	input = "abd",
			-- 	matches = {{ index = 0, match = "abd" }},
			-- },
			{ input = "*** Failers" },
			-- { input = "abcd" },
		},
	},
	{
		source = [==[a(b*)]==],
		tests = {
			{
				input = "a",
				matches = {
					{ index = 0, match = "a" },
					{ index = 1, match = "" },
				}
			},
			{
				input = "ab",
				matches = {
					{ index = 0, match = "ab" },
					{ index = 1, match = "b" },
				}
			},
			{
				input = "abbbb",
				matches = {
					{ index = 0, match = "abbbb" },
					{ index = 1, match = "bbbb" },
				}
			},
			{
				input = "*** Failers",
				matches = {
					{ index = 0, match = "a" },
					{ index = 1, match = "" },
				}
			},
			{ input = "bbbbb" },
		},
	},
	{
		source = [==[ab\d{0}e]==],
		tests = {
			{
				input = "abe",
				matches = {{ index = 0, match = "abe" }},
			},
			{ input = "*** Failers" },
			{ input = "ab1e" },
		},
	},
-- 	{
-- 		source = [==["([^\\"]+|\\.)*"]==],
-- 		tests = {
-- 			{
-- 				input = "the \\\"quick\\\" brown fox",
-- 				matches = {
-- 					{ index = 0, match = "\"quick\"" },
-- 					{ index = 1, match = "quick" },
-- 				}
-- 			},
-- 			{
-- 				input = "\\\"the \\\\\"quick\\\\\" brown fox\\\"",
-- 				matches = {
-- 					{ index = 0, match = "\"the \\\"quick\\\" brown fox\"" },
-- 					{ index = 1, match = " brown fox" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[.*?]==],
-- 		flags = "g,aftertext",
-- 		tests = {
-- 			{
-- 				input = "abc",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 			{
-- 				input = "0+ abc",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 			{
-- 				input = "0+ bc",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 			{
-- 				input = "0+ bc",
-- 				matches = {{ index = 0, match = "b" }},
-- 			},
-- 			{
-- 				input = "0+ c",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 			{
-- 				input = "0+ c",
-- 				matches = {{ index = 0, match = "c" }},
-- 			},
-- 			{
-- 				input = "0+",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 			{
-- 				input = "0+",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[\b]==],
-- 		flags = "g,aftertext",
-- 		tests = {
-- 			{
-- 				input = "abc",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 			{
-- 				input = "0+ abc",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 			{
-- 				input = "0+",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[\b]==],
-- 		flags = "g,aftertext",
-- 		tests = {
-- 			{
-- 				input = "abc",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 			{
-- 				input = "0+ abc",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 			{
-- 				input = "0+",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[]==],
-- 		flags = "g",
-- 		tests = {
-- 			{
-- 				input = "abc",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 0, match = "" },
-- 					{ index = 0, match = "" },
-- 					{ index = 0, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
	-- {
	-- 	source = [==[<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>]==],
	-- 	flags = "is",
	-- 	tests = {
	-- 		{
	-- 			input = "<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>",
	-- 			matches = {
	-- 				{ index = 0, match = "<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>" },
	-- 				{ index = 1, match = " BGCOLOR='#DBE9E9'" },
	-- 				{ index = 2, match = " align=left valign=top" },
	-- 				{ index = 3, match = "43." },
	-- 				{ index = 4, match = "<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)" },
	-- 				{ index = 5, match = "" },
	-- 				{ index = 6, match = "" },
	-- 				{ index = 7, match = "<unset>" },
	-- 				{ index = 8, match = " align=left valign=top" },
	-- 				{ index = 9, match = "Lega lstaff.com" },
	-- 				{ index = 10, match = " align=left valign=top" },
	-- 				{ index = 11, match = "CA - Statewide" },
	-- 			}
	-- 		},
	-- 	},
	-- },
	{
		source = [==[a[^a]b]==],
		tests = {
			{
				input = "acb",
				matches = {{ index = 0, match = "acb" }},
			},
			{
				input = "a\nb",
				matches = {{ index = 0, match = "a\010b" }},
			},
		},
	},
	{
		source = [==[a.b]==],
		tests = {
			{
				input = "acb",
				matches = {{ index = 0, match = "acb" }},
			},
			{ input = "*** Failers" },
			{ input = "a\nb" },
		},
	},
	{
		source = [==[a[^a]b]==],
		flags = "s",
		tests = {
			{
				input = "acb",
				matches = {{ index = 0, match = "acb" }},
			},
			{
				input = "a\nb",
				matches = {{ index = 0, match = "a\010b" }},
			},
		},
	},
	{
		source = [==[a.b]==],
		flags = "s",
		tests = {
			{
				input = "acb",
				matches = {{ index = 0, match = "acb" }},
			},
			-- {
			-- 	input = "a\nb",
			-- 	matches = {{ index = 0, match = "a\010b" }},
			-- },
		},
	},
	{
		source = [==[^(b+?|a){1,2}?c]==],
		tests = {
			{
				input = "bac",
				matches = {
					{ index = 0, match = "bac" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "bbac",
				matches = {
					{ index = 0, match = "bbac" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "bbbac",
				matches = {
					{ index = 0, match = "bbbac" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "bbbbac",
				matches = {
					{ index = 0, match = "bbbbac" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "bbbbbac",
				matches = {
					{ index = 0, match = "bbbbbac" },
					{ index = 1, match = "a" },
				}
			},
		},
	},
	{
		source = [==[^(b+|a){1,2}?c]==],
		tests = {
			{
				input = "bac",
				matches = {
					{ index = 0, match = "bac" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "bbac",
				matches = {
					{ index = 0, match = "bbac" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "bbbac",
				matches = {
					{ index = 0, match = "bbbac" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "bbbbac",
				matches = {
					{ index = 0, match = "bbbbac" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "bbbbbac",
				matches = {
					{ index = 0, match = "bbbbbac" },
					{ index = 1, match = "a" },
				}
			},
		},
	},
	{
		source = [==[(?!\A)x]==],
		flags = "m",
		tests = {
			-- { input = "x\nb\n" },
			{
				input = "a\\bx\n",
				matches = {{ index = 0, match = "x" }},
			},
		},
	},
	{
		source = [==[\x0{ab}]==],
		tests = {
			{
				input = "\0{ab}",
				matches = {{ index = 0, match = "\000{ab}" }},
			},
		},
	},
	{
		source = [==[(A|B)*?CD]==],
		tests = {
			{
				input = "CD",
				matches = {{ index = 0, match = "CD" }},
			},
		},
	},
	{
		source = [==[(A|B)*CD]==],
		tests = {
			{
				input = "CD",
				matches = {{ index = 0, match = "CD" }},
			},
		},
	},
-- 	{
-- 		source = [==[(AB)*?\1]==],
-- 		tests = {
-- 			{
-- 				input = "ABABAB",
-- 				matches = {
-- 					{ index = 0, match = "ABAB" },
-- 					{ index = 1, match = "AB" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[(AB)*\1]==],
		tests = {
			{
				input = "ABABAB",
				matches = {
					{ index = 0, match = "ABABAB" },
					{ index = 1, match = "AB" },
				}
			},
		},
	},
	{
		source = [==[(?<!bar)foo]==],
		tests = {
			{
				input = "foo",
				matches = {{ index = 0, match = "foo" }},
			},
			{
				input = "catfood",
				matches = {{ index = 0, match = "foo" }},
			},
			{
				input = "arfootle",
				matches = {{ index = 0, match = "foo" }},
			},
			{
				input = "rfoosh",
				matches = {{ index = 0, match = "foo" }},
			},
			{ input = "*** Failers" },
			{ input = "barfoo" },
			{ input = "towbarfoo" },
		},
	},
	{
		source = [==[\w{3}(?<!bar)foo]==],
		tests = {
			{
				input = "catfood",
				matches = {{ index = 0, match = "catfoo" }},
			},
			{ input = "*** Failers" },
			{ input = "foo" },
			{ input = "barfoo" },
			{ input = "towbarfoo" },
		},
	},
-- 	{
-- 		source = [==[(?<=(foo)a)bar]==],
-- 		tests = {
-- 			{
-- 				input = "fooabar",
-- 				matches = {
-- 					{ index = 0, match = "bar" },
-- 					{ index = 1, match = "foo" },
-- 				}
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "bar" },
-- 			{ input = "foobbar" },
-- 		},
-- 	},
	{
		source = [==[\Aabc\z]==],
		flags = "m",
		tests = {
			-- {
			-- 	input = "abc",
			-- 	matches = {{ index = 0, match = "abc" }},
			-- },
			{ input = "*** Failers" },
			{ input = "abc\n" },
			{ input = "qqq\nabc" },
			{ input = "abc\nzzz" },
			{ input = "qqq\nabc\nzzz" },
		},
	},
	{
		source = [==[(?>(\.\d\d[1-9]?))\d+]==],
		tests = {
			-- {
			-- 	input = "1.230003938",
			-- 	matches = {
			-- 		{ index = 0, match = ".230003938" },
			-- 		{ index = 1, match = ".23" },
			-- 	}
			-- },
			-- {
			-- 	input = "1.875000282",
			-- 	matches = {
			-- 		{ index = 0, match = ".875000282" },
			-- 		{ index = 1, match = ".875" },
			-- 	}
			-- },
			{ input = "*** Failers" },
			{ input = "1.235" },
		},
	},
	{
		source = [==[^((?>\w+)|(?>\s+))*$]==],
		tests = {
			{
				input = "now is the time for all good men to come to the aid of the party",
				matches = {
					{ index = 0, match = "now is the time for all good men to come to the aid of the party" },
					{ index = 1, match = "party" },
				}
			},
			{ input = "*** Failers" },
			{ input = "this is not a line with only words and spaces!" },
		},
	},
	{
		source = [==[(\d+)(\w)]==],
		tests = {
			{
				input = "12345a",
				matches = {
					{ index = 0, match = "12345a" },
					{ index = 1, match = "12345" },
					{ index = 2, match = "a" },
				}
			},
			{
				input = "12345+",
				matches = {
					{ index = 0, match = "12345" },
					{ index = 1, match = "1234" },
					{ index = 2, match = "5" },
				}
			},
		},
	},
	{
		source = [==[((?>\d+))(\w)]==],
		tests = {
			{
				input = "12345a",
				matches = {
					{ index = 0, match = "12345a" },
					{ index = 1, match = "12345" },
					{ index = 2, match = "a" },
				}
			},
			{ input = "*** Failers" },
			{ input = "12345+" },
		},
	},
	{
		source = [==[(?>a+)b]==],
		tests = {
			{
				input = "aaab",
				matches = {{ index = 0, match = "aaab" }},
			},
		},
	},
	{
		source = [==[((?>a+)b)]==],
		tests = {
			{
				input = "aaab",
				matches = {
					{ index = 0, match = "aaab" },
					{ index = 1, match = "aaab" },
				}
			},
		},
	},
-- 	{
-- 		source = [==[(?>(a+))b]==],
-- 		tests = {
-- 			{
-- 				input = "aaab",
-- 				matches = {
-- 					{ index = 0, match = "aaab" },
-- 					{ index = 1, match = "aaa" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?>b)+]==],
-- 		tests = {
-- 			{
-- 				input = "aaabbbccc",
-- 				matches = {{ index = 0, match = "bbb" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?>a+|b+|c+)*c]==],
-- 		tests = {
-- 			{
-- 				input = "aaabbbbccccd",
-- 				matches = {{ index = 0, match = "aaabbbbc" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[((?>[^()]+)|\([^()]*\))+]==],
		tests = {
			{
				input = "((abc(ade)ufh()()x",
				matches = {
					{ index = 0, match = "abc(ade)ufh()()x" },
					{ index = 1, match = "x" },
				}
			},
		},
	},
	{
		source = [==[\(((?>[^()]+)|\([^()]+\))+\)]==],
		tests = {
			{
				input = "(abc)",
				matches = {
					{ index = 0, match = "(abc)" },
					{ index = 1, match = "abc" },
				}
			},
			{
				input = "(abc(def)xyz)",
				matches = {
					{ index = 0, match = "(abc(def)xyz)" },
					{ index = 1, match = "xyz" },
				}
			},
			{ input = "*** Failers" },
			{ input = "((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" },
		},
	},
-- 	{
-- 		source = [==[a(?-i)b]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ab",
-- 				matches = {{ index = 0, match = "ab" }},
-- 			},
-- 			{
-- 				input = "Ab",
-- 				matches = {{ index = 0, match = "Ab" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "aB" },
-- 			{ input = "AB" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(a (?x)b c)d e]==],
-- 		tests = {
-- 			{
-- 				input = "a bcd e",
-- 				matches = {
-- 					{ index = 0, match = "a bcd e" },
-- 					{ index = 1, match = "a bc" },
-- 				}
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "a b cd e" },
-- 			{ input = "abcd e" },
-- 			{ input = "a bcde" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(a b(?x)c d (?-x)e f)]==],
-- 		tests = {
-- 			{
-- 				input = "a bcde f",
-- 				matches = {
-- 					{ index = 0, match = "a bcde f" },
-- 					{ index = 1, match = "a bcde f" },
-- 				}
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "abcdef" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(a(?i)b)c]==],
-- 		tests = {
-- 			{
-- 				input = "abc",
-- 				matches = {
-- 					{ index = 0, match = "abc" },
-- 					{ index = 1, match = "ab" },
-- 				}
-- 			},
-- 			{
-- 				input = "aBc",
-- 				matches = {
-- 					{ index = 0, match = "aBc" },
-- 					{ index = 1, match = "aB" },
-- 				}
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "abC" },
-- 			{ input = "aBC" },
-- 			{ input = "Abc" },
-- 			{ input = "ABc" },
-- 			{ input = "ABC" },
-- 			{ input = "AbC" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[a(?i:b)c]==],
-- 		tests = {
-- 			{
-- 				input = "abc",
-- 				matches = {{ index = 0, match = "abc" }},
-- 			},
-- 			{
-- 				input = "aBc",
-- 				matches = {{ index = 0, match = "aBc" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "ABC" },
-- 			{ input = "abC" },
-- 			{ input = "aBC" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[a(?i:b)*c]==],
-- 		tests = {
-- 			{
-- 				input = "aBc",
-- 				matches = {{ index = 0, match = "aBc" }},
-- 			},
-- 			{
-- 				input = "aBBc",
-- 				matches = {{ index = 0, match = "aBBc" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "aBC" },
-- 			{ input = "aBBC" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[a(?=b(?i)c)\w\wd]==],
-- 		tests = {
-- 			{
-- 				input = "abcd",
-- 				matches = {{ index = 0, match = "abcd" }},
-- 			},
-- 			{
-- 				input = "abCd",
-- 				matches = {{ index = 0, match = "abCd" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "aBCd" },
-- 			{ input = "abcD" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?s-i:more.*than).*million]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "more than million",
-- 				matches = {{ index = 0, match = "more than million" }},
-- 			},
-- 			{
-- 				input = "more than MILLION",
-- 				matches = {{ index = 0, match = "more than MILLION" }},
-- 			},
-- 			{
-- 				input = "more \n than Million",
-- 				matches = {{ index = 0, match = "more \010 than Million" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "MORE THAN MILLION" },
-- 			{ input = "more \n than \n million" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?:(?s-i)more.*than).*million]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "more than million",
-- 				matches = {{ index = 0, match = "more than million" }},
-- 			},
-- 			{
-- 				input = "more than MILLION",
-- 				matches = {{ index = 0, match = "more than MILLION" }},
-- 			},
-- 			{
-- 				input = "more \n than Million",
-- 				matches = {{ index = 0, match = "more \010 than Million" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "MORE THAN MILLION" },
-- 			{ input = "more \n than \n million" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?>a(?i)b+)+c]==],
-- 		tests = {
-- 			{
-- 				input = "abc",
-- 				matches = {{ index = 0, match = "abc" }},
-- 			},
-- 			{
-- 				input = "aBbc",
-- 				matches = {{ index = 0, match = "aBbc" }},
-- 			},
-- 			{
-- 				input = "aBBc",
-- 				matches = {{ index = 0, match = "aBBc" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "Abc" },
-- 			{ input = "abAb" },
-- 			{ input = "abbC" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?=a(?i)b)\w\wc]==],
-- 		tests = {
-- 			{
-- 				input = "abc",
-- 				matches = {{ index = 0, match = "abc" }},
-- 			},
-- 			{
-- 				input = "aBc",
-- 				matches = {{ index = 0, match = "aBc" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "Ab" },
-- 			{ input = "abC" },
-- 			{ input = "aBC" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?<=a(?i)b)(\w\w)c]==],
-- 		tests = {
-- 			{
-- 				input = "abxxc",
-- 				matches = {
-- 					{ index = 0, match = "xxc" },
-- 					{ index = 1, match = "xx" },
-- 				}
-- 			},
-- 			{
-- 				input = "aBxxc",
-- 				matches = {
-- 					{ index = 0, match = "xxc" },
-- 					{ index = 1, match = "xx" },
-- 				}
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "Abxxc" },
-- 			{ input = "ABxxc" },
-- 			{ input = "abxxC" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?:(a)|b)(?(1)A|B)]==],
-- 		tests = {
-- 			{
-- 				input = "aA",
-- 				matches = {
-- 					{ index = 0, match = "aA" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 			{
-- 				input = "bB",
-- 				matches = {{ index = 0, match = "bB" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "aB" },
-- 			{ input = "bA" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(a)?(?(1)a|b)+$]==],
-- 		tests = {
-- 			{
-- 				input = "aa",
-- 				matches = {
-- 					{ index = 0, match = "aa" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 			{
-- 				input = "b",
-- 				matches = {{ index = 0, match = "b" }},
-- 			},
-- 			{
-- 				input = "bb",
-- 				matches = {{ index = 0, match = "bb" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "ab" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(?(?=abc)\w{3}:|\d\d)]==],
-- 		tests = {
-- 			{
-- 				input = "abc:",
-- 				matches = {{ index = 0, match = "abc:" }},
-- 			},
-- 			{
-- 				input = "12",
-- 				matches = {{ index = 0, match = "12" }},
-- 			},
-- 			{
-- 				input = "123",
-- 				matches = {{ index = 0, match = "12" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "xyz" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(?(?!abc)\d\d|\w{3}:)$]==],
-- 		tests = {
-- 			{
-- 				input = "abc:",
-- 				matches = {{ index = 0, match = "abc:" }},
-- 			},
-- 			{
-- 				input = "12",
-- 				matches = {{ index = 0, match = "12" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "123" },
-- 			{ input = "xyz" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?(?<=foo)bar|cat)]==],
-- 		tests = {
-- 			{
-- 				input = "foobar",
-- 				matches = {{ index = 0, match = "bar" }},
-- 			},
-- 			{
-- 				input = "cat",
-- 				matches = {{ index = 0, match = "cat" }},
-- 			},
-- 			{
-- 				input = "fcat",
-- 				matches = {{ index = 0, match = "cat" }},
-- 			},
-- 			{
-- 				input = "focat",
-- 				matches = {{ index = 0, match = "cat" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "foocat" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?(?<!foo)cat|bar)]==],
-- 		tests = {
-- 			{
-- 				input = "foobar",
-- 				matches = {{ index = 0, match = "bar" }},
-- 			},
-- 			{
-- 				input = "cat",
-- 				matches = {{ index = 0, match = "cat" }},
-- 			},
-- 			{
-- 				input = "fcat",
-- 				matches = {{ index = 0, match = "cat" }},
-- 			},
-- 			{
-- 				input = "focat",
-- 				matches = {{ index = 0, match = "cat" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "foocat" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[( \( )? [^()]+ (?(1) \) |) ]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "abcd",
-- 				matches = {{ index = 0, match = "abcd" }},
-- 			},
-- 			{
-- 				input = "(abcd)",
-- 				matches = {
-- 					{ index = 0, match = "(abcd)" },
-- 					{ index = 1, match = "(" },
-- 				}
-- 			},
-- 			{
-- 				input = "the quick (abcd) fox",
-- 				matches = {{ index = 0, match = "the quick" }},
-- 			},
-- 			{
-- 				input = "(abcd",
-- 				matches = {{ index = 0, match = "abcd" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[( \( )? [^()]+ (?(1) \) ) ]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "abcd",
-- 				matches = {{ index = 0, match = "abcd" }},
-- 			},
-- 			{
-- 				input = "(abcd)",
-- 				matches = {
-- 					{ index = 0, match = "(abcd)" },
-- 					{ index = 1, match = "(" },
-- 				}
-- 			},
-- 			{
-- 				input = "the quick (abcd) fox",
-- 				matches = {{ index = 0, match = "the quick" }},
-- 			},
-- 			{
-- 				input = "(abcd",
-- 				matches = {{ index = 0, match = "abcd" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(?(2)a|(1)(2))+$]==],
-- 		tests = {
-- 			{
-- 				input = "12",
-- 				matches = {
-- 					{ index = 0, match = "12" },
-- 					{ index = 1, match = "1" },
-- 					{ index = 2, match = "2" },
-- 				}
-- 			},
-- 			{
-- 				input = "12a",
-- 				matches = {
-- 					{ index = 0, match = "12a" },
-- 					{ index = 1, match = "1" },
-- 					{ index = 2, match = "2" },
-- 				}
-- 			},
-- 			{
-- 				input = "12aa",
-- 				matches = {
-- 					{ index = 0, match = "12aa" },
-- 					{ index = 1, match = "1" },
-- 					{ index = 2, match = "2" },
-- 				}
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "1234" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?i)blah)\s+\1]==],
-- 		tests = {
-- 			{
-- 				input = "blah blah",
-- 				matches = {
-- 					{ index = 0, match = "blah blah" },
-- 					{ index = 1, match = "blah" },
-- 				}
-- 			},
-- 			{
-- 				input = "BLAH BLAH",
-- 				matches = {
-- 					{ index = 0, match = "BLAH BLAH" },
-- 					{ index = 1, match = "BLAH" },
-- 				}
-- 			},
-- 			{
-- 				input = "Blah Blah",
-- 				matches = {
-- 					{ index = 0, match = "Blah Blah" },
-- 					{ index = 1, match = "Blah" },
-- 				}
-- 			},
-- 			{
-- 				input = "blaH blaH",
-- 				matches = {
-- 					{ index = 0, match = "blaH blaH" },
-- 					{ index = 1, match = "blaH" },
-- 				}
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "blah BLAH" },
-- 			{ input = "Blah blah" },
-- 			{ input = "blaH blah" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?i)blah)\s+(?i:\1)]==],
-- 		tests = {
-- 			{
-- 				input = "blah blah",
-- 				matches = {
-- 					{ index = 0, match = "blah blah" },
-- 					{ index = 1, match = "blah" },
-- 				}
-- 			},
-- 			{
-- 				input = "BLAH BLAH",
-- 				matches = {
-- 					{ index = 0, match = "BLAH BLAH" },
-- 					{ index = 1, match = "BLAH" },
-- 				}
-- 			},
-- 			{
-- 				input = "Blah Blah",
-- 				matches = {
-- 					{ index = 0, match = "Blah Blah" },
-- 					{ index = 1, match = "Blah" },
-- 				}
-- 			},
-- 			{
-- 				input = "blaH blaH",
-- 				matches = {
-- 					{ index = 0, match = "blaH blaH" },
-- 					{ index = 1, match = "blaH" },
-- 				}
-- 			},
-- 			{
-- 				input = "blah BLAH",
-- 				matches = {
-- 					{ index = 0, match = "blah BLAH" },
-- 					{ index = 1, match = "blah" },
-- 				}
-- 			},
-- 			{
-- 				input = "Blah blah",
-- 				matches = {
-- 					{ index = 0, match = "Blah blah" },
-- 					{ index = 1, match = "Blah" },
-- 				}
-- 			},
-- 			{
-- 				input = "blaH blah",
-- 				matches = {
-- 					{ index = 0, match = "blaH blah" },
-- 					{ index = 1, match = "blaH" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[(?>a*)*]==],
		tests = {
			{
				input = "a",
				matches = {{ index = 0, match = "a" }},
			},
			{
				input = "aa",
				matches = {{ index = 0, match = "aa" }},
			},
			{
				input = "aaaa",
				matches = {{ index = 0, match = "aaaa" }},
			},
		},
	},
-- 	{
-- 		source = [==[(abc|)+]==],
-- 		tests = {
-- 			{
-- 				input = "abc",
-- 				matches = {
-- 					{ index = 0, match = "abc" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "abcabc",
-- 				matches = {
-- 					{ index = 0, match = "abcabc" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "abcabcabc",
-- 				matches = {
-- 					{ index = 0, match = "abcabcabc" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "xyz",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[([a]*)*]==],
-- 		tests = {
-- 			{
-- 				input = "a",
-- 				matches = {
-- 					{ index = 0, match = "a" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "aaaaa",
-- 				matches = {
-- 					{ index = 0, match = "aaaaa" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[([ab]*)*]==],
-- 		tests = {
-- 			{
-- 				input = "a",
-- 				matches = {
-- 					{ index = 0, match = "a" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "b",
-- 				matches = {
-- 					{ index = 0, match = "b" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "ababab",
-- 				matches = {
-- 					{ index = 0, match = "ababab" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "aaaabcde",
-- 				matches = {
-- 					{ index = 0, match = "aaaab" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "bbbb",
-- 				matches = {
-- 					{ index = 0, match = "bbbb" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[([^a]*)*]==],
-- 		tests = {
-- 			{
-- 				input = "b",
-- 				matches = {
-- 					{ index = 0, match = "b" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "bbbb",
-- 				matches = {
-- 					{ index = 0, match = "bbbb" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "aaa",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[([^ab]*)*]==],
-- 		tests = {
-- 			{
-- 				input = "cccc",
-- 				matches = {
-- 					{ index = 0, match = "cccc" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "abab",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[([a]*?)*]==],
-- 		tests = {
-- 			{
-- 				input = "a",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "aaaa",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[([ab]*?)*]==],
-- 		tests = {
-- 			{
-- 				input = "a",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "b",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "abab",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "baba",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[([^a]*?)*]==],
-- 		tests = {
-- 			{
-- 				input = "b",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "bbbb",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "aaa",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[([^ab]*?)*]==],
-- 		tests = {
-- 			{
-- 				input = "c",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "cccc",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "baba",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?>a*)*]==],
-- 		tests = {
-- 			{
-- 				input = "a",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 			{
-- 				input = "aaabcde",
-- 				matches = {{ index = 0, match = "aaa" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?>a*))*]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaa",
-- 				matches = {
-- 					{ index = 0, match = "aaaaa" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "aabbaa",
-- 				matches = {
-- 					{ index = 0, match = "aa" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?>a*?))*]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaa",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "aabbaa",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?(?=[^a-z]+[a-z])  \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} ) ]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "12-sep-98",
-- 				matches = {{ index = 0, match = "12-sep-98" }},
-- 			},
-- 			{
-- 				input = "12-09-98",
-- 				matches = {{ index = 0, match = "12-09-98" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "sep-12-98" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?<=(foo))bar\1]==],
-- 		tests = {
-- 			{
-- 				input = "foobarfoo",
-- 				matches = {
-- 					{ index = 0, match = "barfoo" },
-- 					{ index = 1, match = "foo" },
-- 				}
-- 			},
-- 			{
-- 				input = "foobarfootling",
-- 				matches = {
-- 					{ index = 0, match = "barfoo" },
-- 					{ index = 1, match = "foo" },
-- 				}
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "foobar" },
-- 			{ input = "barfoo" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?i:saturday|sunday)]==],
-- 		tests = {
-- 			{
-- 				input = "saturday",
-- 				matches = {{ index = 0, match = "saturday" }},
-- 			},
-- 			{
-- 				input = "sunday",
-- 				matches = {{ index = 0, match = "sunday" }},
-- 			},
-- 			{
-- 				input = "Saturday",
-- 				matches = {{ index = 0, match = "Saturday" }},
-- 			},
-- 			{
-- 				input = "Sunday",
-- 				matches = {{ index = 0, match = "Sunday" }},
-- 			},
-- 			{
-- 				input = "SATURDAY",
-- 				matches = {{ index = 0, match = "SATURDAY" }},
-- 			},
-- 			{
-- 				input = "SUNDAY",
-- 				matches = {{ index = 0, match = "SUNDAY" }},
-- 			},
-- 			{
-- 				input = "SunDay",
-- 				matches = {{ index = 0, match = "SunDay" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(a(?i)bc|BB)x]==],
-- 		tests = {
-- 			{
-- 				input = "abcx",
-- 				matches = {
-- 					{ index = 0, match = "abcx" },
-- 					{ index = 1, match = "abc" },
-- 				}
-- 			},
-- 			{
-- 				input = "aBCx",
-- 				matches = {
-- 					{ index = 0, match = "aBCx" },
-- 					{ index = 1, match = "aBC" },
-- 				}
-- 			},
-- 			{
-- 				input = "bbx",
-- 				matches = {
-- 					{ index = 0, match = "bbx" },
-- 					{ index = 1, match = "bb" },
-- 				}
-- 			},
-- 			{
-- 				input = "BBx",
-- 				matches = {
-- 					{ index = 0, match = "BBx" },
-- 					{ index = 1, match = "BB" },
-- 				}
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "abcX" },
-- 			{ input = "aBCX" },
-- 			{ input = "bbX" },
-- 			{ input = "BBX" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^([ab](?i)[cd]|[ef])]==],
-- 		tests = {
-- 			{
-- 				input = "ac",
-- 				matches = {
-- 					{ index = 0, match = "ac" },
-- 					{ index = 1, match = "ac" },
-- 				}
-- 			},
-- 			{
-- 				input = "aC",
-- 				matches = {
-- 					{ index = 0, match = "aC" },
-- 					{ index = 1, match = "aC" },
-- 				}
-- 			},
-- 			{
-- 				input = "bD",
-- 				matches = {
-- 					{ index = 0, match = "bD" },
-- 					{ index = 1, match = "bD" },
-- 				}
-- 			},
-- 			{
-- 				input = "elephant",
-- 				matches = {
-- 					{ index = 0, match = "e" },
-- 					{ index = 1, match = "e" },
-- 				}
-- 			},
-- 			{
-- 				input = "Europe",
-- 				matches = {
-- 					{ index = 0, match = "E" },
-- 					{ index = 1, match = "E" },
-- 				}
-- 			},
-- 			{
-- 				input = "frog",
-- 				matches = {
-- 					{ index = 0, match = "f" },
-- 					{ index = 1, match = "f" },
-- 				}
-- 			},
-- 			{
-- 				input = "France",
-- 				matches = {
-- 					{ index = 0, match = "F" },
-- 					{ index = 1, match = "F" },
-- 				}
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "Africa" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)]==],
-- 		tests = {
-- 			{
-- 				input = "ab",
-- 				matches = {
-- 					{ index = 0, match = "ab" },
-- 					{ index = 1, match = "ab" },
-- 				}
-- 			},
-- 			{
-- 				input = "aBd",
-- 				matches = {
-- 					{ index = 0, match = "aBd" },
-- 					{ index = 1, match = "aBd" },
-- 				}
-- 			},
-- 			{
-- 				input = "xy",
-- 				matches = {
-- 					{ index = 0, match = "xy" },
-- 					{ index = 1, match = "xy" },
-- 				}
-- 			},
-- 			{
-- 				input = "xY",
-- 				matches = {
-- 					{ index = 0, match = "xY" },
-- 					{ index = 1, match = "xY" },
-- 				}
-- 			},
-- 			{
-- 				input = "zebra",
-- 				matches = {
-- 					{ index = 0, match = "z" },
-- 					{ index = 1, match = "z" },
-- 				}
-- 			},
-- 			{
-- 				input = "Zambesi",
-- 				matches = {
-- 					{ index = 0, match = "Z" },
-- 					{ index = 1, match = "Z" },
-- 				}
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "aCD" },
-- 			{ input = "XY" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?<=foo\n)^bar]==],
-- 		flags = "m",
-- 		tests = {
-- 			{
-- 				input = "foo\nbar",
-- 				matches = {{ index = 0, match = "bar" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "bar" },
-- 			{ input = "baz\nbar" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?<=(?<!foo)bar)baz]==],
-- 		tests = {
-- 			{
-- 				input = "barbaz",
-- 				matches = {{ index = 0, match = "baz" }},
-- 			},
-- 			{
-- 				input = "barbarbaz",
-- 				matches = {{ index = 0, match = "baz" }},
-- 			},
-- 			{
-- 				input = "koobarbaz",
-- 				matches = {{ index = 0, match = "baz" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "baz" },
-- 			{ input = "foobarbaz" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[The cases of aaaa and aaaaaa are missed out below because Perl does things]==],
-- 		tests = {
-- 			{ input = "/differently. We know that odd, and maybe incorrect, things happen with/" },
-- 			{ input = "/recursive references in Perl, as far as 5.11.3 - see some stuff in test #2./" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(a\1?){4}$]==],
-- 		tests = {
-- 			{ input = "a" },
-- 			{ input = "aa" },
-- 			{ input = "aaa" },
-- 			{
-- 				input = "aaaaa",
-- 				matches = {
-- 					{ index = 0, match = "aaaaa" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 			{
-- 				input = "aaaaaaa",
-- 				matches = {
-- 					{ index = 0, match = "aaaaaaa" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 			{ input = "aaaaaaaa" },
-- 			{ input = "aaaaaaaaa" },
-- 			{
-- 				input = "aaaaaaaaaa",
-- 				matches = {
-- 					{ index = 0, match = "aaaaaaaaaa" },
-- 					{ index = 1, match = "aaaa" },
-- 				}
-- 			},
-- 			{ input = "aaaaaaaaaaa" },
-- 			{ input = "aaaaaaaaaaaa" },
-- 			{ input = "aaaaaaaaaaaaa" },
-- 			{ input = "aaaaaaaaaaaaaa" },
-- 			{ input = "aaaaaaaaaaaaaaa" },
-- 			{ input = "aaaaaaaaaaaaaaaa" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(a\1?)(a\1?)(a\2?)(a\3?)$]==],
-- 		tests = {
-- 			{ input = "a" },
-- 			{ input = "aa" },
-- 			{ input = "aaa" },
-- 			{
-- 				input = "aaaa",
-- 				matches = {
-- 					{ index = 0, match = "aaaa" },
-- 					{ index = 1, match = "a" },
-- 					{ index = 2, match = "a" },
-- 					{ index = 3, match = "a" },
-- 					{ index = 4, match = "a" },
-- 				}
-- 			},
-- 			{
-- 				input = "aaaaa",
-- 				matches = {
-- 					{ index = 0, match = "aaaaa" },
-- 					{ index = 1, match = "a" },
-- 					{ index = 2, match = "aa" },
-- 					{ index = 3, match = "a" },
-- 					{ index = 4, match = "a" },
-- 				}
-- 			},
-- 			{
-- 				input = "aaaaaa",
-- 				matches = {
-- 					{ index = 0, match = "aaaaaa" },
-- 					{ index = 1, match = "a" },
-- 					{ index = 2, match = "aa" },
-- 					{ index = 3, match = "a" },
-- 					{ index = 4, match = "aa" },
-- 				}
-- 			},
-- 			{
-- 				input = "aaaaaaa",
-- 				matches = {
-- 					{ index = 0, match = "aaaaaaa" },
-- 					{ index = 1, match = "a" },
-- 					{ index = 2, match = "aa" },
-- 					{ index = 3, match = "aaa" },
-- 					{ index = 4, match = "a" },
-- 				}
-- 			},
-- 			{ input = "aaaaaaaa" },
-- 			{ input = "aaaaaaaaa" },
-- 			{
-- 				input = "aaaaaaaaaa",
-- 				matches = {
-- 					{ index = 0, match = "aaaaaaaaaa" },
-- 					{ index = 1, match = "a" },
-- 					{ index = 2, match = "aa" },
-- 					{ index = 3, match = "aaa" },
-- 					{ index = 4, match = "aaaa" },
-- 				}
-- 			},
-- 			{ input = "aaaaaaaaaaa" },
-- 			{ input = "aaaaaaaaaaaa" },
-- 			{ input = "aaaaaaaaaaaaa" },
-- 			{ input = "aaaaaaaaaaaaaa" },
-- 			{ input = "aaaaaaaaaaaaaaa" },
-- 			{ input = "aaaaaaaaaaaaaaaa" },
-- 		},
-- 	},
	{
		source = [==[The following tests are taken from the Perl 5.005 test suite; some of them]==],
		tests = {
			{ input = "/are compatible with 5.004, but I'd rather not have to sort them out./" },
		},
	},
	{
		source = [==[abc]==],
		tests = {
			{
				input = "abc",
				matches = {{ index = 0, match = "abc" }},
			},
			{
				input = "xabcy",
				matches = {{ index = 0, match = "abc" }},
			},
			{
				input = "ababc",
				matches = {{ index = 0, match = "abc" }},
			},
			{ input = "*** Failers" },
			{ input = "xbc" },
			{ input = "axc" },
			{ input = "abx" },
		},
	},
	{
		source = [==[ab*c]==],
		tests = {
			{
				input = "abc",
				matches = {{ index = 0, match = "abc" }},
			},
		},
	},
	{
		source = [==[ab*bc]==],
		tests = {
			{
				input = "abc",
				matches = {{ index = 0, match = "abc" }},
			},
			{
				input = "abbc",
				matches = {{ index = 0, match = "abbc" }},
			},
			{
				input = "abbbbc",
				matches = {{ index = 0, match = "abbbbc" }},
			},
		},
	},
	{
		source = [==[.{1}]==],
		tests = {
			{
				input = "abbbbc",
				matches = {{ index = 0, match = "a" }},
			},
		},
	},
	{
		source = [==[.{3,4}]==],
		tests = {
			{
				input = "abbbbc",
				matches = {{ index = 0, match = "abbb" }},
			},
		},
	},
	{
		source = [==[ab{0,}bc]==],
		tests = {
			{
				input = "abbbbc",
				matches = {{ index = 0, match = "abbbbc" }},
			},
		},
	},
	{
		source = [==[ab+bc]==],
		tests = {
			{
				input = "abbc",
				matches = {{ index = 0, match = "abbc" }},
			},
			{ input = "*** Failers" },
			{ input = "abc" },
			{ input = "abq" },
		},
	},
	{
		source = [==[ab+bc]==],
		tests = {
			{
				input = "abbbbc",
				matches = {{ index = 0, match = "abbbbc" }},
			},
		},
	},
	{
		source = [==[ab{1,}bc]==],
		tests = {
			{
				input = "abbbbc",
				matches = {{ index = 0, match = "abbbbc" }},
			},
		},
	},
	{
		source = [==[ab{1,3}bc]==],
		tests = {
			{
				input = "abbbbc",
				matches = {{ index = 0, match = "abbbbc" }},
			},
		},
	},
	{
		source = [==[ab{3,4}bc]==],
		tests = {
			{
				input = "abbbbc",
				matches = {{ index = 0, match = "abbbbc" }},
			},
		},
	},
	{
		source = [==[ab{4,5}bc]==],
		tests = {
			{ input = "*** Failers" },
			{ input = "abq" },
			{ input = "abbbbc" },
		},
	},
	{
		source = [==[ab?bc]==],
		tests = {
			{
				input = "abbc",
				matches = {{ index = 0, match = "abbc" }},
			},
			{
				input = "abc",
				matches = {{ index = 0, match = "abc" }},
			},
		},
	},
	{
		source = [==[ab{0,1}bc]==],
		tests = {
			{
				input = "abc",
				matches = {{ index = 0, match = "abc" }},
			},
		},
	},
	{
		source = [==[ab?c]==],
		tests = {
			{
				input = "abc",
				matches = {{ index = 0, match = "abc" }},
			},
		},
	},
	{
		source = [==[ab{0,1}c]==],
		tests = {
			{
				input = "abc",
				matches = {{ index = 0, match = "abc" }},
			},
		},
	},
	{
		source = [==[^abc$]==],
		tests = {
			{
				input = "abc",
				matches = {{ index = 0, match = "abc" }},
			},
			{ input = "*** Failers" },
			{ input = "abbbbc" },
			{ input = "abcc" },
		},
	},
	{
		source = [==[^abc]==],
		tests = {
			{
				input = "abcc",
				matches = {{ index = 0, match = "abc" }},
			},
		},
	},
	{
		source = [==[abc$]==],
		tests = {
			{
				input = "aabc",
				matches = {{ index = 0, match = "abc" }},
			},
			{ input = "*** Failers" },
			{
				input = "aabc",
				matches = {{ index = 0, match = "abc" }},
			},
			{ input = "aabcd" },
		},
	},
	{
		source = [==[^]==],
		tests = {
			{
				input = "abc",
				matches = {{ index = 0, match = "" }},
			},
		},
	},
	{
		source = [==[$]==],
		tests = {
			{
				input = "abc",
				matches = {{ index = 0, match = "" }},
			},
		},
	},
	{
		source = [==[a.c]==],
		tests = {
			{
				input = "abc",
				matches = {{ index = 0, match = "abc" }},
			},
			{
				input = "axc",
				matches = {{ index = 0, match = "axc" }},
			},
		},
	},
	{
		source = [==[a.*c]==],
		tests = {
			{
				input = "axyzc",
				matches = {{ index = 0, match = "axyzc" }},
			},
		},
	},
	{
		source = [==[a[bc]d]==],
		tests = {
			{
				input = "abd",
				matches = {{ index = 0, match = "abd" }},
			},
			{ input = "*** Failers" },
			{ input = "axyzd" },
			{ input = "abc" },
		},
	},
	{
		source = [==[a[b-d]e]==],
		tests = {
			{
				input = "ace",
				matches = {{ index = 0, match = "ace" }},
			},
		},
	},
	{
		source = [==[a[b-d]]==],
		tests = {
			{
				input = "aac",
				matches = {{ index = 0, match = "ac" }},
			},
		},
	},
	{
		source = [==[a[-b]]==],
		tests = {
			{
				input = "a-",
				matches = {{ index = 0, match = "a-" }},
			},
		},
	},
	{
		source = [==[a[b-]]==],
		tests = {
			{
				input = "a-",
				matches = {{ index = 0, match = "a-" }},
			},
		},
	},
	{
		source = [==[a]]==],
		tests = {
			{
				input = "a]",
				matches = {{ index = 0, match = "a]" }},
			},
		},
	},
	{
		source = [==[a[]]b]==],
		tests = {
			{
				input = "a]b",
				matches = {{ index = 0, match = "a]b" }},
			},
		},
	},
	{
		source = [==[a[^bc]d]==],
		tests = {
			{
				input = "aed",
				matches = {{ index = 0, match = "aed" }},
			},
			{ input = "*** Failers" },
			{ input = "abd" },
		},
	},
	{
		source = [==[a[^-b]c]==],
		tests = {
			{
				input = "adc",
				matches = {{ index = 0, match = "adc" }},
			},
		},
	},
	{
		source = [==[a[^]b]c]==],
		tests = {
			{
				input = "adc",
				matches = {{ index = 0, match = "adc" }},
			},
			{ input = "*** Failers" },
			{
				input = "a-c",
				matches = {{ index = 0, match = "a-c" }},
			},
			{ input = "a]c" },
		},
	},
-- 	{
-- 		source = [==[\ba\b]==],
-- 		tests = {
-- 			{
-- 				input = "a-",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 			{
-- 				input = "-a",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 			{
-- 				input = "-a-",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[\by\b]==],
-- 		tests = {
-- 			{ input = "*** Failers" },
-- 			{ input = "xy" },
-- 			{ input = "yz" },
-- 			{ input = "xyz" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[\Ba\B]==],
-- 		tests = {
-- 			{
-- 				input = "*** Failers",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 			{ input = "a-" },
-- 			{ input = "-a" },
-- 			{ input = "-a-" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[\By\b]==],
-- 		tests = {
-- 			{
-- 				input = "xy",
-- 				matches = {{ index = 0, match = "y" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[\by\B]==],
-- 		tests = {
-- 			{
-- 				input = "yz",
-- 				matches = {{ index = 0, match = "y" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[\By\B]==],
-- 		tests = {
-- 			{
-- 				input = "xyz",
-- 				matches = {{ index = 0, match = "y" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[\w]==],
		tests = {
			{
				input = "a",
				matches = {{ index = 0, match = "a" }},
			},
		},
	},
	{
		source = [==[\W]==],
		tests = {
			{
				input = "-",
				matches = {{ index = 0, match = "-" }},
			},
			{
				input = "*** Failers",
				matches = {{ index = 0, match = "*" }},
			},
			{
				input = "-",
				matches = {{ index = 0, match = "-" }},
			},
			{ input = "a" },
		},
	},
	{
		source = [==[a\sb]==],
		tests = {
			{
				input = "a b",
				matches = {{ index = 0, match = "a b" }},
			},
		},
	},
	{
		source = [==[a\Sb]==],
		tests = {
			{
				input = "a-b",
				matches = {{ index = 0, match = "a-b" }},
			},
			{ input = "*** Failers" },
			{
				input = "a-b",
				matches = {{ index = 0, match = "a-b" }},
			},
			{ input = "a b" },
		},
	},
	{
		source = [==[\d]==],
		tests = {
			{
				input = "1",
				matches = {{ index = 0, match = "1" }},
			},
		},
	},
	{
		source = [==[\D]==],
		tests = {
			{
				input = "-",
				matches = {{ index = 0, match = "-" }},
			},
			{
				input = "*** Failers",
				matches = {{ index = 0, match = "*" }},
			},
			{
				input = "-",
				matches = {{ index = 0, match = "-" }},
			},
			{ input = "1" },
		},
	},
	{
		source = [==[[\w]]==],
		tests = {
			{
				input = "a",
				matches = {{ index = 0, match = "a" }},
			},
		},
	},
	{
		source = [==[[\W]]==],
		tests = {
			{
				input = "-",
				matches = {{ index = 0, match = "-" }},
			},
			{
				input = "*** Failers",
				matches = {{ index = 0, match = "*" }},
			},
			{
				input = "-",
				matches = {{ index = 0, match = "-" }},
			},
			{ input = "a" },
		},
	},
	{
		source = [==[a[\s]b]==],
		tests = {
			{
				input = "a b",
				matches = {{ index = 0, match = "a b" }},
			},
		},
	},
	{
		source = [==[a[\S]b]==],
		tests = {
			{
				input = "a-b",
				matches = {{ index = 0, match = "a-b" }},
			},
			{ input = "*** Failers" },
			{
				input = "a-b",
				matches = {{ index = 0, match = "a-b" }},
			},
			{ input = "a b" },
		},
	},
	{
		source = [==[[\d]]==],
		tests = {
			{
				input = "1",
				matches = {{ index = 0, match = "1" }},
			},
		},
	},
	{
		source = [==[[\D]]==],
		tests = {
			{
				input = "-",
				matches = {{ index = 0, match = "-" }},
			},
			{
				input = "*** Failers",
				matches = {{ index = 0, match = "*" }},
			},
			{
				input = "-",
				matches = {{ index = 0, match = "-" }},
			},
			{ input = "1" },
		},
	},
	{
		source = [==[ab|cd]==],
		tests = {
			{
				input = "abc",
				matches = {{ index = 0, match = "ab" }},
			},
			{
				input = "abcd",
				matches = {{ index = 0, match = "ab" }},
			},
		},
	},
	{
		source = [==[()ef]==],
		tests = {
			{
				input = "def",
				matches = {
					{ index = 0, match = "ef" },
					{ index = 1, match = "" },
				}
			},
		},
	},
	{
		source = [==[a\(b]==],
		tests = {
			{
				input = "a(b",
				matches = {{ index = 0, match = "a(b" }},
			},
		},
	},
	{
		source = [==[a\(*b]==],
		tests = {
			{
				input = "ab",
				matches = {{ index = 0, match = "ab" }},
			},
			{
				input = "a((b",
				matches = {{ index = 0, match = "a((b" }},
			},
		},
	},
	{
		source = [==[a\\b]==],
		tests = {
			{
				input = "a\\b",
				matches = {{ index = 0, match = "a\\b" }},
			},
		},
	},
	{
		source = [==[((a))]==],
		tests = {
			{
				input = "abc",
				matches = {
					{ index = 0, match = "a" },
					{ index = 1, match = "a" },
					{ index = 2, match = "a" },
				}
			},
		},
	},
	{
		source = [==[(a)b(c)]==],
		tests = {
			{
				input = "abc",
				matches = {
					{ index = 0, match = "abc" },
					{ index = 1, match = "a" },
					{ index = 2, match = "c" },
				}
			},
		},
	},
	{
		source = [==[a+b+c]==],
		tests = {
			{
				input = "aabbabc",
				matches = {{ index = 0, match = "abc" }},
			},
		},
	},
	{
		source = [==[a{1,}b{1,}c]==],
		tests = {
			{
				input = "aabbabc",
				matches = {{ index = 0, match = "abc" }},
			},
		},
	},
	{
		source = [==[a.+?c]==],
		tests = {
			{
				input = "abcabc",
				matches = {{ index = 0, match = "abc" }},
			},
		},
	},
	{
		source = [==[(a+|b)*]==],
		tests = {
			{
				input = "ab",
				matches = {
					{ index = 0, match = "ab" },
					{ index = 1, match = "b" },
				}
			},
		},
	},
	{
		source = [==[(a+|b){0,}]==],
		tests = {
			{
				input = "ab",
				matches = {
					{ index = 0, match = "ab" },
					{ index = 1, match = "b" },
				}
			},
		},
	},
	{
		source = [==[(a+|b)+]==],
		tests = {
			{
				input = "ab",
				matches = {
					{ index = 0, match = "ab" },
					{ index = 1, match = "b" },
				}
			},
		},
	},
	{
		source = [==[(a+|b){1,}]==],
		tests = {
			{
				input = "ab",
				matches = {
					{ index = 0, match = "ab" },
					{ index = 1, match = "b" },
				}
			},
		},
	},
	{
		source = [==[(a+|b)?]==],
		tests = {
			{
				input = "ab",
				matches = {
					{ index = 0, match = "a" },
					{ index = 1, match = "a" },
				}
			},
		},
	},
	{
		source = [==[(a+|b){0,1}]==],
		tests = {
			{
				input = "ab",
				matches = {
					{ index = 0, match = "a" },
					{ index = 1, match = "a" },
				}
			},
		},
	},
	{
		source = [==[[^ab]*]==],
		tests = {
			{
				input = "cde",
				matches = {{ index = 0, match = "cde" }},
			},
		},
	},
	{
		source = [==[abc]==],
		tests = {
			{ input = "*** Failers" },
			{ input = "b" },
		},
	},
	{
		source = [==[([abc])*d]==],
		tests = {
			{
				input = "abbbcd",
				matches = {
					{ index = 0, match = "abbbcd" },
					{ index = 1, match = "c" },
				}
			},
		},
	},
	{
		source = [==[([abc])*bcd]==],
		tests = {
			{
				input = "abcd",
				matches = {
					{ index = 0, match = "abcd" },
					{ index = 1, match = "a" },
				}
			},
		},
	},
	{
		source = [==[a|b|c|d|e]==],
		tests = {
			{
				input = "e",
				matches = {{ index = 0, match = "e" }},
			},
		},
	},
	{
		source = [==[(a|b|c|d|e)f]==],
		tests = {
			{
				input = "ef",
				matches = {
					{ index = 0, match = "ef" },
					{ index = 1, match = "e" },
				}
			},
		},
	},
	{
		source = [==[abcd*efg]==],
		tests = {
			{
				input = "abcdefg",
				matches = {{ index = 0, match = "abcdefg" }},
			},
		},
	},
	{
		source = [==[ab*]==],
		tests = {
			{
				input = "xabyabbbz",
				matches = {{ index = 0, match = "ab" }},
			},
			{
				input = "xayabbbz",
				matches = {{ index = 0, match = "a" }},
			},
		},
	},
	{
		source = [==[(ab|cd)e]==],
		tests = {
			{
				input = "abcde",
				matches = {
					{ index = 0, match = "cde" },
					{ index = 1, match = "cd" },
				}
			},
		},
	},
	{
		source = [==[[abhgefdc]ij]==],
		tests = {
			{
				input = "hij",
				matches = {{ index = 0, match = "hij" }},
			},
		},
	},
	{
		source = [==[(abc|)ef]==],
		tests = {
			{
				input = "abcdef",
				matches = {
					{ index = 0, match = "ef" },
					{ index = 1, match = "" },
				}
			},
		},
	},
	{
		source = [==[(a|b)c*d]==],
		tests = {
			{
				input = "abcd",
				matches = {
					{ index = 0, match = "bcd" },
					{ index = 1, match = "b" },
				}
			},
		},
	},
	{
		source = [==[(ab|ab*)bc]==],
		tests = {
			{
				input = "abc",
				matches = {
					{ index = 0, match = "abc" },
					{ index = 1, match = "a" },
				}
			},
		},
	},
	{
		source = [==[a([bc]*)c*]==],
		tests = {
			{
				input = "abc",
				matches = {
					{ index = 0, match = "abc" },
					{ index = 1, match = "bc" },
				}
			},
		},
	},
	{
		source = [==[a([bc]*)(c*d)]==],
		tests = {
			{
				input = "abcd",
				matches = {
					{ index = 0, match = "abcd" },
					{ index = 1, match = "bc" },
					{ index = 2, match = "d" },
				}
			},
		},
	},
	{
		source = [==[a([bc]+)(c*d)]==],
		tests = {
			{
				input = "abcd",
				matches = {
					{ index = 0, match = "abcd" },
					{ index = 1, match = "bc" },
					{ index = 2, match = "d" },
				}
			},
		},
	},
	{
		source = [==[a([bc]*)(c+d)]==],
		tests = {
			{
				input = "abcd",
				matches = {
					{ index = 0, match = "abcd" },
					{ index = 1, match = "b" },
					{ index = 2, match = "cd" },
				}
			},
		},
	},
	{
		source = [==[a[bcd]*dcdcde]==],
		tests = {
			{
				input = "adcdcde",
				matches = {{ index = 0, match = "adcdcde" }},
			},
		},
	},
	{
		source = [==[a[bcd]+dcdcde]==],
		tests = {
			{ input = "*** Failers" },
			{ input = "abcde" },
			{ input = "adcdcde" },
		},
	},
	{
		source = [==[(ab|a)b*c]==],
		tests = {
			{
				input = "abc",
				matches = {
					{ index = 0, match = "abc" },
					{ index = 1, match = "ab" },
				}
			},
		},
	},
	{
		source = [==[((a)(b)c)(d)]==],
		tests = {
			{
				input = "abcd",
				matches = {
					{ index = 0, match = "abcd" },
					{ index = 1, match = "abc" },
					{ index = 2, match = "a" },
					{ index = 3, match = "b" },
					{ index = 4, match = "d" },
				}
			},
		},
	},
	{
		source = [==[[a-zA-Z_][a-zA-Z0-9_]*]==],
		tests = {
			{
				input = "alpha",
				matches = {{ index = 0, match = "alpha" }},
			},
		},
	},
	-- {
	-- 	source = [==[^a(bc+|b[eh])g|.h$]==],
	-- 	tests = {
	-- 		{
	-- 			input = "abh",
	-- 			matches = {{ index = 0, match = "bh" }},
	-- 		},
	-- 	},
	-- },
	{
		source = [==[(bc+d$|ef*g.|h?i(j|k))]==],
		tests = {
			{
				input = "effgz",
				matches = {
					{ index = 0, match = "effgz" },
					{ index = 1, match = "effgz" },
				}
			},
			{
				input = "ij",
				matches = {
					{ index = 0, match = "ij" },
					{ index = 1, match = "ij" },
					{ index = 2, match = "j" },
				}
			},
			{
				input = "reffgz",
				matches = {
					{ index = 0, match = "effgz" },
					{ index = 1, match = "effgz" },
				}
			},
			{ input = "*** Failers" },
			{ input = "effg" },
			{ input = "bcdd" },
		},
	},
	{
		source = [==[((((((((((a))))))))))]==],
		tests = {
			{
				input = "a",
				matches = {
					{ index = 0, match = "a" },
					{ index = 1, match = "a" },
					{ index = 2, match = "a" },
					{ index = 3, match = "a" },
					{ index = 4, match = "a" },
					{ index = 5, match = "a" },
					{ index = 6, match = "a" },
					{ index = 7, match = "a" },
					{ index = 8, match = "a" },
					{ index = 9, match = "a" },
					{ index = 10, match = "a" },
				}
			},
		},
	},
	{
		source = [==[((((((((((a))))))))))\10]==],
		tests = {
			{
				input = "aa",
				matches = {
					{ index = 0, match = "aa" },
					{ index = 1, match = "a" },
					{ index = 2, match = "a" },
					{ index = 3, match = "a" },
					{ index = 4, match = "a" },
					{ index = 5, match = "a" },
					{ index = 6, match = "a" },
					{ index = 7, match = "a" },
					{ index = 8, match = "a" },
					{ index = 9, match = "a" },
					{ index = 10, match = "a" },
				}
			},
		},
	},
	{
		source = [==[(((((((((a)))))))))]==],
		tests = {
			{
				input = "a",
				matches = {
					{ index = 0, match = "a" },
					{ index = 1, match = "a" },
					{ index = 2, match = "a" },
					{ index = 3, match = "a" },
					{ index = 4, match = "a" },
					{ index = 5, match = "a" },
					{ index = 6, match = "a" },
					{ index = 7, match = "a" },
					{ index = 8, match = "a" },
					{ index = 9, match = "a" },
				}
			},
		},
	},
	{
		source = [==[multiple words of text]==],
		tests = {
			{ input = "*** Failers" },
			{ input = "aa" },
			{ input = "uh-uh" },
		},
	},
	{
		source = [==[multiple words]==],
		tests = {
			{
				input = "multiple words, yeah",
				matches = {{ index = 0, match = "multiple words" }},
			},
		},
	},
	{
		source = [==[(.*)c(.*)]==],
		tests = {
			{
				input = "abcde",
				matches = {
					{ index = 0, match = "abcde" },
					{ index = 1, match = "ab" },
					{ index = 2, match = "de" },
				}
			},
		},
	},
	{
		source = [==[\((.*), (.*)\)]==],
		tests = {
			{
				input = "(a, b)",
				matches = {
					{ index = 0, match = "(a, b)" },
					{ index = 1, match = "a" },
					{ index = 2, match = "b" },
				}
			},
		},
	},
	{
		source = [==[abcd]==],
		tests = {
			{
				input = "abcd",
				matches = {{ index = 0, match = "abcd" }},
			},
		},
	},
	{
		source = [==[a(bc)d]==],
		tests = {
			{
				input = "abcd",
				matches = {
					{ index = 0, match = "abcd" },
					{ index = 1, match = "bc" },
				}
			},
		},
	},
	{
		source = [==[a[-]?c]==],
		tests = {
			{
				input = "ac",
				matches = {{ index = 0, match = "ac" }},
			},
		},
	},
	{
		source = [==[(abc)\1]==],
		tests = {
			{
				input = "abcabc",
				matches = {
					{ index = 0, match = "abcabc" },
					{ index = 1, match = "abc" },
				}
			},
		},
	},
	{
		source = [==[([a-c]*)\1]==],
		tests = {
			{
				input = "abcabc",
				matches = {
					{ index = 0, match = "abcabc" },
					{ index = 1, match = "abc" },
				}
			},
		},
	},
	{
		source = [==[(a)|\1]==],
		tests = {
			{
				input = "a",
				matches = {
					{ index = 0, match = "a" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "*** Failers",
				matches = {
					{ index = 0, match = "a" },
					{ index = 1, match = "a" },
				}
			},
			{
				input = "ab",
				matches = {
					{ index = 0, match = "a" },
					{ index = 1, match = "a" },
				}
			},
			{ input = "x" },
		},
	},
	{
		source = [==[(([a-c])b*?\2)*]==],
		tests = {
			{
				input = "ababbbcbc",
				matches = {
					{ index = 0, match = "ababb" },
					{ index = 1, match = "bb" },
					{ index = 2, match = "b" },
				}
			},
		},
	},
	{
		source = [==[(([a-c])b*?\2){3}]==],
		tests = {
			{
				input = "ababbbcbc",
				matches = {
					{ index = 0, match = "ababbbcbc" },
					{ index = 1, match = "cbc" },
					{ index = 2, match = "c" },
				}
			},
		},
	},
	{
		source = [==[((\3|b)\2(a)x)+]==],
		tests = {
			{
				input = "aaaxabaxbaaxbbax",
				matches = {
					{ index = 0, match = "bbax" },
					{ index = 1, match = "bbax" },
					{ index = 2, match = "b" },
					{ index = 3, match = "a" },
				}
			},
		},
	},
	{
		source = [==[((\3|b)\2(a)){2,}]==],
		tests = {
			{
				input = "bbaababbabaaaaabbaaaabba",
				matches = {
					{ index = 0, match = "bbaaaabba" },
					{ index = 1, match = "bba" },
					{ index = 2, match = "b" },
					{ index = 3, match = "a" },
				}
			},
		},
	},
	{
		source = [==[abc]==],
		flags = "i",
		tests = {
			-- {
			-- 	input = "ABC",
			-- 	matches = {{ index = 0, match = "ABC" }},
			-- },
			-- {
			-- 	input = "XABCY",
			-- 	matches = {{ index = 0, match = "ABC" }},
			-- },
			-- {
			-- 	input = "ABABC",
			-- 	matches = {{ index = 0, match = "ABC" }},
			-- },
			{ input = "*** Failers" },
			{ input = "aaxabxbaxbbx" },
			{ input = "XBC" },
			{ input = "AXC" },
			{ input = "ABX" },
		},
	},
-- 	{
-- 		source = [==[ab*c]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABC",
-- 				matches = {{ index = 0, match = "ABC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[ab*bc]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABC",
-- 				matches = {{ index = 0, match = "ABC" }},
-- 			},
-- 			{
-- 				input = "ABBC",
-- 				matches = {{ index = 0, match = "ABBC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[ab*?bc]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABBBBC",
-- 				matches = {{ index = 0, match = "ABBBBC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[ab{0,}?bc]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABBBBC",
-- 				matches = {{ index = 0, match = "ABBBBC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[ab+?bc]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABBC",
-- 				matches = {{ index = 0, match = "ABBC" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[ab+bc]==],
		flags = "i",
		tests = {
			{ input = "*** Failers" },
			{ input = "ABC" },
			{ input = "ABQ" },
		},
	},
-- 	{
-- 		source = [==[ab+bc]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABBBBC",
-- 				matches = {{ index = 0, match = "ABBBBC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[ab{1,}?bc]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABBBBC",
-- 				matches = {{ index = 0, match = "ABBBBC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[ab{1,3}?bc]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABBBBC",
-- 				matches = {{ index = 0, match = "ABBBBC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[ab{3,4}?bc]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABBBBC",
-- 				matches = {{ index = 0, match = "ABBBBC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[ab{4,5}?bc]==],
-- 		flags = "i",
-- 		tests = {
-- 			{ input = "*** Failers" },
-- 			{ input = "ABQ" },
-- 			{ input = "ABBBBC" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[ab??bc]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABBC",
-- 				matches = {{ index = 0, match = "ABBC" }},
-- 			},
-- 			{
-- 				input = "ABC",
-- 				matches = {{ index = 0, match = "ABC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[ab{0,1}?bc]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABC",
-- 				matches = {{ index = 0, match = "ABC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[ab??c]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABC",
-- 				matches = {{ index = 0, match = "ABC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[ab{0,1}?c]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABC",
-- 				matches = {{ index = 0, match = "ABC" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[^abc$]==],
		flags = "i",
		tests = {
			-- {
			-- 	input = "ABC",
			-- 	matches = {{ index = 0, match = "ABC" }},
			-- },
			{ input = "*** Failers" },
			{ input = "ABBBBC" },
			{ input = "ABCC" },
		},
	},
-- 	{
-- 		source = [==[^abc]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABCC",
-- 				matches = {{ index = 0, match = "ABC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[abc$]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "AABC",
-- 				matches = {{ index = 0, match = "ABC" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[^]==],
		flags = "i",
		tests = {
			{
				input = "ABC",
				matches = {{ index = 0, match = "" }},
			},
		},
	},
	{
		source = [==[$]==],
		flags = "i",
		tests = {
			{
				input = "ABC",
				matches = {{ index = 0, match = "" }},
			},
		},
	},
-- 	{
-- 		source = [==[a.c]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABC",
-- 				matches = {{ index = 0, match = "ABC" }},
-- 			},
-- 			{
-- 				input = "AXC",
-- 				matches = {{ index = 0, match = "AXC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a.*?c]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "AXYZC",
-- 				matches = {{ index = 0, match = "AXYZC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a.*c]==],
-- 		flags = "i",
-- 		tests = {
-- 			{ input = "*** Failers" },
-- 			{
-- 				input = "AABC",
-- 				matches = {{ index = 0, match = "AABC" }},
-- 			},
-- 			{ input = "AXYZD" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[a[bc]d]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABD",
-- 				matches = {{ index = 0, match = "ABD" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[a[b-d]e]==],
		flags = "i",
		tests = {
			-- {
			-- 	input = "ACE",
			-- 	matches = {{ index = 0, match = "ACE" }},
			-- },
			{ input = "*** Failers" },
			{ input = "ABC" },
			{ input = "ABD" },
		},
	},
-- 	{
-- 		source = [==[a[b-d]]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "AAC",
-- 				matches = {{ index = 0, match = "AC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a[-b]]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "A-",
-- 				matches = {{ index = 0, match = "A-" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a[b-]]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "A-",
-- 				matches = {{ index = 0, match = "A-" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a]]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "A]",
-- 				matches = {{ index = 0, match = "A]" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a[]]b]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "A]B",
-- 				matches = {{ index = 0, match = "A]B" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a[^bc]d]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "AED",
-- 				matches = {{ index = 0, match = "AED" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[a[^-b]c]==],
		flags = "i",
		tests = {
			-- {
			-- 	input = "ADC",
			-- 	matches = {{ index = 0, match = "ADC" }},
			-- },
			{ input = "*** Failers" },
			{ input = "ABD" },
			{ input = "A-C" },
		},
	},
-- 	{
-- 		source = [==[a[^]b]c]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ADC",
-- 				matches = {{ index = 0, match = "ADC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[ab|cd]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABC",
-- 				matches = {{ index = 0, match = "AB" }},
-- 			},
-- 			{
-- 				input = "ABCD",
-- 				matches = {{ index = 0, match = "AB" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[()ef]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "DEF",
-- 				matches = {
-- 					{ index = 0, match = "EF" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[$b]==],
		flags = "i",
		tests = {
			{ input = "*** Failers" },
			{ input = "A]C" },
			{ input = "B" },
		},
	},
-- 	{
-- 		source = [==[a\(b]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "A(B",
-- 				matches = {{ index = 0, match = "A(B" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a\(*b]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "AB",
-- 				matches = {{ index = 0, match = "AB" }},
-- 			},
-- 			{
-- 				input = "A((B",
-- 				matches = {{ index = 0, match = "A((B" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a\\b]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "A\\b",
-- 				matches = {{ index = 0, match = "A\\b" }},
-- 			},
-- 			{
-- 				input = "a\\B",
-- 				matches = {{ index = 0, match = "a\\B" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((a))]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABC",
-- 				matches = {
-- 					{ index = 0, match = "A" },
-- 					{ index = 1, match = "A" },
-- 					{ index = 2, match = "A" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(a)b(c)]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABC",
-- 				matches = {
-- 					{ index = 0, match = "ABC" },
-- 					{ index = 1, match = "A" },
-- 					{ index = 2, match = "C" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a+b+c]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "AABBABC",
-- 				matches = {{ index = 0, match = "ABC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a{1,}b{1,}c]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "AABBABC",
-- 				matches = {{ index = 0, match = "ABC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a.+?c]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABCABC",
-- 				matches = {{ index = 0, match = "ABC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a.*?c]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABCABC",
-- 				matches = {{ index = 0, match = "ABC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a.{0,5}?c]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABCABC",
-- 				matches = {{ index = 0, match = "ABC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(a+|b)*]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "AB",
-- 				matches = {
-- 					{ index = 0, match = "AB" },
-- 					{ index = 1, match = "B" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(a+|b){0,}]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "AB",
-- 				matches = {
-- 					{ index = 0, match = "AB" },
-- 					{ index = 1, match = "B" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(a+|b)+]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "AB",
-- 				matches = {
-- 					{ index = 0, match = "AB" },
-- 					{ index = 1, match = "B" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(a+|b){1,}]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "AB",
-- 				matches = {
-- 					{ index = 0, match = "AB" },
-- 					{ index = 1, match = "B" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(a+|b)?]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "AB",
-- 				matches = {
-- 					{ index = 0, match = "A" },
-- 					{ index = 1, match = "A" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(a+|b){0,1}]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "AB",
-- 				matches = {
-- 					{ index = 0, match = "A" },
-- 					{ index = 1, match = "A" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(a+|b){0,1}?]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "AB",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[[^ab]*]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "CDE",
-- 				matches = {{ index = 0, match = "CDE" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[([abc])*d]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABBBCD",
-- 				matches = {
-- 					{ index = 0, match = "ABBBCD" },
-- 					{ index = 1, match = "C" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[([abc])*bcd]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABCD",
-- 				matches = {
-- 					{ index = 0, match = "ABCD" },
-- 					{ index = 1, match = "A" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a|b|c|d|e]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "E",
-- 				matches = {{ index = 0, match = "E" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(a|b|c|d|e)f]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "EF",
-- 				matches = {
-- 					{ index = 0, match = "EF" },
-- 					{ index = 1, match = "E" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[abcd*efg]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABCDEFG",
-- 				matches = {{ index = 0, match = "ABCDEFG" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[ab*]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "XABYABBBZ",
-- 				matches = {{ index = 0, match = "AB" }},
-- 			},
-- 			{
-- 				input = "XAYABBBZ",
-- 				matches = {{ index = 0, match = "A" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(ab|cd)e]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABCDE",
-- 				matches = {
-- 					{ index = 0, match = "CDE" },
-- 					{ index = 1, match = "CD" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[[abhgefdc]ij]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "HIJ",
-- 				matches = {{ index = 0, match = "HIJ" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(ab|cd)e]==],
-- 		flags = "i",
-- 		tests = {
-- 			{ input = "ABCDE" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(abc|)ef]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABCDEF",
-- 				matches = {
-- 					{ index = 0, match = "EF" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(a|b)c*d]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABCD",
-- 				matches = {
-- 					{ index = 0, match = "BCD" },
-- 					{ index = 1, match = "B" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(ab|ab*)bc]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABC",
-- 				matches = {
-- 					{ index = 0, match = "ABC" },
-- 					{ index = 1, match = "A" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a([bc]*)c*]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABC",
-- 				matches = {
-- 					{ index = 0, match = "ABC" },
-- 					{ index = 1, match = "BC" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a([bc]*)(c*d)]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABCD",
-- 				matches = {
-- 					{ index = 0, match = "ABCD" },
-- 					{ index = 1, match = "BC" },
-- 					{ index = 2, match = "D" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a([bc]+)(c*d)]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABCD",
-- 				matches = {
-- 					{ index = 0, match = "ABCD" },
-- 					{ index = 1, match = "BC" },
-- 					{ index = 2, match = "D" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a([bc]*)(c+d)]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABCD",
-- 				matches = {
-- 					{ index = 0, match = "ABCD" },
-- 					{ index = 1, match = "B" },
-- 					{ index = 2, match = "CD" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a[bcd]*dcdcde]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ADCDCDE",
-- 				matches = {{ index = 0, match = "ADCDCDE" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(ab|a)b*c]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABC",
-- 				matches = {
-- 					{ index = 0, match = "ABC" },
-- 					{ index = 1, match = "AB" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((a)(b)c)(d)]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABCD",
-- 				matches = {
-- 					{ index = 0, match = "ABCD" },
-- 					{ index = 1, match = "ABC" },
-- 					{ index = 2, match = "A" },
-- 					{ index = 3, match = "B" },
-- 					{ index = 4, match = "D" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[[a-zA-Z_][a-zA-Z0-9_]*]==],
		flags = "i",
		tests = {
			{
				input = "ALPHA",
				matches = {{ index = 0, match = "ALPHA" }},
			},
		},
	},
-- 	{
-- 		source = [==[^a(bc+|b[eh])g|.h$]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABH",
-- 				matches = {{ index = 0, match = "BH" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(bc+d$|ef*g.|h?i(j|k))]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "EFFGZ",
-- 				matches = {
-- 					{ index = 0, match = "EFFGZ" },
-- 					{ index = 1, match = "EFFGZ" },
-- 				}
-- 			},
-- 			{
-- 				input = "IJ",
-- 				matches = {
-- 					{ index = 0, match = "IJ" },
-- 					{ index = 1, match = "IJ" },
-- 					{ index = 2, match = "J" },
-- 				}
-- 			},
-- 			{
-- 				input = "REFFGZ",
-- 				matches = {
-- 					{ index = 0, match = "EFFGZ" },
-- 					{ index = 1, match = "EFFGZ" },
-- 				}
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "ADCDCDE" },
-- 			{ input = "EFFG" },
-- 			{ input = "BCDD" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[((((((((((a))))))))))]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "A",
-- 				matches = {
-- 					{ index = 0, match = "A" },
-- 					{ index = 1, match = "A" },
-- 					{ index = 2, match = "A" },
-- 					{ index = 3, match = "A" },
-- 					{ index = 4, match = "A" },
-- 					{ index = 5, match = "A" },
-- 					{ index = 6, match = "A" },
-- 					{ index = 7, match = "A" },
-- 					{ index = 8, match = "A" },
-- 					{ index = 9, match = "A" },
-- 					{ index = 10, match = "A" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((((((((((a))))))))))\10]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "AA",
-- 				matches = {
-- 					{ index = 0, match = "AA" },
-- 					{ index = 1, match = "A" },
-- 					{ index = 2, match = "A" },
-- 					{ index = 3, match = "A" },
-- 					{ index = 4, match = "A" },
-- 					{ index = 5, match = "A" },
-- 					{ index = 6, match = "A" },
-- 					{ index = 7, match = "A" },
-- 					{ index = 8, match = "A" },
-- 					{ index = 9, match = "A" },
-- 					{ index = 10, match = "A" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(((((((((a)))))))))]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "A",
-- 				matches = {
-- 					{ index = 0, match = "A" },
-- 					{ index = 1, match = "A" },
-- 					{ index = 2, match = "A" },
-- 					{ index = 3, match = "A" },
-- 					{ index = 4, match = "A" },
-- 					{ index = 5, match = "A" },
-- 					{ index = 6, match = "A" },
-- 					{ index = 7, match = "A" },
-- 					{ index = 8, match = "A" },
-- 					{ index = 9, match = "A" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "A",
-- 				matches = {
-- 					{ index = 0, match = "A" },
-- 					{ index = 1, match = "A" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "C",
-- 				matches = {
-- 					{ index = 0, match = "C" },
-- 					{ index = 1, match = "C" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[multiple words of text]==],
		flags = "i",
		tests = {
			{ input = "*** Failers" },
			{ input = "AA" },
			{ input = "UH-UH" },
		},
	},
-- 	{
-- 		source = [==[multiple words]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "MULTIPLE WORDS, YEAH",
-- 				matches = {{ index = 0, match = "MULTIPLE WORDS" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(.*)c(.*)]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABCDE",
-- 				matches = {
-- 					{ index = 0, match = "ABCDE" },
-- 					{ index = 1, match = "AB" },
-- 					{ index = 2, match = "DE" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[\((.*), (.*)\)]==],
		flags = "i",
		tests = {
			{
				input = "(A, B)",
				matches = {
					{ index = 0, match = "(A, B)" },
					{ index = 1, match = "A" },
					{ index = 2, match = "B" },
				}
			},
		},
	},
-- 	{
-- 		source = [==[abcd]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABCD",
-- 				matches = {{ index = 0, match = "ABCD" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a(bc)d]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABCD",
-- 				matches = {
-- 					{ index = 0, match = "ABCD" },
-- 					{ index = 1, match = "BC" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a[-]?c]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "AC",
-- 				matches = {{ index = 0, match = "AC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(abc)\1]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABCABC",
-- 				matches = {
-- 					{ index = 0, match = "ABCABC" },
-- 					{ index = 1, match = "ABC" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[([a-c]*)\1]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ABCABC",
-- 				matches = {
-- 					{ index = 0, match = "ABCABC" },
-- 					{ index = 1, match = "ABC" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[a(?!b).]==],
		tests = {
			{
				input = "abad",
				matches = {{ index = 0, match = "ad" }},
			},
		},
	},
	{
		source = [==[a(?=d).]==],
		tests = {
			{
				input = "abad",
				matches = {{ index = 0, match = "ad" }},
			},
		},
	},
	{
		source = [==[a(?=c|d).]==],
		tests = {
			{
				input = "abad",
				matches = {{ index = 0, match = "ad" }},
			},
		},
	},
	{
		source = [==[a(?:b|c|d)(.)]==],
		tests = {
			{
				input = "ace",
				matches = {
					{ index = 0, match = "ace" },
					{ index = 1, match = "e" },
				}
			},
		},
	},
	{
		source = [==[a(?:b|c|d)*(.)]==],
		tests = {
			{
				input = "ace",
				matches = {
					{ index = 0, match = "ace" },
					{ index = 1, match = "e" },
				}
			},
		},
	},
	{
		source = [==[a(?:b|c|d)+?(.)]==],
		tests = {
			{
				input = "ace",
				matches = {
					{ index = 0, match = "ace" },
					{ index = 1, match = "e" },
				}
			},
			{
				input = "acdbcdbe",
				matches = {
					{ index = 0, match = "acd" },
					{ index = 1, match = "d" },
				}
			},
		},
	},
	{
		source = [==[a(?:b|c|d)+(.)]==],
		tests = {
			{
				input = "acdbcdbe",
				matches = {
					{ index = 0, match = "acdbcdbe" },
					{ index = 1, match = "e" },
				}
			},
		},
	},
	{
		source = [==[a(?:b|c|d){2}(.)]==],
		tests = {
			{
				input = "acdbcdbe",
				matches = {
					{ index = 0, match = "acdb" },
					{ index = 1, match = "b" },
				}
			},
		},
	},
	{
		source = [==[a(?:b|c|d){4,5}(.)]==],
		tests = {
			{
				input = "acdbcdbe",
				matches = {
					{ index = 0, match = "acdbcdb" },
					{ index = 1, match = "b" },
				}
			},
		},
	},
	{
		source = [==[a(?:b|c|d){4,5}?(.)]==],
		tests = {
			{
				input = "acdbcdbe",
				matches = {
					{ index = 0, match = "acdbcd" },
					{ index = 1, match = "d" },
				}
			},
		},
	},
	{
		source = [==[((foo)|(bar))*]==],
		tests = {
			{
				input = "foobar",
				matches = {
					{ index = 0, match = "foobar" },
					{ index = 1, match = "bar" },
					{ index = 2, match = "foo" },
					{ index = 3, match = "bar" },
				}
			},
		},
	},
	{
		source = [==[a(?:b|c|d){6,7}(.)]==],
		tests = {
			{
				input = "acdbcdbe",
				matches = {
					{ index = 0, match = "acdbcdbe" },
					{ index = 1, match = "e" },
				}
			},
		},
	},
	{
		source = [==[a(?:b|c|d){6,7}?(.)]==],
		tests = {
			{
				input = "acdbcdbe",
				matches = {
					{ index = 0, match = "acdbcdbe" },
					{ index = 1, match = "e" },
				}
			},
		},
	},
	{
		source = [==[a(?:b|c|d){5,6}(.)]==],
		tests = {
			{
				input = "acdbcdbe",
				matches = {
					{ index = 0, match = "acdbcdbe" },
					{ index = 1, match = "e" },
				}
			},
		},
	},
	{
		source = [==[a(?:b|c|d){5,6}?(.)]==],
		tests = {
			{
				input = "acdbcdbe",
				matches = {
					{ index = 0, match = "acdbcdb" },
					{ index = 1, match = "b" },
				}
			},
		},
	},
	{
		source = [==[a(?:b|c|d){5,7}(.)]==],
		tests = {
			{
				input = "acdbcdbe",
				matches = {
					{ index = 0, match = "acdbcdbe" },
					{ index = 1, match = "e" },
				}
			},
		},
	},
	{
		source = [==[a(?:b|c|d){5,7}?(.)]==],
		tests = {
			{
				input = "acdbcdbe",
				matches = {
					{ index = 0, match = "acdbcdb" },
					{ index = 1, match = "b" },
				}
			},
		},
	},
	{
		source = [==[a(?:b|(c|e){1,2}?|d)+?(.)]==],
		tests = {
			{
				input = "ace",
				matches = {
					{ index = 0, match = "ace" },
					-- { index = 1, match = "c" },
					{ index = 2, match = "e" },
				}
			},
		},
	},
	{
		source = [==[^(.+)?B]==],
		tests = {
			{
				input = "AB",
				matches = {
					{ index = 0, match = "AB" },
					{ index = 1, match = "A" },
				}
			},
		},
	},
	{
		source = [==[^([^a-z])|(\^)$]==],
		tests = {
			{
				input = ".",
				matches = {
					{ index = 0, match = "." },
					{ index = 1, match = "." },
				}
			},
		},
	},
	{
		source = [==[^[<>]&]==],
		tests = {
			{
				input = "<&OUT",
				matches = {{ index = 0, match = "<&" }},
			},
		},
	},
	{
		source = [==[^(a\1?){4}$]==],
		tests = {
			-- {
			-- 	input = "aaaaaaaaaa",
			-- 	matches = {
			-- 		{ index = 0, match = "aaaaaaaaaa" },
			-- 		{ index = 1, match = "aaaa" },
			-- 	}
			-- },
			{ input = "*** Failers" },
			{ input = "AB" },
			-- { input = "aaaaaaaaa" },
			-- { input = "aaaaaaaaaaa" },
		},
	},
-- 	{
-- 		source = [==[^(a(?(1)\1)){4}$]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaaaaaaa",
-- 				matches = {
-- 					{ index = 0, match = "aaaaaaaaaa" },
-- 					{ index = 1, match = "aaaa" },
-- 				}
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "aaaaaaaaa" },
-- 			{ input = "aaaaaaaaaaa" },
-- 		},
-- 	},
	{
		source = [==[(?:(f)(o)(o)|(b)(a)(r))*]==],
		tests = {
			{
				input = "foobar",
				matches = {
					{ index = 0, match = "foobar" },
					{ index = 1, match = "f" },
					{ index = 2, match = "o" },
					{ index = 3, match = "o" },
					{ index = 4, match = "b" },
					{ index = 5, match = "a" },
					{ index = 6, match = "r" },
				}
			},
		},
	},
	{
		source = [==[(?<=a)b]==],
		tests = {
			{
				input = "ab",
				matches = {{ index = 0, match = "b" }},
			},
			{ input = "*** Failers" },
			{ input = "cb" },
			{ input = "b" },
		},
	},
	{
		source = [==[(?<!c)b]==],
		tests = {
			{
				input = "ab",
				matches = {{ index = 0, match = "b" }},
			},
			{
				input = "b",
				matches = {{ index = 0, match = "b" }},
			},
			{
				input = "b",
				matches = {{ index = 0, match = "b" }},
			},
		},
	},
	{
		source = [==[(?:..)*a]==],
		tests = {
			{
				input = "aba",
				matches = {{ index = 0, match = "aba" }},
			},
		},
	},
	{
		source = [==[(?:..)*?a]==],
		tests = {
			{
				input = "aba",
				matches = {{ index = 0, match = "a" }},
			},
		},
	},
-- 	{
-- 		source = [==[^(?:b|a(?=(.)))*\1]==],
-- 		tests = {
-- 			{
-- 				input = "abc",
-- 				matches = {
-- 					{ index = 0, match = "ab" },
-- 					{ index = 1, match = "b" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[^(){3,5}]==],
		tests = {
			{
				input = "abc",
				matches = {
					{ index = 0, match = "" },
					{ index = 1, match = "" },
				}
			},
		},
	},
	{
		source = [==[^(a+)*ax]==],
		tests = {
			{
				input = "aax",
				matches = {
					{ index = 0, match = "aax" },
					{ index = 1, match = "a" },
				}
			},
		},
	},
	{
		source = [==[^((a|b)+)*ax]==],
		tests = {
			{
				input = "aax",
				matches = {
					{ index = 0, match = "aax" },
					{ index = 1, match = "a" },
					{ index = 2, match = "a" },
				}
			},
		},
	},
	{
		source = [==[^((a|bc)+)*ax]==],
		tests = {
			{
				input = "aax",
				matches = {
					{ index = 0, match = "aax" },
					{ index = 1, match = "a" },
					{ index = 2, match = "a" },
				}
			},
		},
	},
	{
		source = [==[(a|x)*ab]==],
		tests = {
			{
				input = "cab",
				matches = {{ index = 0, match = "ab" }},
			},
		},
	},
	{
		source = [==[(a)*ab]==],
		tests = {
			{
				input = "cab",
				matches = {{ index = 0, match = "ab" }},
			},
		},
	},
-- 	{
-- 		source = [==[(?:(?i)a)b]==],
-- 		tests = {
-- 			{
-- 				input = "ab",
-- 				matches = {{ index = 0, match = "ab" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?i)a)b]==],
-- 		tests = {
-- 			{
-- 				input = "ab",
-- 				matches = {
-- 					{ index = 0, match = "ab" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?:(?i)a)b]==],
-- 		tests = {
-- 			{
-- 				input = "Ab",
-- 				matches = {{ index = 0, match = "Ab" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?i)a)b]==],
-- 		tests = {
-- 			{
-- 				input = "Ab",
-- 				matches = {
-- 					{ index = 0, match = "Ab" },
-- 					{ index = 1, match = "A" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?:(?i)a)b]==],
-- 		tests = {
-- 			{ input = "*** Failers" },
-- 			{ input = "cb" },
-- 			{ input = "aB" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?i:a)b]==],
-- 		tests = {
-- 			{
-- 				input = "ab",
-- 				matches = {{ index = 0, match = "ab" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?i:a))b]==],
-- 		tests = {
-- 			{
-- 				input = "ab",
-- 				matches = {
-- 					{ index = 0, match = "ab" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?i:a)b]==],
-- 		tests = {
-- 			{
-- 				input = "Ab",
-- 				matches = {{ index = 0, match = "Ab" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?i:a))b]==],
-- 		tests = {
-- 			{
-- 				input = "Ab",
-- 				matches = {
-- 					{ index = 0, match = "Ab" },
-- 					{ index = 1, match = "A" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?i:a)b]==],
-- 		tests = {
-- 			{ input = "*** Failers" },
-- 			{ input = "aB" },
-- 			{ input = "aB" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?:(?-i)a)b]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ab",
-- 				matches = {{ index = 0, match = "ab" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?-i)a)b]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ab",
-- 				matches = {
-- 					{ index = 0, match = "ab" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?:(?-i)a)b]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "aB",
-- 				matches = {{ index = 0, match = "aB" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?-i)a)b]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "aB",
-- 				matches = {
-- 					{ index = 0, match = "aB" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?:(?-i)a)b]==],
-- 		flags = "i",
-- 		tests = {
-- 			{ input = "*** Failers" },
-- 			{
-- 				input = "aB",
-- 				matches = {{ index = 0, match = "aB" }},
-- 			},
-- 			{ input = "Ab" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?:(?-i)a)b]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "aB",
-- 				matches = {{ index = 0, match = "aB" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?-i)a)b]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "aB",
-- 				matches = {
-- 					{ index = 0, match = "aB" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?:(?-i)a)b]==],
-- 		flags = "i",
-- 		tests = {
-- 			{ input = "*** Failers" },
-- 			{ input = "Ab" },
-- 			{ input = "AB" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?-i:a)b]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ab",
-- 				matches = {{ index = 0, match = "ab" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?-i:a))b]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "ab",
-- 				matches = {
-- 					{ index = 0, match = "ab" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?-i:a)b]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "aB",
-- 				matches = {{ index = 0, match = "aB" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?-i:a))b]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "aB",
-- 				matches = {
-- 					{ index = 0, match = "aB" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?-i:a)b]==],
-- 		flags = "i",
-- 		tests = {
-- 			{ input = "*** Failers" },
-- 			{ input = "AB" },
-- 			{ input = "Ab" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?-i:a)b]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "aB",
-- 				matches = {{ index = 0, match = "aB" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?-i:a))b]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "aB",
-- 				matches = {
-- 					{ index = 0, match = "aB" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?-i:a)b]==],
-- 		flags = "i",
-- 		tests = {
-- 			{ input = "*** Failers" },
-- 			{ input = "Ab" },
-- 			{ input = "AB" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?-i:a.))b]==],
-- 		flags = "i",
-- 		tests = {
-- 			{ input = "*** Failers" },
-- 			{ input = "AB" },
-- 			{ input = "a\nB" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?s-i:a.))b]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "a\nB",
-- 				matches = {
-- 					{ index = 0, match = "a\010B" },
-- 					{ index = 1, match = "a\010" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))]==],
-- 		tests = {
-- 			{
-- 				input = "cabbbb",
-- 				matches = {{ index = 0, match = "cabbbb" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))]==],
-- 		tests = {
-- 			{
-- 				input = "caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
-- 				matches = {{ index = 0, match = "caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(ab)\d\1]==],
-- 		flags = "i",
-- 		tests = {
-- 			{
-- 				input = "Ab4ab",
-- 				matches = {
-- 					{ index = 0, match = "Ab4ab" },
-- 					{ index = 1, match = "Ab" },
-- 				}
-- 			},
-- 			{
-- 				input = "ab4Ab",
-- 				matches = {
-- 					{ index = 0, match = "ab4Ab" },
-- 					{ index = 1, match = "ab" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[foo\w*\d{4}baz]==],
		tests = {
			{
				input = "foobar1234baz",
				matches = {{ index = 0, match = "foobar1234baz" }},
			},
		},
	},
	{
		source = [==[x(~~)*(?:(?:F)?)?]==],
		tests = {
			{
				input = "x~~",
				matches = {
					{ index = 0, match = "x~~" },
					{ index = 1, match = "~~" },
				}
			},
		},
	},
	{
		source = [==[^a(?#xxx){3}c]==],
		tests = {
			{
				input = "aaac",
				matches = {{ index = 0, match = "aaac" }},
			},
		},
	},
	{
		source = [==[^a (?#xxx) (?#yyy) {3}c]==],
		flags = "x",
		tests = {
			{
				input = "aaac",
				matches = {{ index = 0, match = "aaac" }},
			},
		},
	},
	{
		source = [==[(?<![cd])b]==],
		tests = {
			{ input = "*** Failers" },
			{ input = "B\nB" },
			{ input = "dbcb" },
		},
	},
	{
		source = [==[(?<![cd])[ab]]==],
		tests = {
			{
				input = "dbaacb",
				matches = {{ index = 0, match = "a" }},
			},
		},
	},
-- 	{
-- 		source = [==[(?<!(c|d))[ab]]==],
-- 		tests = {
-- 			{
-- 				input = "dbaacb",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[(?<!cd)[ab]]==],
		tests = {
			{
				input = "cdaccb",
				matches = {{ index = 0, match = "b" }},
			},
		},
	},
-- 	{
-- 		source = [==[^(?:a?b?)*$]==],
-- 		tests = {
-- 			{
-- 				input = "\\",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 			{
-- 				input = "a",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 			{
-- 				input = "ab",
-- 				matches = {{ index = 0, match = "ab" }},
-- 			},
-- 			{
-- 				input = "aaa",
-- 				matches = {{ index = 0, match = "aaa" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "dbcb" },
-- 			{ input = "a--" },
-- 			{ input = "aa--" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?s)^a(.))((?m)^b$)]==],
-- 		tests = {
-- 			{
-- 				input = "a\nb\nc\n",
-- 				matches = {
-- 					{ index = 0, match = "a\010b" },
-- 					{ index = 1, match = "a\010" },
-- 					{ index = 2, match = "\010" },
-- 					{ index = 3, match = "b" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?m)^b$)]==],
-- 		tests = {
-- 			{
-- 				input = "a\nb\nc\n",
-- 				matches = {
-- 					{ index = 0, match = "b" },
-- 					{ index = 1, match = "b" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?m)^b]==],
-- 		tests = {
-- 			{
-- 				input = "a\nb\n",
-- 				matches = {{ index = 0, match = "b" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?m)^(b)]==],
-- 		tests = {
-- 			{
-- 				input = "a\nb\n",
-- 				matches = {
-- 					{ index = 0, match = "b" },
-- 					{ index = 1, match = "b" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?m)^b)]==],
-- 		tests = {
-- 			{
-- 				input = "a\nb\n",
-- 				matches = {
-- 					{ index = 0, match = "b" },
-- 					{ index = 1, match = "b" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[\n((?m)^b)]==],
-- 		tests = {
-- 			{
-- 				input = "a\nb\n",
-- 				matches = {
-- 					{ index = 0, match = "\010b" },
-- 					{ index = 1, match = "b" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?s).)c(?!.)]==],
-- 		tests = {
-- 			{
-- 				input = "a\nb\nc\n",
-- 				matches = {
-- 					{ index = 0, match = "\010c" },
-- 					{ index = 1, match = "\010" },
-- 				}
-- 			},
-- 			{
-- 				input = "a\nb\nc\n",
-- 				matches = {
-- 					{ index = 0, match = "\010c" },
-- 					{ index = 1, match = "\010" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?s)b.)c(?!.)]==],
-- 		tests = {
-- 			{
-- 				input = "a\nb\nc\n",
-- 				matches = {
-- 					{ index = 0, match = "b\010c" },
-- 					{ index = 1, match = "b\010" },
-- 				}
-- 			},
-- 			{
-- 				input = "a\nb\nc\n",
-- 				matches = {
-- 					{ index = 0, match = "b\010c" },
-- 					{ index = 1, match = "b\010" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[()^b]==],
		tests = {
			{ input = "*** Failers" },
			{ input = "a\nb\nc\n" },
		},
	},
-- 	{
-- 		source = [==[((?m)^b)]==],
-- 		tests = {
-- 			{
-- 				input = "a\nb\nc\n",
-- 				matches = {
-- 					{ index = 0, match = "b" },
-- 					{ index = 1, match = "b" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(x)?(?(1)a|b)]==],
-- 		tests = {
-- 			{ input = "*** Failers" },
-- 			{ input = "a" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(x)?(?(1)b|a)]==],
-- 		tests = {
-- 			{
-- 				input = "a",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[()?(?(1)b|a)]==],
-- 		tests = {
-- 			{
-- 				input = "a",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[()?(?(1)a|b)]==],
-- 		tests = {
-- 			{
-- 				input = "a",
-- 				matches = {
-- 					{ index = 0, match = "a" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(\()?blah(?(1)(\)))$]==],
-- 		tests = {
-- 			{
-- 				input = "(blah)",
-- 				matches = {
-- 					{ index = 0, match = "(blah)" },
-- 					{ index = 1, match = "(" },
-- 					{ index = 2, match = ")" },
-- 				}
-- 			},
-- 			{
-- 				input = "blah",
-- 				matches = {{ index = 0, match = "blah" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "a" },
-- 			{ input = "blah)" },
-- 			{ input = "(blah" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(\(+)?blah(?(1)(\)))$]==],
-- 		tests = {
-- 			{
-- 				input = "(blah)",
-- 				matches = {
-- 					{ index = 0, match = "(blah)" },
-- 					{ index = 1, match = "(" },
-- 					{ index = 2, match = ")" },
-- 				}
-- 			},
-- 			{
-- 				input = "blah",
-- 				matches = {{ index = 0, match = "blah" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "blah)" },
-- 			{ input = "(blah" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?(?!a)b|a)]==],
-- 		tests = {
-- 			{
-- 				input = "a",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?(?=a)b|a)]==],
-- 		tests = {
-- 			{ input = "*** Failers" },
-- 			{ input = "a" },
-- 			{ input = "a" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?(?=a)a|b)]==],
-- 		tests = {
-- 			{
-- 				input = "a",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?=(a+?))(\1ab)]==],
-- 		tests = {
-- 			{
-- 				input = "aaab",
-- 				matches = {
-- 					{ index = 0, match = "aab" },
-- 					{ index = 1, match = "a" },
-- 					{ index = 2, match = "aab" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[(\w+:)+]==],
		tests = {
			{
				input = "one:",
				matches = {
					{ index = 0, match = "one:" },
					{ index = 1, match = "one:" },
				}
			},
		},
	},
-- 	{
-- 		source = [==[$(?<=^(a))]==],
-- 		tests = {
-- 			{
-- 				input = "a",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?=(a+?))(\1ab)]==],
-- 		tests = {
-- 			{
-- 				input = "aaab",
-- 				matches = {
-- 					{ index = 0, match = "aab" },
-- 					{ index = 1, match = "a" },
-- 					{ index = 2, match = "aab" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[^(?=(a+?))\1ab]==],
		tests = {
			{ input = "*** Failers" },
			{ input = "aaab" },
		},
	},
	{
		source = [==[([\w:]+::)?(\w+)$]==],
		tests = {
			{
				input = "abcd",
				matches = {
					{ index = 0, match = "abcd" },
					{ index = 1, match = "<unset>" },
					{ index = 2, match = "abcd" },
				}
			},
			{
				input = "xy:z:::abcd",
				matches = {
					{ index = 0, match = "xy:z:::abcd" },
					{ index = 1, match = "xy:z:::" },
					{ index = 2, match = "abcd" },
				}
			},
		},
	},
	{
		source = [==[^[^bcd]*(c+)]==],
		tests = {
			{
				input = "aexycd",
				matches = {
					{ index = 0, match = "aexyc" },
					{ index = 1, match = "c" },
				}
			},
		},
	},
	{
		source = [==[(a*)b+]==],
		tests = {
			{
				input = "caab",
				matches = {
					{ index = 0, match = "aab" },
					{ index = 1, match = "aa" },
				}
			},
		},
	},
	{
		source = [==[([\w:]+::)?(\w+)$]==],
		tests = {
			{
				input = "abcd",
				matches = {
					{ index = 0, match = "abcd" },
					{ index = 1, match = "<unset>" },
					{ index = 2, match = "abcd" },
				}
			},
			{
				input = "xy:z:::abcd",
				matches = {
					{ index = 0, match = "xy:z:::abcd" },
					{ index = 1, match = "xy:z:::" },
					{ index = 2, match = "abcd" },
				}
			},
			{
				input = "*** Failers",
				matches = {
					{ index = 0, match = "Failers" },
					{ index = 1, match = "<unset>" },
					{ index = 2, match = "Failers" },
				}
			},
			{ input = "abcd:" },
		},
	},
	{
		source = [==[^[^bcd]*(c+)]==],
		tests = {
			{
				input = "aexycd",
				matches = {
					{ index = 0, match = "aexyc" },
					{ index = 1, match = "c" },
				}
			},
		},
	},
	{
		source = [==[(?>a+)b]==],
		tests = {
			{
				input = "aaab",
				matches = {{ index = 0, match = "aaab" }},
			},
		},
	},
	{
		source = [==[([[:]+)]==],
		tests = {
			{
				input = "a:[b]:",
				matches = {
					{ index = 0, match = ":[" },
					{ index = 1, match = ":[" },
				}
			},
		},
	},
	{
		source = [==[([[=]+)]==],
		tests = {
			{
				input = "a=[b]=",
				matches = {
					{ index = 0, match = "=[" },
					{ index = 1, match = "=[" },
				}
			},
		},
	},
	{
		source = [==[([[.]+)]==],
		tests = {
			{
				input = "a.[b].",
				matches = {
					{ index = 0, match = ".[" },
					{ index = 1, match = ".[" },
				}
			},
		},
	},
	{
		source = [==[((?>a+)b)]==],
		tests = {
			{
				input = "aaab",
				matches = {
					{ index = 0, match = "aaab" },
					{ index = 1, match = "aaab" },
				}
			},
		},
	},
	{
		source = [==[(?>(a+))b]==],
		tests = {
			{
				input = "aaab",
				matches = {
					{ index = 0, match = "aaab" },
					-- { index = 1, match = "aaa" },
				}
			},
		},
	},
	{
		source = [==[((?>[^()]+)|\([^()]*\))+]==],
		tests = {
			{
				input = "((abc(ade)ufh()()x",
				matches = {
					{ index = 0, match = "abc(ade)ufh()()x" },
					{ index = 1, match = "x" },
				}
			},
		},
	},
	{
		source = [==[a\Z]==],
		tests = {
			{ input = "*** Failers" },
			{ input = "aaab" },
			{ input = "a\nb\n" },
		},
	},
	{
		source = [==[b\Z]==],
		tests = {
			{
				input = "a\nb\n",
				matches = {{ index = 0, match = "b" }},
			},
		},
	},
	{
		source = [==[b\Z]==],
		tests = {
			{
				input = "a\nb",
				matches = {{ index = 0, match = "b" }},
			},
		},
	},
	{
		source = [==[b\z]==],
		tests = {
			{
				input = "a\nb",
				matches = {{ index = 0, match = "b" }},
			},
			{ input = "*** Failers" },
		},
	},
-- 	{
-- 		source = [==[^(?>(?(1)\.|())[^\W_](?>[a-z0-9-]*[^\W_])?)+$]==],
-- 		tests = {
-- 			{
-- 				input = "a",
-- 				matches = {
-- 					{ index = 0, match = "a" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "abc",
-- 				matches = {
-- 					{ index = 0, match = "abc" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "a-b",
-- 				matches = {
-- 					{ index = 0, match = "a-b" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "0-9",
-- 				matches = {
-- 					{ index = 0, match = "0-9" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "a.b",
-- 				matches = {
-- 					{ index = 0, match = "a.b" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "5.6.7",
-- 				matches = {
-- 					{ index = 0, match = "5.6.7" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "the.quick.brown.fox",
-- 				matches = {
-- 					{ index = 0, match = "the.quick.brown.fox" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "a100.b200.300c",
-- 				matches = {
-- 					{ index = 0, match = "a100.b200.300c" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "12-ab.1245",
-- 				matches = {
-- 					{ index = 0, match = "12-ab.1245" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "\\" },
-- 			{ input = ".a" },
-- 			{ input = "-a" },
-- 			{ input = "a-" },
-- 			{ input = "a." },
-- 			{ input = "a_b" },
-- 			{ input = "a.-" },
-- 			{ input = "a.." },
-- 			{ input = "ab..bc" },
-- 			{ input = "the.quick.brown.fox-" },
-- 			{ input = "the.quick.brown.fox." },
-- 			{ input = "the.quick.brown.fox_" },
-- 			{ input = "the.quick.brown.fox+" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?>.*)(?<=(abcd|wxyz))]==],
-- 		tests = {
-- 			{
-- 				input = "alphabetabcd",
-- 				matches = {
-- 					{ index = 0, match = "alphabetabcd" },
-- 					{ index = 1, match = "abcd" },
-- 				}
-- 			},
-- 			{
-- 				input = "endingwxyz",
-- 				matches = {
-- 					{ index = 0, match = "endingwxyz" },
-- 					{ index = 1, match = "wxyz" },
-- 				}
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "a rather long string that doesn't end with one of them" },
-- 		},
-- 	},
	{
		source = [==[word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword]==],
		tests = {
			{
				input = "word cat dog elephant mussel cow horse canary baboon snake shark otherword",
				matches = {{ index = 0, match = "word cat dog elephant mussel cow horse canary baboon snake shark otherword" }},
			},
			{ input = "word cat dog elephant mussel cow horse canary baboon snake shark" },
		},
	},
	{
		source = [==[word (?>[a-zA-Z0-9]+ ){0,30}otherword]==],
		tests = {
			{ input = "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" },
		},
	},
-- 	{
-- 		source = [==[(?<=\d{3}(?!999))foo]==],
-- 		tests = {
-- 			{
-- 				input = "999foo",
-- 				matches = {{ index = 0, match = "foo" }},
-- 			},
-- 			{
-- 				input = "123999foo",
-- 				matches = {{ index = 0, match = "foo" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "123abcfoo" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?<=(?!...999)\d{3})foo]==],
-- 		tests = {
-- 			{
-- 				input = "999foo",
-- 				matches = {{ index = 0, match = "foo" }},
-- 			},
-- 			{
-- 				input = "123999foo",
-- 				matches = {{ index = 0, match = "foo" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "123abcfoo" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?<=\d{3}(?!999)...)foo]==],
-- 		tests = {
-- 			{
-- 				input = "123abcfoo",
-- 				matches = {{ index = 0, match = "foo" }},
-- 			},
-- 			{
-- 				input = "123456foo",
-- 				matches = {{ index = 0, match = "foo" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "123999foo" },
-- 		},
-- 	},
	{
		source = [==[(?<=\d{3}...)(?<!999)foo]==],
		tests = {
			{
				input = "123abcfoo",
				matches = {{ index = 0, match = "foo" }},
			},
			{
				input = "123456foo",
				matches = {{ index = 0, match = "foo" }},
			},
			{ input = "*** Failers" },
			{ input = "123999foo" },
		},
	},
-- 	{
-- 		source = [==[<a[\s]+href[\s]*=[\s]*          # find <a href=
--  ([\"\'])?                       # find single or double quote
--  (?(1) (.*?)\1 | ([^\s]+))       # if quote found, match up to next matching
--                                  # quote, otherwise match up to next space
-- ]==],
-- 		flags = "isx",
-- 		tests = {
-- 			{
-- 				input = "<a href=abcd xyz",
-- 				matches = {
-- 					{ index = 0, match = "<a href=abcd" },
-- 					{ index = 1, match = "<unset>" },
-- 					{ index = 2, match = "<unset>" },
-- 					{ index = 3, match = "abcd" },
-- 				}
-- 			},
-- 			{
-- 				input = "<a href=\\\"abcd xyz pqr\\\" cats",
-- 				matches = {
-- 					{ index = 0, match = "<a href=\"abcd xyz pqr\"" },
-- 					{ index = 1, match = "\"" },
-- 					{ index = 2, match = "abcd xyz pqr" },
-- 				}
-- 			},
-- 			{
-- 				input = "<a href=\\'abcd xyz pqr\\' cats",
-- 				matches = {
-- 					{ index = 0, match = "<a href='abcd xyz pqr'" },
-- 					{ index = 1, match = "'" },
-- 					{ index = 2, match = "abcd xyz pqr" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[<a\s+href\s*=\s*                # find <a href=
--  (["'])?                         # find single or double quote
--  (?(1) (.*?)\1 | (\S+))          # if quote found, match up to next matching
--                                  # quote, otherwise match up to next space
-- ]==],
-- 		flags = "isx",
-- 		tests = {
-- 			{
-- 				input = "<a href=abcd xyz",
-- 				matches = {
-- 					{ index = 0, match = "<a href=abcd" },
-- 					{ index = 1, match = "<unset>" },
-- 					{ index = 2, match = "<unset>" },
-- 					{ index = 3, match = "abcd" },
-- 				}
-- 			},
-- 			{
-- 				input = "<a href=\\\"abcd xyz pqr\\\" cats",
-- 				matches = {
-- 					{ index = 0, match = "<a href=\"abcd xyz pqr\"" },
-- 					{ index = 1, match = "\"" },
-- 					{ index = 2, match = "abcd xyz pqr" },
-- 				}
-- 			},
-- 			{
-- 				input = "<a href       =       \\'abcd xyz pqr\\' cats",
-- 				matches = {
-- 					{ index = 0, match = "<a href       =       'abcd xyz pqr'" },
-- 					{ index = 1, match = "'" },
-- 					{ index = 2, match = "abcd xyz pqr" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[<a\s+href(?>\s*)=(?>\s*)        # find <a href=
--  (["'])?                         # find single or double quote
--  (?(1) (.*?)\1 | (\S+))          # if quote found, match up to next matching
--                                  # quote, otherwise match up to next space
-- ]==],
-- 		flags = "isx",
-- 		tests = {
-- 			{
-- 				input = "<a href=abcd xyz",
-- 				matches = {
-- 					{ index = 0, match = "<a href=abcd" },
-- 					{ index = 1, match = "<unset>" },
-- 					{ index = 2, match = "<unset>" },
-- 					{ index = 3, match = "abcd" },
-- 				}
-- 			},
-- 			{
-- 				input = "<a href=\\\"abcd xyz pqr\\\" cats",
-- 				matches = {
-- 					{ index = 0, match = "<a href=\"abcd xyz pqr\"" },
-- 					{ index = 1, match = "\"" },
-- 					{ index = 2, match = "abcd xyz pqr" },
-- 				}
-- 			},
-- 			{
-- 				input = "<a href       =       \\'abcd xyz pqr\\' cats",
-- 				matches = {
-- 					{ index = 0, match = "<a href       =       'abcd xyz pqr'" },
-- 					{ index = 1, match = "'" },
-- 					{ index = 2, match = "abcd xyz pqr" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[((Z)+|A)*]==],
		tests = {
			{
				input = "ZABCDEFG",
				matches = {
					{ index = 0, match = "ZA" },
					{ index = 1, match = "A" },
					{ index = 2, match = "Z" },
				}
			},
		},
	},
	{
		source = [==[(Z()|A)*]==],
		tests = {
			{
				input = "ZABCDEFG",
				matches = {
					{ index = 0, match = "ZA" },
					{ index = 1, match = "A" },
					{ index = 2, match = "" },
				}
			},
		},
	},
	{
		source = [==[(Z(())|A)*]==],
		tests = {
			{
				input = "ZABCDEFG",
				matches = {
					{ index = 0, match = "ZA" },
					{ index = 1, match = "A" },
					{ index = 2, match = "" },
					{ index = 3, match = "" },
				}
			},
		},
	},
	{
		source = [==[((?>Z)+|A)*]==],
		tests = {
			{
				input = "ZABCDEFG",
				matches = {
					{ index = 0, match = "ZA" },
					{ index = 1, match = "A" },
				}
			},
		},
	},
-- 	{
-- 		source = [==[((?>)+|A)*]==],
-- 		tests = {
-- 			{
-- 				input = "ZABCDEFG",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a*]==],
-- 		flags = "g",
-- 		tests = {
-- 			{
-- 				input = "abbab",
-- 				matches = {
-- 					{ index = 0, match = "a" },
-- 					{ index = 0, match = "" },
-- 					{ index = 0, match = "" },
-- 					{ index = 0, match = "a" },
-- 					{ index = 0, match = "" },
-- 					{ index = 0, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[^[\d-a]]==],
		tests = {
			{
				input = "abcde",
				matches = {{ index = 0, match = "a" }},
			},
			{
				input = "-things",
				matches = {{ index = 0, match = "-" }},
			},
			{
				input = "0digit",
				matches = {{ index = 0, match = "0" }},
			},
			{ input = "*** Failers" },
			{ input = "bcdef" },
		},
	},
	{
		source = [==[[[:space:]]+]==],
		tests = {
			{
				input = "> \009\010\012\013\011<",
				matches = {{ index = 0, match = " \009\010\012\013\011" }},
			},
		},
	},
	{
		source = [==[[[:blank:]]+]==],
		tests = {
			{
				input = "> \009\010\012\013\011<",
				matches = {{ index = 0, match = " \009" }},
			},
		},
	},
	{
		source = [==[[\s]+]==],
		tests = {
			{
				input = "> \009\010\012\013\011<",
				matches = {{ index = 0, match = " \009\010\012\013\011" }},
			},
		},
	},
	{
		source = [==[\s+]==],
		tests = {
			{
				input = "> \009\010\012\013\011<",
				matches = {{ index = 0, match = " \009\010\012\013\011" }},
			},
		},
	},
	{
		source = [==[ab]==],
		flags = "x",
		tests = {
			{
				input = "ab",
				matches = {{ index = 0, match = "ab" }},
			},
		},
	},
	{
		source = [==[(?!\A)x]==],
		flags = "m",
		tests = {
			{
				input = "a\nxb\n",
				matches = {{ index = 0, match = "x" }},
			},
		},
	},
	{
		source = [==[(?!^)x]==],
		flags = "m",
		tests = {
			{ input = "a\nxb\n" },
		},
	},
	{
		source = [==[abc\Qabc\Eabc]==],
		tests = {
			{
				input = "abcabcabc",
				matches = {{ index = 0, match = "abcabcabc" }},
			},
		},
	},
	{
		source = [==[abc\Q(*+|\Eabc]==],
		tests = {
			{
				input = "abc(*+|abc",
				matches = {{ index = 0, match = "abc(*+|abc" }},
			},
		},
	},
	{
		source = [==[   abc\Q abc\Eabc]==],
		flags = "x",
		tests = {
			{
				input = "abc abcabc",
				matches = {{ index = 0, match = "abc abcabc" }},
			},
			{ input = "*** Failers" },
			{ input = "abcabcabc" },
		},
	},
	{
		source = [==[abc#comment
    \Q#not comment
    literal\E]==],
		flags = "x",
		tests = {
			{
				input = "abc#not comment\n    literal",
				matches = {{ index = 0, match = "abc#not comment\010    literal" }},
			},
		},
	},
	{
		source = [==[abc#comment
    \Q#not comment
    literal]==],
		flags = "x",
		tests = {
			{
				input = "abc#not comment\n    literal",
				matches = {{ index = 0, match = "abc#not comment\010    literal" }},
			},
		},
	},
	{
		source = [==[abc#comment
    \Q#not comment
    literal\E #more comment
    ]==],
		flags = "x",
		tests = {
			{
				input = "abc#not comment\n    literal",
				matches = {{ index = 0, match = "abc#not comment\010    literal" }},
			},
		},
	},
	{
		source = [==[abc#comment
    \Q#not comment
    literal\E #more comment]==],
		flags = "x",
		tests = {
			{
				input = "abc#not comment\n    literal",
				matches = {{ index = 0, match = "abc#not comment\010    literal" }},
			},
		},
	},
	{
		source = [==[\Qabc\$xyz\E]==],
		tests = {
			{
				input = "abc\\$xyz",
				matches = {{ index = 0, match = "abc\\$xyz" }},
			},
		},
	},
	{
		source = [==[\Qabc\E\$\Qxyz\E]==],
		tests = {
			{
				input = "abc$xyz",
				matches = {{ index = 0, match = "abc$xyz" }},
			},
		},
	},
	{
		source = [==[\Gabc]==],
		tests = {
			{
				input = "abc",
				matches = {{ index = 0, match = "abc" }},
			},
			{ input = "*** Failers" },
			{ input = "xyzabc" },
		},
	},
-- 	{
-- 		source = [==[\Gabc.]==],
-- 		flags = "g",
-- 		tests = {
-- 			{
-- 				input = "abc1abc2xyzabc3",
-- 				matches = {
-- 					{ index = 0, match = "abc1" },
-- 					{ index = 0, match = "abc2" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[abc.]==],
-- 		flags = "g",
-- 		tests = {
-- 			{
-- 				input = "abc1abc2xyzabc3",
-- 				matches = {
-- 					{ index = 0, match = "abc1" },
-- 					{ index = 0, match = "abc2" },
-- 					{ index = 0, match = "abc3" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a(?x: b c )d]==],
-- 		tests = {
-- 			{
-- 				input = "XabcdY",
-- 				matches = {{ index = 0, match = "abcd" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "Xa b c d Y" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?x)x y z | a b c)]==],
-- 		tests = {
-- 			{
-- 				input = "XabcY",
-- 				matches = {
-- 					{ index = 0, match = "abc" },
-- 					{ index = 1, match = "abc" },
-- 				}
-- 			},
-- 			{
-- 				input = "AxyzB",
-- 				matches = {
-- 					{ index = 0, match = "xyz" },
-- 					{ index = 1, match = "xyz" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?i)AB(?-i)C]==],
-- 		tests = {
-- 			{
-- 				input = "XabCY",
-- 				matches = {{ index = 0, match = "abC" }},
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "XabcY" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?i)AB(?-i)C|D)E]==],
-- 		tests = {
-- 			{
-- 				input = "abCE",
-- 				matches = {
-- 					{ index = 0, match = "abCE" },
-- 					{ index = 1, match = "abC" },
-- 				}
-- 			},
-- 			{
-- 				input = "DE",
-- 				matches = {
-- 					{ index = 0, match = "DE" },
-- 					{ index = 1, match = "D" },
-- 				}
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "abcE" },
-- 			{ input = "abCe" },
-- 			{ input = "dE" },
-- 			{ input = "De" },
-- 		},
-- 	},
	{
		source = [==[(.*)\d+\1]==],
		tests = {
			{
				input = "abc123abc",
				matches = {
					{ index = 0, match = "abc123abc" },
					{ index = 1, match = "abc" },
				}
			},
			{
				input = "abc123bc",
				matches = {
					{ index = 0, match = "bc123bc" },
					{ index = 1, match = "bc" },
				}
			},
		},
	},
	{
		source = [==[(.*)\d+\1]==],
		flags = "s",
		tests = {
			{
				input = "abc123abc",
				matches = {
					{ index = 0, match = "abc123abc" },
					{ index = 1, match = "abc" },
				}
			},
			{
				input = "abc123bc",
				matches = {
					{ index = 0, match = "bc123bc" },
					{ index = 1, match = "bc" },
				}
			},
		},
	},
	{
		source = [==[((.*))\d+\1]==],
		tests = {
			{
				input = "abc123abc",
				matches = {
					{ index = 0, match = "abc123abc" },
					{ index = 1, match = "abc" },
					{ index = 2, match = "abc" },
				}
			},
			{
				input = "abc123bc",
				matches = {
					{ index = 0, match = "bc123bc" },
					{ index = 1, match = "bc" },
					{ index = 2, match = "bc" },
				}
			},
		},
	},
-- 	{
-- 		source = [==[^(?!:)                       # colon disallowed at start
--   (?:                         # start of item
--     (?: [0-9a-f]{1,4} |       # 1-4 hex digits or
--     (?(1)0 | () ) )           # if null previously matched, fail; else null
--     :                         # followed by colon
--   ){1,7}                      # end item; 1-7 of them required
--   [0-9a-f]{1,4} $             # final hex number at end of string
--   (?(1)|.)                    # check that there was an empty component
--   ]==],
-- 		flags = "ix",
-- 		tests = {
-- 			{
-- 				input = "a123::a123",
-- 				matches = {
-- 					{ index = 0, match = "a123::a123" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "a123:b342::abcd",
-- 				matches = {
-- 					{ index = 0, match = "a123:b342::abcd" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "a123:b342::324e:abcd",
-- 				matches = {
-- 					{ index = 0, match = "a123:b342::324e:abcd" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "a123:ddde:b342::324e:abcd",
-- 				matches = {
-- 					{ index = 0, match = "a123:ddde:b342::324e:abcd" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "a123:ddde:b342::324e:dcba:abcd",
-- 				matches = {
-- 					{ index = 0, match = "a123:ddde:b342::324e:dcba:abcd" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "a123:ddde:9999:b342::324e:dcba:abcd",
-- 				matches = {
-- 					{ index = 0, match = "a123:ddde:9999:b342::324e:dcba:abcd" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "1:2:3:4:5:6:7:8" },
-- 			{ input = "a123:bce:ddde:9999:b342::324e:dcba:abcd" },
-- 			{ input = "a123::9999:b342::324e:dcba:abcd" },
-- 			{ input = "abcde:2:3:4:5:6:7:8" },
-- 			{ input = "::1" },
-- 			{ input = "abcd:fee0:123::" },
-- 			{ input = ":1" },
-- 			{ input = "1:" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[[z\Qa-d]\E]]==],
-- 		tests = {
-- 			{
-- 				input = "z",
-- 				matches = {{ index = 0, match = "z" }},
-- 			},
-- 			{
-- 				input = "a",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 			{
-- 				input = "-",
-- 				matches = {{ index = 0, match = "-" }},
-- 			},
-- 			{
-- 				input = "d",
-- 				matches = {{ index = 0, match = "d" }},
-- 			},
-- 			{
-- 				input = "]",
-- 				matches = {{ index = 0, match = "]" }},
-- 			},
-- 			{
-- 				input = "*** Failers",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 			{ input = "b" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(a+)*b]==],
-- 		tests = {
-- 			{ input = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?i)reg(?:ul(?:[a�]|ae)r|ex)]==],
-- 		tests = {
-- 			{
-- 				input = "REGular",
-- 				matches = {{ index = 0, match = "REGular" }},
-- 			},
-- 			{
-- 				input = "regulaer",
-- 				matches = {{ index = 0, match = "regulaer" }},
-- 			},
-- 			{
-- 				input = "Regex",
-- 				matches = {{ index = 0, match = "Regex" }},
-- 			},
-- 			{
-- 				input = "regul�r",
-- 				matches = {{ index = 0, match = "regul\228r" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[����[�-��-�]+]==],
-- 		tests = {
-- 			{
-- 				input = "�����",
-- 				matches = {{ index = 0, match = "\197\230\229\228\224" }},
-- 			},
-- 			{
-- 				input = "�����",
-- 				matches = {{ index = 0, match = "\197\230\229\228\255" }},
-- 			},
-- 			{
-- 				input = "�����",
-- 				matches = {{ index = 0, match = "\197\230\229\228\192" }},
-- 			},
-- 			{
-- 				input = "�����",
-- 				matches = {{ index = 0, match = "\197\230\229\228\223" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?<=Z)X.]==],
-- 		tests = {
-- 			{
-- 				input = "\132XAZXB",
-- 				matches = {{ index = 0, match = "XB" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[ab cd (?x) de fg]==],
-- 		tests = {
-- 			{
-- 				input = "ab cd defg",
-- 				matches = {{ index = 0, match = "ab cd defg" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[ab cd(?x) de fg]==],
-- 		tests = {
-- 			{
-- 				input = "ab cddefg",
-- 				matches = {{ index = 0, match = "ab cddefg" }},
-- 			},
-- 			{ input = "** Failers" },
-- 			{ input = "abcddefg" },
-- 		},
-- 	},
	{
		source = [==[(?<![^f]oo)(bar)]==],
		tests = {
			{
				input = "foobarX",
				matches = {
					{ index = 0, match = "bar" },
					{ index = 1, match = "bar" },
				}
			},
			{ input = "** Failers" },
			{ input = "boobarX" },
		},
	},
	{
		source = [==[(?<![^f])X]==],
		tests = {
			{
				input = "offX",
				matches = {{ index = 0, match = "X" }},
			},
			{ input = "** Failers" },
			{ input = "onyX" },
		},
	},
	{
		source = [==[(?<=[^f])X]==],
		tests = {
			{
				input = "onyX",
				matches = {{ index = 0, match = "X" }},
			},
			{ input = "** Failers" },
			{ input = "offX" },
		},
	},
-- 	{
-- 		source = [==[^]==],
-- 		flags = "gm",
-- 		tests = {
-- 			{
-- 				input = "a\nb\nc\n",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 0, match = "" },
-- 					{ index = 0, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "\\",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?<=C\n)^]==],
-- 		flags = "gm",
-- 		tests = {
-- 			{
-- 				input = "A\nC\nC\n",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?:(?(1)a|b)(X))+]==],
-- 		tests = {
-- 			{
-- 				input = "bXaX",
-- 				matches = {
-- 					{ index = 0, match = "bXaX" },
-- 					{ index = 1, match = "X" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?:(?(1)\1a|b)(X|Y))+]==],
-- 		tests = {
-- 			{
-- 				input = "bXXaYYaY",
-- 				matches = {
-- 					{ index = 0, match = "bXXaYYaY" },
-- 					{ index = 1, match = "Y" },
-- 				}
-- 			},
-- 			{
-- 				input = "bXYaXXaX",
-- 				matches = {
-- 					{ index = 0, match = "bX" },
-- 					{ index = 1, match = "X" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[()()()()()()()()()(?:(?(10)\10a|b)(X|Y))+]==],
-- 		tests = {
-- 			{
-- 				input = "bXXaYYaY",
-- 				matches = {
-- 					{ index = 0, match = "bX" },
-- 					{ index = 1, match = "" },
-- 					{ index = 2, match = "" },
-- 					{ index = 3, match = "" },
-- 					{ index = 4, match = "" },
-- 					{ index = 5, match = "" },
-- 					{ index = 6, match = "" },
-- 					{ index = 7, match = "" },
-- 					{ index = 8, match = "" },
-- 					{ index = 9, match = "" },
-- 					{ index = 10, match = "X" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[[[,abc,]+]]==],
		tests = {
			{
				input = "abc]",
				matches = {{ index = 0, match = "abc]" }},
			},
			{
				input = "a,b]",
				matches = {{ index = 0, match = "a,b]" }},
			},
			{
				input = "[a,b,c]",
				matches = {{ index = 0, match = "[a,b,c]" }},
			},
		},
	},
-- 	{
-- 		source = [==[(?-x: )]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "A\032B",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[a*b*\w]==],
		tests = {
			{
				input = "aaabbbb",
				matches = {{ index = 0, match = "aaabbbb" }},
			},
			{
				input = "aaaa",
				matches = {{ index = 0, match = "aaaa" }},
			},
			{
				input = "a",
				matches = {{ index = 0, match = "a" }},
			},
		},
	},
	{
		source = [==[a*b?\w]==],
		tests = {
			{
				input = "aaabbbb",
				matches = {{ index = 0, match = "aaabb" }},
			},
			{
				input = "aaaa",
				matches = {{ index = 0, match = "aaaa" }},
			},
			{
				input = "a",
				matches = {{ index = 0, match = "a" }},
			},
		},
	},
	{
		source = [==[a*b{0,4}\w]==],
		tests = {
			{
				input = "aaabbbb",
				matches = {{ index = 0, match = "aaabbbb" }},
			},
			{
				input = "aaaa",
				matches = {{ index = 0, match = "aaaa" }},
			},
			{
				input = "a",
				matches = {{ index = 0, match = "a" }},
			},
		},
	},
	{
		source = [==[a*b{0,}\w]==],
		tests = {
			{
				input = "aaabbbb",
				matches = {{ index = 0, match = "aaabbbb" }},
			},
			{
				input = "aaaa",
				matches = {{ index = 0, match = "aaaa" }},
			},
			{
				input = "a",
				matches = {{ index = 0, match = "a" }},
			},
		},
	},
	{
		source = [==[a*\d*\w]==],
		tests = {
			{
				input = "0a",
				matches = {{ index = 0, match = "0a" }},
			},
			{
				input = "a",
				matches = {{ index = 0, match = "a" }},
			},
		},
	},
	{
		source = [==[a*b *\w]==],
		flags = "x",
		tests = {
			{
				input = "a",
				matches = {{ index = 0, match = "a" }},
			},
		},
	},
	{
		source = [==[a*b#comment
  *\w]==],
		flags = "x",
		tests = {
			{
				input = "a",
				matches = {{ index = 0, match = "a" }},
			},
		},
	},
	{
		source = [==[a* b *\w]==],
		flags = "x",
		tests = {
			{
				input = "a",
				matches = {{ index = 0, match = "a" }},
			},
		},
	},
	{
		source = [==[^\w+=.*(\\\n.*)*]==],
		tests = {
			{
				input = "abc=xyz\\\npqr",
				matches = {{ index = 0, match = "abc=xyz\\" }},
			},
		},
	},
-- 	{
-- 		source = [==[(?=(\w+))\1:]==],
-- 		tests = {
-- 			{
-- 				input = "abcd:",
-- 				matches = {
-- 					{ index = 0, match = "abcd:" },
-- 					{ index = 1, match = "abcd" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(?=(\w+))\1:]==],
-- 		tests = {
-- 			{
-- 				input = "abcd:",
-- 				matches = {
-- 					{ index = 0, match = "abcd:" },
-- 					{ index = 1, match = "abcd" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[^\Eabc]==],
		tests = {
			{
				input = "abc",
				matches = {{ index = 0, match = "abc" }},
			},
		},
	},
	{
		source = [==[^[\Eabc]]==],
		tests = {
			{
				input = "a",
				matches = {{ index = 0, match = "a" }},
			},
			{ input = "** Failers" },
			{ input = "E" },
		},
	},
	{
		source = [==[^[a-\Ec]]==],
		tests = {
			-- {
			-- 	input = "b",
			-- 	matches = {{ index = 0, match = "b" }},
			-- },
			{ input = "** Failers" },
			{ input = "-" },
			{ input = "E" },
		},
	},
	{
		source = [==[^[a\E\E-\Ec]]==],
		tests = {
			-- {
			-- 	input = "b",
			-- 	matches = {{ index = 0, match = "b" }},
			-- },
			{ input = "** Failers" },
			{ input = "-" },
			{ input = "E" },
		},
	},
	{
		source = [==[^[\E\Qa\E-\Qz\E]+]==],
		tests = {
			-- {
			-- 	input = "b",
			-- 	matches = {{ index = 0, match = "b" }},
			-- },
			{ input = "** Failers" },
			{ input = "-" },
		},
	},
-- 	{
-- 		source = [==[^[a\Q]bc\E]]==],
-- 		tests = {
-- 			{
-- 				input = "a",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 			{
-- 				input = "]",
-- 				matches = {{ index = 0, match = "]" }},
-- 			},
-- 			{
-- 				input = "c",
-- 				matches = {{ index = 0, match = "c" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^[a-\Q\E]]==],
-- 		tests = {
-- 			{
-- 				input = "a",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 			{
-- 				input = "-",
-- 				matches = {{ index = 0, match = "-" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(a()*)*]==],
-- 		tests = {
-- 			{
-- 				input = "aaaa",
-- 				matches = {
-- 					{ index = 0, match = "aaaa" },
-- 					{ index = 1, match = "a" },
-- 					{ index = 2, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(?:a(?:(?:))*)*]==],
-- 		tests = {
-- 			{
-- 				input = "aaaa",
-- 				matches = {{ index = 0, match = "aaaa" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(a()+)+]==],
-- 		tests = {
-- 			{
-- 				input = "aaaa",
-- 				matches = {
-- 					{ index = 0, match = "aaaa" },
-- 					{ index = 1, match = "a" },
-- 					{ index = 2, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(?:a(?:(?:))+)+]==],
-- 		tests = {
-- 			{
-- 				input = "aaaa",
-- 				matches = {{ index = 0, match = "aaaa" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(a){0,3}(?(1)b|(c|))*D]==],
-- 		tests = {
-- 			{
-- 				input = "abbD",
-- 				matches = {
-- 					{ index = 0, match = "abbD" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 			{
-- 				input = "ccccD",
-- 				matches = {
-- 					{ index = 0, match = "ccccD" },
-- 					{ index = 1, match = "<unset>" },
-- 					{ index = 2, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "D",
-- 				matches = {
-- 					{ index = 0, match = "D" },
-- 					{ index = 1, match = "<unset>" },
-- 					{ index = 2, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(a|)*\d]==],
-- 		tests = {
-- 			{ input = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" },
-- 			{
-- 				input = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4",
-- 				matches = {
-- 					{ index = 0, match = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?>a|)*\d]==],
-- 		tests = {
-- 			{ input = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" },
-- 			{
-- 				input = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4",
-- 				matches = {{ index = 0, match = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?:a|)*\d]==],
-- 		tests = {
-- 			{ input = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" },
-- 			{
-- 				input = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4",
-- 				matches = {{ index = 0, match = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[\Z]==],
-- 		flags = "g",
-- 		tests = {
-- 			{
-- 				input = "abc\n",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 0, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(?s)(?>.*)(?<!\n)]==],
-- 		tests = {
-- 			{
-- 				input = "abc",
-- 				matches = {{ index = 0, match = "abc" }},
-- 			},
-- 			{ input = "abc\n" },
-- 		},
-- 	},
	{
		source = [==[^(?![^\n]*\n\z)]==],
		tests = {
			{
				input = "abc",
				matches = {{ index = 0, match = "" }},
			},
			{ input = "abc\n" },
		},
	},
-- 	{
-- 		source = [==[\z(?<!\n)]==],
-- 		tests = {
-- 			{
-- 				input = "abc",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 			{ input = "abc\n" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(.*(.)?)*]==],
-- 		tests = {
-- 			{
-- 				input = "abcd",
-- 				matches = {
-- 					{ index = 0, match = "abcd" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[( (A | (?(1)0|) )*   )]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "abcd",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "" },
-- 					{ index = 2, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[( ( (?(1)0|) )*   )]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "abcd",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "" },
-- 					{ index = 2, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(  (?(1)0|)*   )]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "abcd",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[[[:abcd:xyz]]]==],
		tests = {
			{
				input = "a]",
				matches = {{ index = 0, match = "a]" }},
			},
			{
				input = ":]",
				matches = {{ index = 0, match = ":]" }},
			},
		},
	},
-- 	{
-- 		source = [==[[abc[:x\]pqr]]==],
-- 		tests = {
-- 			{
-- 				input = "a",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 			{
-- 				input = "[",
-- 				matches = {{ index = 0, match = "[" }},
-- 			},
-- 			{
-- 				input = ":",
-- 				matches = {{ index = 0, match = ":" }},
-- 			},
-- 			{
-- 				input = "]",
-- 				matches = {{ index = 0, match = "]" }},
-- 			},
-- 			{
-- 				input = "p",
-- 				matches = {{ index = 0, match = "p" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[.*[op][xyz]]==],
		tests = {
			{ input = "fooabcfoo" },
		},
	},
-- 	{
-- 		source = [==[(?(?=.*b)b|^)]==],
-- 		tests = {
-- 			{
-- 				input = "adc",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 			{
-- 				input = "abc",
-- 				matches = {{ index = 0, match = "b" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?(?=^.*b)b|^)]==],
-- 		tests = {
-- 			{
-- 				input = "adc",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 			{ input = "abc" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?(?=.*b)b|^)*]==],
-- 		tests = {
-- 			{
-- 				input = "adc",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 			{
-- 				input = "abc",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?(?=.*b)b|^)+]==],
-- 		tests = {
-- 			{
-- 				input = "adc",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 			{
-- 				input = "abc",
-- 				matches = {{ index = 0, match = "b" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?(?=b).*b|^d)]==],
-- 		tests = {
-- 			{
-- 				input = "abc",
-- 				matches = {{ index = 0, match = "b" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?(?=.*b).*b|^d)]==],
-- 		tests = {
-- 			{
-- 				input = "abc",
-- 				matches = {{ index = 0, match = "ab" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^%((?(?=[a])[^%])|b)*%$]==],
-- 		tests = {
-- 			{
-- 				input = "%ab%",
-- 				matches = {
-- 					{ index = 0, match = "%ab%" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?i)a(?-i)b|c]==],
-- 		tests = {
-- 			{
-- 				input = "XabX",
-- 				matches = {{ index = 0, match = "ab" }},
-- 			},
-- 			{
-- 				input = "XAbX",
-- 				matches = {{ index = 0, match = "Ab" }},
-- 			},
-- 			{
-- 				input = "CcC",
-- 				matches = {{ index = 0, match = "c" }},
-- 			},
-- 			{ input = "** Failers" },
-- 			{ input = "XABX" },
-- 		},
-- 	},
	{
		source = [==[[\x00-\xff\s]+]==],
		tests = {
			{
				input = "\010\011\012\013",
				matches = {{ index = 0, match = "\010\011\012\013" }},
			},
		},
	},
	{
		source = [==[(abc)\1]==],
		flags = "i",
		tests = {
			{ input = "abc" },
		},
	},
	{
		source = [==[(abc)\1]==],
		tests = {
			{ input = "abc" },
		},
	},
	{
		source = [==[[^a]*]==],
		flags = "i",
		tests = {
			{
				input = "12abc",
				matches = {{ index = 0, match = "12" }},
			},
			-- {
			-- 	input = "12ABC",
			-- 	matches = {{ index = 0, match = "12" }},
			-- },
		},
	},
	{
		source = [==[[^a]*+]==],
		flags = "i",
		tests = {
			{
				input = "12abc",
				matches = {{ index = 0, match = "12" }},
			},
			-- {
			-- 	input = "12ABC",
			-- 	matches = {{ index = 0, match = "12" }},
			-- },
		},
	},
	{
		source = [==[[^a]*?X]==],
		flags = "i",
		tests = {
			{ input = "** Failers" },
			{ input = "12abc" },
			{ input = "12ABC" },
		},
	},
	{
		source = [==[[^a]+?X]==],
		flags = "i",
		tests = {
			{ input = "** Failers" },
			{ input = "12abc" },
			{ input = "12ABC" },
		},
	},
	{
		source = [==[[^a]?X]==],
		flags = "i",
		tests = {
			{
				input = "12aXbcX",
				matches = {{ index = 0, match = "X" }},
			},
			-- {
			-- 	input = "12AXBCX",
			-- 	matches = {{ index = 0, match = "X" }},
			-- },
			{
				input = "BCX",
				matches = {{ index = 0, match = "CX" }},
			},
		},
	},
	{
		source = [==[[^a]??X]==],
		flags = "i",
		tests = {
			{
				input = "12aXbcX",
				matches = {{ index = 0, match = "X" }},
			},
			-- {
			-- 	input = "12AXBCX",
			-- 	matches = {{ index = 0, match = "X" }},
			-- },
			{
				input = "BCX",
				matches = {{ index = 0, match = "CX" }},
			},
		},
	},
	{
		source = [==[[^a]?+X]==],
		flags = "i",
		tests = {
			{
				input = "12aXbcX",
				matches = {{ index = 0, match = "cX" }},
			},
			-- {
			-- 	input = "12AXBCX",
			-- 	matches = {{ index = 0, match = "CX" }},
			-- },
			{
				input = "BCX",
				matches = {{ index = 0, match = "CX" }},
			},
		},
	},
	{
		source = [==[[^a]{2,3}]==],
		flags = "i",
		tests = {
			{
				input = "abcdef",
				matches = {{ index = 0, match = "bcd" }},
			},
			-- {
			-- 	input = "ABCDEF",
			-- 	matches = {{ index = 0, match = "BCD" }},
			-- },
		},
	},
	{
		source = [==[[^a]{2,3}?]==],
		flags = "i",
		tests = {
			{
				input = "abcdef",
				matches = {{ index = 0, match = "bc" }},
			},
			-- {
			-- 	input = "ABCDEF",
			-- 	matches = {{ index = 0, match = "BC" }},
			-- },
		},
	},
	{
		source = [==[[^a]{2,3}+]==],
		flags = "i",
		tests = {
			{
				input = "abcdef",
				matches = {{ index = 0, match = "bcd" }},
			},
			-- {
			-- 	input = "ABCDEF",
			-- 	matches = {{ index = 0, match = "BCD" }},
			-- },
		},
	},
-- 	{
-- 		source = [==[((a|)+)+Z]==],
-- 		tests = {
-- 			{
-- 				input = "Z",
-- 				matches = {
-- 					{ index = 0, match = "Z" },
-- 					{ index = 1, match = "" },
-- 					{ index = 2, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[(a)b|(a)c]==],
		tests = {
			{
				input = "ac",
				matches = {
					{ index = 0, match = "ac" },
					{ index = 1, match = "<unset>" },
					{ index = 2, match = "a" },
				}
			},
		},
	},
	{
		source = [==[(?>(a))b|(a)c]==],
		tests = {
			{
				input = "ac",
				matches = {
					{ index = 0, match = "ac" },
					{ index = 1, match = "<unset>" },
					{ index = 2, match = "a" },
				}
			},
		},
	},
	{
		source = [==[(?=(a))ab|(a)c]==],
		tests = {
			{
				input = "ac",
				matches = {
					{ index = 0, match = "ac" },
					{ index = 1, match = "<unset>" },
					{ index = 2, match = "a" },
				}
			},
		},
	},
	{
		source = [==[((?>(a))b|(a)c)]==],
		tests = {
			{
				input = "ac",
				matches = {
					{ index = 0, match = "ac" },
					{ index = 1, match = "ac" },
					{ index = 2, match = "<unset>" },
					{ index = 3, match = "a" },
				}
			},
		},
	},
-- 	{
-- 		source = [==[((?>(a))b|(a)c)++]==],
-- 		tests = {
-- 			{
-- 				input = "ac",
-- 				matches = {
-- 					{ index = 0, match = "ac" },
-- 					{ index = 1, match = "ac" },
-- 					{ index = 2, match = "<unset>" },
-- 					{ index = 3, match = "a" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?:(?>(a))b|(a)c)++]==],
-- 		tests = {
-- 			{
-- 				input = "ac",
-- 				matches = {
-- 					{ index = 0, match = "ac" },
-- 					{ index = 1, match = "<unset>" },
-- 					{ index = 2, match = "a" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[(?=(?>(a))b|(a)c)(..)]==],
		tests = {
			{
				input = "ac",
				matches = {
					{ index = 0, match = "ac" },
					{ index = 1, match = "<unset>" },
					-- { index = 2, match = "a" },
					{ index = 3, match = "ac" },
				}
			},
		},
	},
	{
		source = [==[(?>(?>(a))b|(a)c)]==],
		tests = {
			{
				input = "ac",
				matches = {
					{ index = 0, match = "ac" },
					{ index = 1, match = "<unset>" },
					-- { index = 2, match = "a" },
				}
			},
		},
	},
-- 	{
-- 		source = [==[(?:(?>([ab])))+a=]==],
-- 		flags = "aftertext",
-- 		tests = {
-- 			{
-- 				input = "=ba=",
-- 				matches = {{ index = 0, match = "ba=" }},
-- 			},
-- 			{
-- 				input = "0+",
-- 				matches = {{ index = 1, match = "b" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?>([ab]))+a=]==],
-- 		flags = "aftertext",
-- 		tests = {
-- 			{
-- 				input = "=ba=",
-- 				matches = {{ index = 0, match = "ba=" }},
-- 			},
-- 			{
-- 				input = "0+",
-- 				matches = {{ index = 1, match = "b" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[((?>(a+)b)+(aabab))]==],
		tests = {
			{
				input = "aaaabaaabaabab",
				matches = {
					-- { index = 0, match = "aaaabaaabaabab" },
					-- { index = 1, match = "aaaabaaabaabab" },
					-- { index = 2, match = "aaa" },
					{ index = 3, match = "aabab" },
				}
			},
		},
	},
	{
		source = [==[(?>a+|ab)+?c]==],
		tests = {
			{ input = "aabc" },
		},
	},
	{
		source = [==[(?>a+|ab)+c]==],
		tests = {
			{ input = "aabc" },
		},
	},
	{
		source = [==[(?:a+|ab)+c]==],
		tests = {
			{
				input = "aabc",
				matches = {{ index = 0, match = "aabc" }},
			},
		},
	},
-- 	{
-- 		source = [==[(?(?=(a))a)]==],
-- 		tests = {
-- 			{
-- 				input = "a",
-- 				matches = {
-- 					{ index = 0, match = "a" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?(?=(a))a)(b)]==],
-- 		tests = {
-- 			{
-- 				input = "ab",
-- 				matches = {
-- 					{ index = 0, match = "ab" },
-- 					{ index = 1, match = "a" },
-- 					{ index = 2, match = "b" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[^(?:a|ab)++c]==],
		tests = {
			{ input = "aaaabc" },
		},
	},
	{
		source = [==[^(?>a|ab)++c]==],
		tests = {
			{ input = "aaaabc" },
		},
	},
	{
		source = [==[^(?:a|ab)+c]==],
		tests = {
			{
				input = "aaaabc",
				matches = {{ index = 0, match = "aaaabc" }},
			},
		},
	},
-- 	{
-- 		source = [==[(?=abc){3}abc]==],
-- 		flags = "aftertext",
-- 		tests = {
-- 			{
-- 				input = "abcabcabc",
-- 				matches = {{ index = 0, match = "abc" }},
-- 			},
-- 			{
-- 				input = "0+ abcabc",
-- 				matches = {
-- 				}
-- 			},
-- 			{ input = "** Failers" },
-- 			{ input = "xyz" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?=abc)+abc]==],
-- 		flags = "aftertext",
-- 		tests = {
-- 			{
-- 				input = "abcabcabc",
-- 				matches = {{ index = 0, match = "abc" }},
-- 			},
-- 			{
-- 				input = "0+ abcabc",
-- 				matches = {
-- 				}
-- 			},
-- 			{ input = "** Failers" },
-- 			{ input = "xyz" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?=abc)++abc]==],
-- 		flags = "aftertext",
-- 		tests = {
-- 			{
-- 				input = "abcabcabc",
-- 				matches = {{ index = 0, match = "abc" }},
-- 			},
-- 			{ input = "** Failers" },
-- 			{ input = "xyz" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?=abc){0}xyz]==],
-- 		tests = {
-- 			{
-- 				input = "xyz",
-- 				matches = {{ index = 0, match = "xyz" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[(?=abc){1}xyz]==],
		tests = {
			{ input = "** Failers" },
			{ input = "xyz" },
		},
	},
	{
		source = [==[(?=(a))?.]==],
		tests = {
			{
				input = "ab",
				matches = {
					{ index = 0, match = "a" },
					-- { index = 1, match = "a" },
				}
			},
			{
				input = "bc",
				matches = {{ index = 0, match = "b" }},
			},
		},
	},
	{
		source = [==[(?=(a))??.]==],
		tests = {
			{
				input = "ab",
				matches = {{ index = 0, match = "a" }},
			},
			{
				input = "bc",
				matches = {{ index = 0, match = "b" }},
			},
		},
	},
	{
		source = [==[^(?=(?1))?[az]([abc])d]==],
		tests = {
			{
				input = "abd",
				matches = {
					{ index = 0, match = "abd" },
					{ index = 1, match = "b" },
				}
			},
			{
				input = "zcdxx",
				matches = {
					{ index = 0, match = "zcd" },
					{ index = 1, match = "c" },
				}
			},
		},
	},
	{
		source = [==[^(?!a){0}\w+]==],
		tests = {
			{
				input = "aaaaa",
				matches = {{ index = 0, match = "aaaaa" }},
			},
		},
	},
	{
		source = [==[(?<=(abc))?xyz]==],
		tests = {
			-- {
			-- 	input = "abcxyz",
			-- 	matches = {
			-- 		{ index = 0, match = "xyz" },
			-- 		{ index = 1, match = "abc" },
			-- 	}
			-- },
			{
				input = "pqrxyz",
				matches = {{ index = 0, match = "xyz" }},
			},
		},
	},
	{
		source = [==[^[\g<a>]+]==],
		tests = {
			{
				input = "ggg<<<aaa>>>",
				matches = {{ index = 0, match = "ggg<<<aaa>>>" }},
			},
			{ input = "** Failers" },
			{ input = "\\ga" },
		},
	},
	{
		source = [==[^[\ga]+]==],
		tests = {
			{
				input = "gggagagaxyz",
				matches = {{ index = 0, match = "gggagaga" }},
			},
		},
	},
	{
		source = [==[^[:a[:digit:]]+]==],
		tests = {
			{
				input = "aaaa444:::Z",
				matches = {{ index = 0, match = "aaaa444:::" }},
			},
		},
	},
	{
		source = [==[^[:a[:digit:]:b]+]==],
		tests = {
			{
				input = "aaaa444:::bbbZ",
				matches = {{ index = 0, match = "aaaa444:::bbb" }},
			},
		},
	},
	{
		source = [==[[:a]xxx[b:]]==],
		tests = {
			{
				input = ":xxx:",
				matches = {{ index = 0, match = ":xxx:" }},
			},
		},
	},
	{
		source = [==[(?<=a{2})b]==],
		flags = "i",
		tests = {
			{
				input = "xaabc",
				matches = {{ index = 0, match = "b" }},
			},
			{ input = "** Failers" },
			{ input = "xabc" },
		},
	},
	{
		source = [==[(?<!a{2})b]==],
		flags = "i",
		tests = {
			{
				input = "xabc",
				matches = {{ index = 0, match = "b" }},
			},
			{ input = "** Failers" },
			{ input = "xaabc" },
		},
	},
	{
		source = [==[(?<=a\h)c]==],
		tests = {
			{
				input = "xa c",
				matches = {{ index = 0, match = "c" }},
			},
		},
	},
	{
		source = [==[(?<=[^a]{2})b]==],
		tests = {
			{
				input = "axxbc",
				matches = {{ index = 0, match = "b" }},
			},
			{
				input = "aAAbc",
				matches = {{ index = 0, match = "b" }},
			},
			{ input = "** Failers" },
			{ input = "xaabc" },
		},
	},
	{
		source = [==[(?<=[^a]{2})b]==],
		flags = "i",
		tests = {
			{
				input = "axxbc",
				matches = {{ index = 0, match = "b" }},
			},
			{ input = "** Failers" },
			-- { input = "aAAbc" },
			{ input = "xaabc" },
		},
	},
	{
		source = [==[(?<=a\H)c]==],
		tests = {
			{
				input = "abc",
				matches = {{ index = 0, match = "c" }},
			},
		},
	},
	{
		source = [==[(?<=a\V)c]==],
		tests = {
			{
				input = "abc",
				matches = {{ index = 0, match = "c" }},
			},
		},
	},
	{
		source = [==[(?<=a\v)c]==],
		tests = {
			{
				input = "a\nc",
				matches = {{ index = 0, match = "c" }},
			},
		},
	},
-- 	{
-- 		source = [==[(?(?=c)c|d)++Y]==],
-- 		tests = {
-- 			{
-- 				input = "XcccddYX",
-- 				matches = {{ index = 0, match = "cccddY" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?(?=c)c|d)*+Y]==],
-- 		tests = {
-- 			{
-- 				input = "XcccddYX",
-- 				matches = {{ index = 0, match = "cccddY" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[^(a{2,3}){2,}+a]==],
		tests = {
			-- {
			-- 	input = "aaaaaaa",
			-- 	matches = {
			-- 		{ index = 0, match = "aaaaaaa" },
			-- 		{ index = 1, match = "aaa" },
			-- 	}
			-- },
			{ input = "** Failers" },
			{ input = "aaaaaa" },
			{ input = "aaaaaaaaa" },
		},
	},
	{
		source = [==[^(a{2,3})++a]==],
		tests = {
			{ input = "** Failers" },
			{ input = "aaaaaa" },
		},
	},
	{
		source = [==[^(a{2,3})*+a]==],
		tests = {
			{ input = "** Failers" },
			{ input = "aaaaaa" },
		},
	},
-- 	{
-- 		source = [==[ab\Cde]==],
-- 		tests = {
-- 			{
-- 				input = "abXde",
-- 				matches = {{ index = 0, match = "abXde" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?<=ab\Cde)X]==],
-- 		tests = {
-- 			{
-- 				input = "abZdeX",
-- 				matches = {{ index = 0, match = "X" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[\H\h\V\v]==],
		tests = {
			{
				input = "X X\010",
				matches = {{ index = 0, match = "X X\010" }},
			},
			{
				input = "X\009X\011",
				matches = {{ index = 0, match = "X\009X\011" }},
			},
			{ input = "** Failers" },
			-- { input = "\160 X\010" },
		},
	},
-- 	{
-- 		source = [==[\H*\h+\V?\v{3,4}]==],
-- 		tests = {
-- 			{
-- 				input = "\009\032\160X\010\011\012\013\010",
-- 				matches = {{ index = 0, match = "\009 \160X\010\011\012\013" }},
-- 			},
-- 			{
-- 				input = "\009\032\160\010\011\012\013\010",
-- 				matches = {{ index = 0, match = "\009 \160\010\011\012\013" }},
-- 			},
-- 			{
-- 				input = "\009\032\160\010\011\012",
-- 				matches = {{ index = 0, match = "\009 \160\010\011\012" }},
-- 			},
-- 			{ input = "** Failers" },
-- 			{ input = "\009\032\160\010\011" },
-- 		},
-- 	},
	{
		source = [==[\H{3,4}]==],
		tests = {
			{
				input = "XY  ABCDE",
				matches = {{ index = 0, match = "ABCD" }},
			},
			{
				input = "XY  PQR ST",
				matches = {{ index = 0, match = "PQR" }},
			},
		},
	},
	{
		source = [==[.\h{3,4}.]==],
		tests = {
			{
				input = "XY  AB    PQRS",
				matches = {{ index = 0, match = "B    P" }},
			},
		},
	},
	{
		source = [==[\h*X\h?\H+Y\H?Z]==],
		tests = {
			{
				input = ">XNNNYZ",
				matches = {{ index = 0, match = "XNNNYZ" }},
			},
			{
				input = ">  X NYQZ",
				matches = {{ index = 0, match = "  X NYQZ" }},
			},
			{ input = "** Failers" },
			{ input = ">XYZ" },
			{ input = ">  X NY Z" },
		},
	},
	{
		source = [==[\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c]==],
		tests = {
			{
				input = ">XY\010Z\010A\011NN\012",
				matches = {{ index = 0, match = "XY\010Z\010A\011NN\012" }},
			},
			{
				input = ">\010\013X\010Y\010\011ZZZ\010AAA\011NNN\012",
				matches = {{ index = 0, match = "\010\013X\010Y\010\011ZZZ\010AAA\011NNN\012" }},
			},
		},
	},
	{
		source = [==[(foo)\Kbar]==],
		tests = {
			{
				input = "foobar",
				matches = {
					{ index = 0, match = "bar" },
					{ index = 1, match = "foo" },
				}
			},
		},
	},
	{
		source = [==[(foo)(\Kbar|baz)]==],
		tests = {
			{
				input = "foobar",
				matches = {
					{ index = 0, match = "bar" },
					{ index = 1, match = "foo" },
					{ index = 2, match = "bar" },
				}
			},
			{
				input = "foobaz",
				matches = {
					{ index = 0, match = "foobaz" },
					{ index = 1, match = "foo" },
					{ index = 2, match = "baz" },
				}
			},
		},
	},
	{
		source = [==[(foo\Kbar)baz]==],
		tests = {
			{
				input = "foobarbaz",
				matches = {
					{ index = 0, match = "barbaz" },
					{ index = 1, match = "foobar" },
				}
			},
		},
	},
-- 	{
-- 		source = [==[abc\K|def\K]==],
-- 		flags = "g,aftertext",
-- 		tests = {
-- 			{
-- 				input = "Xabcdefghi",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[ab\Kc|de\Kf]==],
-- 		flags = "g,aftertext",
-- 		tests = {
-- 			{
-- 				input = "Xabcdefghi",
-- 				matches = {{ index = 0, match = "c" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?=C)]==],
-- 		flags = "g,aftertext",
-- 		tests = {
-- 			{
-- 				input = "ABCDECBA",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^abc\K]==],
-- 		flags = "aftertext",
-- 		tests = {
-- 			{
-- 				input = "abcdef",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 			{
-- 				input = "0+ def",
-- 				matches = {
-- 				}
-- 			},
-- 			{ input = "** Failers" },
-- 			{ input = "defabcxyz" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-02}Z]==],
-- 		tests = {
-- 			{
-- 				input = "ababababbbabZXXXX",
-- 				matches = {
-- 					{ index = 0, match = "ababababbbabZ" },
-- 					{ index = 1, match = "ab" },
-- 					{ index = 2, match = "b" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?<A>tom|bon)-\g{A}]==],
-- 		tests = {
-- 			{
-- 				input = "tom-tom",
-- 				matches = {
-- 					{ index = 0, match = "tom-tom" },
-- 					{ index = 1, match = "tom" },
-- 				}
-- 			},
-- 			{
-- 				input = "bon-bon",
-- 				matches = {
-- 					{ index = 0, match = "bon-bon" },
-- 					{ index = 1, match = "bon" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(^(a|b\g{-1}))]==],
-- 		tests = {
-- 			{ input = "bacxxx" },
-- 		},
-- 	},
	{
		source = [==[(?|(abc)|(xyz))\1]==],
		tests = {
			{
				input = "abcabc",
				matches = {
					{ index = 0, match = "abcabc" },
					{ index = 1, match = "abc" },
				}
			},
			{
				input = "xyzxyz",
				matches = {
					{ index = 0, match = "xyzxyz" },
					{ index = 1, match = "xyz" },
				}
			},
			{ input = "** Failers" },
			{ input = "abcxyz" },
			{ input = "xyzabc" },
		},
	},
	{
		source = [==[(?|(abc)|(xyz))(?1)]==],
		tests = {
			{
				input = "abcabc",
				matches = {
					{ index = 0, match = "abcabc" },
					{ index = 1, match = "abc" },
				}
			},
			{
				input = "xyzabc",
				matches = {
					{ index = 0, match = "xyzabc" },
					{ index = 1, match = "xyz" },
				}
			},
			{ input = "** Failers" },
			{ input = "xyzxyz" },
		},
	},
-- 	{
-- 		source = [==[^X(?5)(a)(?|(b)|(q))(c)(d)(Y)]==],
-- 		tests = {
-- 			{
-- 				input = "XYabcdY",
-- 				matches = {
-- 					{ index = 0, match = "XYabcdY" },
-- 					{ index = 1, match = "a" },
-- 					{ index = 2, match = "b" },
-- 					{ index = 3, match = "c" },
-- 					{ index = 4, match = "d" },
-- 					{ index = 5, match = "Y" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)]==],
-- 		tests = {
-- 			{
-- 				input = "XYabcdY",
-- 				matches = {
-- 					{ index = 0, match = "XYabcdY" },
-- 					{ index = 1, match = "a" },
-- 					{ index = 2, match = "b" },
-- 					{ index = 3, match = "<unset>" },
-- 					{ index = 4, match = "<unset>" },
-- 					{ index = 5, match = "c" },
-- 					{ index = 6, match = "d" },
-- 					{ index = 7, match = "Y" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)]==],
-- 		tests = {
-- 			{
-- 				input = "XYabcdY",
-- 				matches = {
-- 					{ index = 0, match = "XYabcdY" },
-- 					{ index = 1, match = "a" },
-- 					{ index = 2, match = "b" },
-- 					{ index = 3, match = "<unset>" },
-- 					{ index = 4, match = "<unset>" },
-- 					{ index = 5, match = "c" },
-- 					{ index = 6, match = "d" },
-- 					{ index = 7, match = "Y" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[(?'abc'\w+):\k<abc>{2}]==],
		tests = {
			-- {
			-- 	input = "a:aaxyz",
			-- 	matches = {
			-- 		{ index = 0, match = "a:aa" },
			-- 		{ index = 1, match = "a" },
			-- 	}
			-- },
			-- {
			-- 	input = "ab:ababxyz",
			-- 	matches = {
			-- 		{ index = 0, match = "ab:abab" },
			-- 		{ index = 1, match = "ab" },
			-- 	}
			-- },
			{ input = "** Failers" },
			{ input = "a:axyz" },
			{ input = "ab:abxyz" },
		},
	},
	{
		source = [==[(?'abc'\w+):\g{abc}{2}]==],
		tests = {
			-- {
			-- 	input = "a:aaxyz",
			-- 	matches = {
			-- 		{ index = 0, match = "a:aa" },
			-- 		{ index = 1, match = "a" },
			-- 	}
			-- },
			-- {
			-- 	input = "ab:ababxyz",
			-- 	matches = {
			-- 		{ index = 0, match = "ab:abab" },
			-- 		{ index = 1, match = "ab" },
			-- 	}
			-- },
			{ input = "** Failers" },
			{ input = "a:axyz" },
			{ input = "ab:abxyz" },
		},
	},
-- 	{
-- 		source = [==[^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "abd",
-- 				matches = {
-- 					{ index = 0, match = "abd" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 			{
-- 				input = "ce",
-- 				matches = {{ index = 0, match = "ce" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(a.)\g-1Z]==],
-- 		tests = {
-- 			{
-- 				input = "aXaXZ",
-- 				matches = {
-- 					{ index = 0, match = "aXaXZ" },
-- 					{ index = 1, match = "aX" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(a.)\g{-1}Z]==],
-- 		tests = {
-- 			{
-- 				input = "aXaXZ",
-- 				matches = {
-- 					{ index = 0, match = "aXaXZ" },
-- 					{ index = 1, match = "aX" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(?(DEFINE) (?<A> a) (?<B> b) )  (?&A) (?&B) ]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "abcd",
-- 				matches = {{ index = 0, match = "ab" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT))
--   (?(DEFINE)
--   (?<NAME_PAT>[a-z]+)
--   (?<ADDRESS_PAT>\d+)
--   )]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "metcalfe 33",
-- 				matches = {
-- 					{ index = 0, match = "metcalfe 33" },
-- 					{ index = 1, match = "metcalfe" },
-- 					{ index = 2, match = "33" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}]==],
-- 		tests = {
-- 			{
-- 				input = "1.2.3.4",
-- 				matches = {
-- 					{ index = 0, match = "1.2.3.4" },
-- 					{ index = 1, match = "<unset>" },
-- 					{ index = 2, match = ".4" },
-- 				}
-- 			},
-- 			{
-- 				input = "131.111.10.206",
-- 				matches = {
-- 					{ index = 0, match = "131.111.10.206" },
-- 					{ index = 1, match = "<unset>" },
-- 					{ index = 2, match = ".206" },
-- 				}
-- 			},
-- 			{
-- 				input = "10.0.0.0",
-- 				matches = {
-- 					{ index = 0, match = "10.0.0.0" },
-- 					{ index = 1, match = "<unset>" },
-- 					{ index = 2, match = ".0" },
-- 				}
-- 			},
-- 			{ input = "** Failers" },
-- 			{ input = "10.6" },
-- 			{ input = "455.3.4.5" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))]==],
-- 		tests = {
-- 			{
-- 				input = "1.2.3.4",
-- 				matches = {
-- 					{ index = 0, match = "1.2.3.4" },
-- 					{ index = 1, match = ".4" },
-- 				}
-- 			},
-- 			{
-- 				input = "131.111.10.206",
-- 				matches = {
-- 					{ index = 0, match = "131.111.10.206" },
-- 					{ index = 1, match = ".206" },
-- 				}
-- 			},
-- 			{
-- 				input = "10.0.0.0",
-- 				matches = {
-- 					{ index = 0, match = "10.0.0.0" },
-- 					{ index = 1, match = ".0" },
-- 				}
-- 			},
-- 			{ input = "** Failers" },
-- 			{ input = "10.6" },
-- 			{ input = "455.3.4.5" },
-- 		},
-- 	},
	{
		source = [==[^(\w++|\s++)*$]==],
		tests = {
			{
				input = "now is the time for all good men to come to the aid of the party",
				matches = {
					{ index = 0, match = "now is the time for all good men to come to the aid of the party" },
					{ index = 1, match = "party" },
				}
			},
			{ input = "*** Failers" },
			{ input = "this is not a line with only words and spaces!" },
		},
	},
	{
		source = [==[(\d++)(\w)]==],
		tests = {
			{
				input = "12345a",
				matches = {
					{ index = 0, match = "12345a" },
					{ index = 1, match = "12345" },
					{ index = 2, match = "a" },
				}
			},
			{ input = "*** Failers" },
			{ input = "12345+" },
		},
	},
	{
		source = [==[a++b]==],
		tests = {
			{
				input = "aaab",
				matches = {{ index = 0, match = "aaab" }},
			},
		},
	},
	{
		source = [==[(a++b)]==],
		tests = {
			{
				input = "aaab",
				matches = {
					{ index = 0, match = "aaab" },
					{ index = 1, match = "aaab" },
				}
			},
		},
	},
	{
		source = [==[(a++)b]==],
		tests = {
			{
				input = "aaab",
				matches = {
					{ index = 0, match = "aaab" },
					{ index = 1, match = "aaa" },
				}
			},
		},
	},
	{
		source = [==[([^()]++|\([^()]*\))+]==],
		tests = {
			{
				input = "((abc(ade)ufh()()x",
				matches = {
					{ index = 0, match = "abc(ade)ufh()()x" },
					{ index = 1, match = "x" },
				}
			},
		},
	},
	{
		source = [==[\(([^()]++|\([^()]+\))+\)]==],
		tests = {
			{
				input = "(abc)",
				matches = {
					{ index = 0, match = "(abc)" },
					{ index = 1, match = "abc" },
				}
			},
			{
				input = "(abc(def)xyz)",
				matches = {
					{ index = 0, match = "(abc(def)xyz)" },
					{ index = 1, match = "xyz" },
				}
			},
			{ input = "*** Failers" },
			{ input = "((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" },
		},
	},
	{
		source = [==[^([^()]|\((?1)*\))*$]==],
		tests = {
			{
				input = "abc",
				matches = {
					{ index = 0, match = "abc" },
					{ index = 1, match = "c" },
				}
			},
			-- {
			-- 	input = "a(b)c",
			-- 	matches = {
			-- 		{ index = 0, match = "a(b)c" },
			-- 		{ index = 1, match = "c" },
			-- 	}
			-- },
			-- {
			-- 	input = "a(b(c))d",
			-- 	matches = {
			-- 		{ index = 0, match = "a(b(c))d" },
			-- 		{ index = 1, match = "d" },
			-- 	}
			-- },
			{ input = "*** Failers)" },
			{ input = "a(b(c)d" },
		},
	},
	{
		source = [==[^>abc>([^()]|\((?1)*\))*<xyz<$]==],
		tests = {
			{
				input = ">abc>123<xyz<",
				matches = {
					{ index = 0, match = ">abc>123<xyz<" },
					{ index = 1, match = "3" },
				}
			},
			-- {
			-- 	input = ">abc>1(2)3<xyz<",
			-- 	matches = {
			-- 		{ index = 0, match = ">abc>1(2)3<xyz<" },
			-- 		{ index = 1, match = "3" },
			-- 	}
			-- },
			-- {
			-- 	input = ">abc>(1(2)3)<xyz<",
			-- 	matches = {
			-- 		{ index = 0, match = ">abc>(1(2)3)<xyz<" },
			-- 		{ index = 1, match = "(1(2)3)" },
			-- 	}
			-- },
		},
	},
	{
		source = [==[^(?:((.)(?1)\2|)|((.)(?3)\4|.))$]==],
		flags = "i",
		tests = {
			-- {
			-- 	input = "1221",
			-- 	matches = {
			-- 		{ index = 0, match = "1221" },
			-- 		{ index = 1, match = "1221" },
			-- 		{ index = 2, match = "1" },
			-- 	}
			-- },
			-- {
			-- 	input = "Satanoscillatemymetallicsonatas",
			-- 	matches = {
			-- 		{ index = 0, match = "Satanoscillatemymetallicsonatas" },
			-- 		{ index = 1, match = "<unset>" },
			-- 		{ index = 2, match = "<unset>" },
			-- 		{ index = 3, match = "Satanoscillatemymetallicsonatas" },
			-- 		{ index = 4, match = "S" },
			-- 	}
			-- },
			-- {
			-- 	input = "AmanaplanacanalPanama",
			-- 	matches = {
			-- 		{ index = 0, match = "AmanaplanacanalPanama" },
			-- 		{ index = 1, match = "<unset>" },
			-- 		{ index = 2, match = "<unset>" },
			-- 		{ index = 3, match = "AmanaplanacanalPanama" },
			-- 		{ index = 4, match = "A" },
			-- 	}
			-- },
			-- {
			-- 	input = "AblewasIereIsawElba",
			-- 	matches = {
			-- 		{ index = 0, match = "AblewasIereIsawElba" },
			-- 		{ index = 1, match = "<unset>" },
			-- 		{ index = 2, match = "<unset>" },
			-- 		{ index = 3, match = "AblewasIereIsawElba" },
			-- 		{ index = 4, match = "A" },
			-- 	}
			-- },
			{ input = "*** Failers" },
			{ input = "Thequickbrownfox" },
		},
	},
-- 	{
-- 		source = [==[^(\d+|\((?1)([+*-])(?1)\)|-(?1))$]==],
-- 		tests = {
-- 			{
-- 				input = "12",
-- 				matches = {
-- 					{ index = 0, match = "12" },
-- 					{ index = 1, match = "12" },
-- 				}
-- 			},
-- 			{
-- 				input = "(((2+2)*-3)-7)",
-- 				matches = {
-- 					{ index = 0, match = "(((2+2)*-3)-7)" },
-- 					{ index = 1, match = "(((2+2)*-3)-7)" },
-- 					{ index = 2, match = "-" },
-- 				}
-- 			},
-- 			{
-- 				input = "-12",
-- 				matches = {
-- 					{ index = 0, match = "-12" },
-- 					{ index = 1, match = "-12" },
-- 				}
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "((2+2)*-3)-7)" },
-- 		},
-- 	},
	{
		source = [==[^(x(y|(?1){2})z)]==],
		tests = {
			{
				input = "xyz",
				matches = {
					{ index = 0, match = "xyz" },
					{ index = 1, match = "xyz" },
					{ index = 2, match = "y" },
				}
			},
			-- {
			-- 	input = "xxyzxyzz",
			-- 	matches = {
			-- 		{ index = 0, match = "xxyzxyzz" },
			-- 		{ index = 1, match = "xxyzxyzz" },
			-- 		{ index = 2, match = "xyzxyz" },
			-- 	}
			-- },
			{ input = "*** Failers" },
			{ input = "xxyzz" },
			{ input = "xxyzxyzxyzz" },
		},
	},
-- 	{
-- 		source = [==[((< (?: (?(R) \d++  | [^<>]*+) | (?2)) * >))]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "<>",
-- 				matches = {
-- 					{ index = 0, match = "<>" },
-- 					{ index = 1, match = "<>" },
-- 					{ index = 2, match = "<>" },
-- 				}
-- 			},
-- 			{
-- 				input = "<abcd>",
-- 				matches = {
-- 					{ index = 0, match = "<abcd>" },
-- 					{ index = 1, match = "<abcd>" },
-- 					{ index = 2, match = "<abcd>" },
-- 				}
-- 			},
-- 			{
-- 				input = "<abc <123> hij>",
-- 				matches = {
-- 					{ index = 0, match = "<abc <123> hij>" },
-- 					{ index = 1, match = "<abc <123> hij>" },
-- 					{ index = 2, match = "<abc <123> hij>" },
-- 				}
-- 			},
-- 			{
-- 				input = "<abc <def> hij>",
-- 				matches = {
-- 					{ index = 0, match = "<def>" },
-- 					{ index = 1, match = "<def>" },
-- 					{ index = 2, match = "<def>" },
-- 				}
-- 			},
-- 			{
-- 				input = "<abc<>def>",
-- 				matches = {
-- 					{ index = 0, match = "<abc<>def>" },
-- 					{ index = 1, match = "<abc<>def>" },
-- 					{ index = 2, match = "<abc<>def>" },
-- 				}
-- 			},
-- 			{
-- 				input = "<abc<>",
-- 				matches = {
-- 					{ index = 0, match = "<>" },
-- 					{ index = 1, match = "<>" },
-- 					{ index = 2, match = "<>" },
-- 				}
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "<abc" },
-- 		},
-- 	},
	{
		source = [==[^a+(*FAIL)]==],
		tests = {
			{ input = "aaaaaa" },
		},
	},
	{
		source = [==[a+b?c+(*FAIL)]==],
		tests = {
			{ input = "aaabccc" },
		},
	},
-- 	{
-- 		source = [==[a+b?(*PRUNE)c+(*FAIL)]==],
-- 		tests = {
-- 			{ input = "aaabccc" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[a+b?(*COMMIT)c+(*FAIL)]==],
-- 		tests = {
-- 			{ input = "aaabccc" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[a+b?(*SKIP)c+(*FAIL)]==],
-- 		tests = {
-- 			{ input = "aaabcccaaabccc" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(?:aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})]==],
-- 		tests = {
-- 			{
-- 				input = "aaaxxxxxx",
-- 				matches = {{ index = 0, match = "aaaxxxxxx" }},
-- 			},
-- 			{
-- 				input = "aaa++++++",
-- 				matches = {{ index = 0, match = "aaa" }},
-- 			},
-- 			{
-- 				input = "bbbxxxxx",
-- 				matches = {{ index = 0, match = "bbbxxxxx" }},
-- 			},
-- 			{
-- 				input = "bbb+++++",
-- 				matches = {{ index = 0, match = "bbb" }},
-- 			},
-- 			{
-- 				input = "cccxxxx",
-- 				matches = {{ index = 0, match = "cccxxxx" }},
-- 			},
-- 			{
-- 				input = "ccc++++",
-- 				matches = {{ index = 0, match = "ccc" }},
-- 			},
-- 			{
-- 				input = "dddddddd",
-- 				matches = {{ index = 0, match = "ddd" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})]==],
-- 		tests = {
-- 			{
-- 				input = "aaaxxxxxx",
-- 				matches = {
-- 					{ index = 0, match = "aaaxxxxxx" },
-- 					{ index = 1, match = "aaaxxxxxx" },
-- 				}
-- 			},
-- 			{
-- 				input = "aaa++++++",
-- 				matches = {
-- 					{ index = 0, match = "aaa" },
-- 					{ index = 1, match = "aaa" },
-- 				}
-- 			},
-- 			{
-- 				input = "bbbxxxxx",
-- 				matches = {
-- 					{ index = 0, match = "bbbxxxxx" },
-- 					{ index = 1, match = "bbbxxxxx" },
-- 				}
-- 			},
-- 			{
-- 				input = "bbb+++++",
-- 				matches = {
-- 					{ index = 0, match = "bbb" },
-- 					{ index = 1, match = "bbb" },
-- 				}
-- 			},
-- 			{
-- 				input = "cccxxxx",
-- 				matches = {
-- 					{ index = 0, match = "cccxxxx" },
-- 					{ index = 1, match = "cccxxxx" },
-- 				}
-- 			},
-- 			{
-- 				input = "ccc++++",
-- 				matches = {
-- 					{ index = 0, match = "ccc" },
-- 					{ index = 1, match = "ccc" },
-- 				}
-- 			},
-- 			{
-- 				input = "dddddddd",
-- 				matches = {
-- 					{ index = 0, match = "ddd" },
-- 					{ index = 1, match = "ddd" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a+b?(*THEN)c+(*FAIL)]==],
-- 		tests = {
-- 			{ input = "aaabccc" },
-- 		},
-- 	},
	{
		source = [==[(A (A|B(*ACCEPT)|C) D)(E)]==],
		flags = "x",
		tests = {
			{
				input = "AB",
				matches = {
					{ index = 0, match = "AB" },
					-- { index = 1, match = "AB" },
					-- { index = 2, match = "B" },
				}
			},
			{
				input = "ABX",
				matches = {
					{ index = 0, match = "AB" },
					-- { index = 1, match = "AB" },
					-- { index = 2, match = "B" },
				}
			},
			{
				input = "AADE",
				matches = {
					{ index = 0, match = "AADE" },
					{ index = 1, match = "AAD" },
					{ index = 2, match = "A" },
					{ index = 3, match = "E" },
				}
			},
			{
				input = "ACDE",
				matches = {
					{ index = 0, match = "ACDE" },
					{ index = 1, match = "ACD" },
					{ index = 2, match = "C" },
					{ index = 3, match = "E" },
				}
			},
			{ input = "** Failers" },
			{ input = "AD" },
		},
	},
	{
		source = [==[^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$]==],
		flags = "i",
		tests = {
			-- {
			-- 	input = "1221",
			-- 	matches = {
			-- 		{ index = 0, match = "1221" },
			-- 		{ index = 1, match = "1221" },
			-- 		{ index = 2, match = "1" },
			-- 	}
			-- },
			-- {
			-- 	input = "Satan, oscillate my metallic sonatas!",
			-- 	matches = {
			-- 		{ index = 0, match = "Satan, oscillate my metallic sonatas!" },
			-- 		{ index = 1, match = "<unset>" },
			-- 		{ index = 2, match = "<unset>" },
			-- 		{ index = 3, match = "Satan, oscillate my metallic sonatas" },
			-- 		{ index = 4, match = "S" },
			-- 	}
			-- },
			-- {
			-- 	input = "A man, a plan, a canal: Panama!",
			-- 	matches = {
			-- 		{ index = 0, match = "A man, a plan, a canal: Panama!" },
			-- 		{ index = 1, match = "<unset>" },
			-- 		{ index = 2, match = "<unset>" },
			-- 		{ index = 3, match = "A man, a plan, a canal: Panama" },
			-- 		{ index = 4, match = "A" },
			-- 	}
			-- },
			-- {
			-- 	input = "Able was I ere I saw Elba.",
			-- 	matches = {
			-- 		{ index = 0, match = "Able was I ere I saw Elba." },
			-- 		{ index = 1, match = "<unset>" },
			-- 		{ index = 2, match = "<unset>" },
			-- 		{ index = 3, match = "Able was I ere I saw Elba" },
			-- 		{ index = 4, match = "A" },
			-- 	}
			-- },
			{ input = "*** Failers" },
			{ input = "The quick brown fox" },
		},
	},
	{
		source = [==[^((.)(?1)\2|.)$]==],
		tests = {
			{
				input = "a",
				matches = {
					{ index = 0, match = "a" },
					{ index = 1, match = "a" },
				}
			},
			-- {
			-- 	input = "aba",
			-- 	matches = {
			-- 		{ index = 0, match = "aba" },
			-- 		{ index = 1, match = "aba" },
			-- 		{ index = 2, match = "a" },
			-- 	}
			-- },
			-- {
			-- 	input = "aabaa",
			-- 	matches = {
			-- 		{ index = 0, match = "aabaa" },
			-- 		{ index = 1, match = "aabaa" },
			-- 		{ index = 2, match = "a" },
			-- 	}
			-- },
			-- {
			-- 	input = "abcdcba",
			-- 	matches = {
			-- 		{ index = 0, match = "abcdcba" },
			-- 		{ index = 1, match = "abcdcba" },
			-- 		{ index = 2, match = "a" },
			-- 	}
			-- },
			-- {
			-- 	input = "pqaabaaqp",
			-- 	matches = {
			-- 		{ index = 0, match = "pqaabaaqp" },
			-- 		{ index = 1, match = "pqaabaaqp" },
			-- 		{ index = 2, match = "p" },
			-- 	}
			-- },
			-- {
			-- 	input = "ablewasiereisawelba",
			-- 	matches = {
			-- 		{ index = 0, match = "ablewasiereisawelba" },
			-- 		{ index = 1, match = "ablewasiereisawelba" },
			-- 		{ index = 2, match = "a" },
			-- 	}
			-- },
			{ input = "rhubarb" },
			{ input = "the quick brown fox" },
		},
	},
	{
		source = [==[(a)(?<=b(?1))]==],
		tests = {
			{
				input = "baz",
				matches = {
					{ index = 0, match = "a" },
					{ index = 1, match = "a" },
				}
			},
			{ input = "** Failers" },
			{ input = "caz" },
		},
	},
	{
		source = [==[(?<=b(?1))(a)]==],
		tests = {
			{
				input = "zbaaz",
				matches = {
					{ index = 0, match = "a" },
					{ index = 1, match = "a" },
				}
			},
			{ input = "** Failers" },
			{ input = "aaa" },
		},
	},
-- 	{
-- 		source = [==[(?<X>a)(?<=b(?&X))]==],
-- 		tests = {
-- 			{
-- 				input = "baz",
-- 				matches = {
-- 					{ index = 0, match = "a" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[^(?|(abc)|(def))\1]==],
		tests = {
			{
				input = "abcabc",
				matches = {
					{ index = 0, match = "abcabc" },
					{ index = 1, match = "abc" },
				}
			},
			{
				input = "defdef",
				matches = {
					{ index = 0, match = "defdef" },
					{ index = 1, match = "def" },
				}
			},
			{ input = "** Failers" },
			{ input = "abcdef" },
			{ input = "defabc" },
		},
	},
	{
		source = [==[^(?|(abc)|(def))(?1)]==],
		tests = {
			{
				input = "abcabc",
				matches = {
					{ index = 0, match = "abcabc" },
					{ index = 1, match = "abc" },
				}
			},
			{
				input = "defabc",
				matches = {
					{ index = 0, match = "defabc" },
					{ index = 1, match = "def" },
				}
			},
			{ input = "** Failers" },
			{ input = "defdef" },
			{ input = "abcdef" },
		},
	},
-- 	{
-- 		source = [==[(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |b(?<quote> (?<apostrophe>')|(?<realquote>")) ) (?('quote')[a-z]+|[0-9]+)]==],
-- 		flags = "x,dupnames",
-- 		tests = {
-- 			{
-- 				input = "a\\\"aaaaa",
-- 				matches = {
-- 					{ index = 0, match = "a\"aaaaa" },
-- 					{ index = 1, match = "\"" },
-- 					{ index = 2, match = "<unset>" },
-- 					{ index = 3, match = "\"" },
-- 				}
-- 			},
-- 			{
-- 				input = "b\\\"aaaaa",
-- 				matches = {
-- 					{ index = 0, match = "b\"aaaaa" },
-- 					{ index = 1, match = "<unset>" },
-- 					{ index = 2, match = "<unset>" },
-- 					{ index = 3, match = "<unset>" },
-- 					{ index = 4, match = "\"" },
-- 					{ index = 5, match = "<unset>" },
-- 					{ index = 6, match = "\"" },
-- 				}
-- 			},
-- 			{ input = "** Failers" },
-- 			{ input = "b\\\"11111" },
-- 		},
-- 	},
	{
		source = [==[(?:(?1)|B)(A(*F)|C)]==],
		tests = {
			{
				input = "ABCD",
				matches = {
					{ index = 0, match = "BC" },
					{ index = 1, match = "C" },
				}
			},
			{
				input = "CCD",
				matches = {
					{ index = 0, match = "CC" },
					{ index = 1, match = "C" },
				}
			},
			{ input = "** Failers" },
			{ input = "CAD" },
		},
	},
	{
		source = [==[^(?:(?1)|B)(A(*F)|C)]==],
		tests = {
			{
				input = "CCD",
				matches = {
					{ index = 0, match = "CC" },
					{ index = 1, match = "C" },
				}
			},
			{
				input = "BCD",
				matches = {
					{ index = 0, match = "BC" },
					{ index = 1, match = "C" },
				}
			},
			{ input = "** Failers" },
			{ input = "ABCD" },
			{ input = "CAD" },
			{ input = "BAD" },
		},
	},
	{
		source = [==[(?:(?1)|B)(A(*ACCEPT)XX|C)D]==],
		tests = {
			-- {
			-- 	input = "AAD",
			-- 	matches = {
			-- 		{ index = 0, match = "AA" },
			-- 		{ index = 1, match = "A" },
			-- 	}
			-- },
			-- {
			-- 	input = "ACD",
			-- 	matches = {
			-- 		{ index = 0, match = "ACD" },
			-- 		{ index = 1, match = "C" },
			-- 	}
			-- },
			{
				input = "BAD",
				matches = {
					{ index = 0, match = "BA" },
					-- { index = 1, match = "A" },
				}
			},
			{
				input = "BCD",
				matches = {
					{ index = 0, match = "BCD" },
					{ index = 1, match = "C" },
				}
			},
			-- {
			-- 	input = "BAX",
			-- 	matches = {
			-- 		{ index = 0, match = "BA" },
			-- 		{ index = 1, match = "A" },
			-- 	}
			-- },
			{ input = "** Failers" },
			-- { input = "ACX" },
			-- { input = "ABC" },
		},
	},
-- 	{
-- 		source = [==[(?(DEFINE)(A))B(?1)C]==],
-- 		tests = {
-- 			{
-- 				input = "BAC",
-- 				matches = {{ index = 0, match = "BAC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?(DEFINE)((A)\2))B(?1)C]==],
-- 		tests = {
-- 			{
-- 				input = "BAAC",
-- 				matches = {{ index = 0, match = "BAAC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?<pn> \( ( [^()]++ | (?&pn) )* \) )]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "(ab(cd)ef)",
-- 				matches = {
-- 					{ index = 0, match = "(ab(cd)ef)" },
-- 					{ index = 1, match = "(ab(cd)ef)" },
-- 					{ index = 2, match = "ef" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[^(?=a(*SKIP)b|ac)]==],
		tests = {
			{ input = "** Failers" },
			-- { input = "ac" },
		},
	},
	{
		source = [==[^(?=a(*PRUNE)b)]==],
		tests = {
			{
				input = "ab",
				matches = {{ index = 0, match = "" }},
			},
			{ input = "** Failers" },
			-- { input = "ac" },
		},
	},
-- 	{
-- 		source = [==[^(?=a(*ACCEPT)b)]==],
-- 		tests = {
-- 			{
-- 				input = "ac",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?>a\Kb)]==],
-- 		tests = {
-- 			{
-- 				input = "ab",
-- 				matches = {{ index = 0, match = "b" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[((?>a\Kb))]==],
		tests = {
			{
				input = "ab",
				matches = {
					-- { index = 0, match = "b" },
					{ index = 1, match = "ab" },
				}
			},
		},
	},
	{
		source = [==[(a\Kb)]==],
		tests = {
			{
				input = "ab",
				matches = {
					{ index = 0, match = "b" },
					{ index = 1, match = "ab" },
				}
			},
		},
	},
	{
		source = [==[^a\Kcz|ac]==],
		tests = {
			{
				input = "ac",
				matches = {{ index = 0, match = "ac" }},
			},
		},
	},
	{
		source = [==[(?>a\Kbz|ab)]==],
		tests = {
			{
				input = "ab",
				matches = {{ index = 0, match = "ab" }},
			},
		},
	},
-- 	{
-- 		source = [==[^(?&t)(?(DEFINE)(?<t>a\Kb))$]==],
-- 		tests = {
-- 			{
-- 				input = "ab",
-- 				matches = {{ index = 0, match = "b" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^([^()]|\((?1)*\))*$]==],
-- 		tests = {
-- 			{
-- 				input = "a(b)c",
-- 				matches = {
-- 					{ index = 0, match = "a(b)c" },
-- 					{ index = 1, match = "c" },
-- 				}
-- 			},
-- 			{
-- 				input = "a(b(c)d)e",
-- 				matches = {
-- 					{ index = 0, match = "a(b(c)d)e" },
-- 					{ index = 1, match = "e" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))]==],
-- 		tests = {
-- 			{
-- 				input = "0",
-- 				matches = {
-- 					{ index = 0, match = "0" },
-- 					{ index = 1, match = "0" },
-- 				}
-- 			},
-- 			{
-- 				input = "00",
-- 				matches = {
-- 					{ index = 0, match = "00" },
-- 					{ index = 1, match = "00" },
-- 					{ index = 2, match = "0" },
-- 				}
-- 			},
-- 			{
-- 				input = "0000",
-- 				matches = {
-- 					{ index = 0, match = "0000" },
-- 					{ index = 1, match = "0000" },
-- 					{ index = 2, match = "0" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))]==],
-- 		tests = {
-- 			{
-- 				input = "0",
-- 				matches = {
-- 					{ index = 0, match = "0" },
-- 					{ index = 1, match = "0" },
-- 					{ index = 2, match = "0" },
-- 				}
-- 			},
-- 			{
-- 				input = "00",
-- 				matches = {
-- 					{ index = 0, match = "0" },
-- 					{ index = 1, match = "0" },
-- 					{ index = 2, match = "0" },
-- 				}
-- 			},
-- 			{
-- 				input = "0000",
-- 				matches = {
-- 					{ index = 0, match = "0" },
-- 					{ index = 1, match = "0" },
-- 					{ index = 2, match = "0" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[A(*COMMIT)(B|D)]==],
-- 		tests = {
-- 			{ input = "ACABX" },
-- 		},
-- 	},
	-- {
	-- 	source = [==[^(A(*PRUNE:A)B|C(*PRUNE:B)D)]==],
	-- 	flags = "mark",
	-- 	tests = {
	-- 		{ input = "** Failers" },
	-- 		{ input = "AC" },
	-- 		{ input = "CB" },
	-- 	},
	-- },
-- 	{
-- 		source = [==[(*MARK:A)(*SKIP:B)(C|X)]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "C",
-- 				matches = {
-- 					{ index = 0, match = "C" },
-- 					{ index = 1, match = "C" },
-- 				}
-- 			},
-- 			{
-- 				input = "MK: A",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "D",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = A",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(A(*THEN:A)B|C(*THEN:B)D)]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{ input = "** Failers" },
-- 			{
-- 				input = "CB",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = B",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(?:A(*THEN:A)B|C(*THEN:B)D)]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "CB",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = B",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(?>A(*THEN:A)B|C(*THEN:B)D)]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "CB",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = B",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[A(*MARK:A)A+(*SKIP:A)(B|Z) | AC]==],
-- 		flags = "x,mark",
-- 		tests = {
-- 			{
-- 				input = "AAAC",
-- 				matches = {{ index = 0, match = "AC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[A(*MARK:A)A+(*MARK:B)(*SKIP:A)(B|Z) | AC]==],
-- 		flags = "x,mark",
-- 		tests = {
-- 			{
-- 				input = "AAAC",
-- 				matches = {{ index = 0, match = "AC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[A(*:A)A+(*SKIP:A)(B|Z) | AC]==],
-- 		flags = "x,mark",
-- 		tests = {
-- 			{
-- 				input = "AAAC",
-- 				matches = {{ index = 0, match = "AC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(*:A)A+(*SKIP:A)(B|Z)]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "AAAC",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = A",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[A(*MARK:A)A+(*SKIP:B)(B|Z) | AC]==],
-- 		flags = "x,mark",
-- 		tests = {
-- 			{
-- 				input = "AAAC",
-- 				matches = {{ index = 0, match = "AC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[A(*MARK:A)A+(*SKIP:B)(B|Z) | AC(*:B)]==],
-- 		flags = "x,mark",
-- 		tests = {
-- 			{
-- 				input = "AAAC",
-- 				matches = {{ index = 0, match = "AC" }},
-- 			},
-- 			{
-- 				input = "MK: B",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(*COMMIT)(A|P)(B|P)(C|P)]==],
-- 		tests = {
-- 			{
-- 				input = "ABCDEFG",
-- 				matches = {
-- 					{ index = 0, match = "ABC" },
-- 					{ index = 1, match = "A" },
-- 					{ index = 2, match = "B" },
-- 					{ index = 3, match = "C" },
-- 				}
-- 			},
-- 			{ input = "** Failers" },
-- 			{ input = "DEFGABC" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(\w+)(?>b(*COMMIT))\w{2}]==],
-- 		tests = {
-- 			{
-- 				input = "abbb",
-- 				matches = {
-- 					{ index = 0, match = "abbb" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(\w+)b(*COMMIT)\w{2}]==],
-- 		tests = {
-- 			{ input = "abbb" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?&t)(?#()(?(DEFINE)(?<t>a))]==],
-- 		tests = {
-- 			{
-- 				input = "bac",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?]==],
-- 		tests = {
-- 			{ input = "yes" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?>(*COMMIT)(yes|no)(*THEN)(*F))?]==],
-- 		tests = {
-- 			{ input = "yes" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[b?(*SKIP)c]==],
-- 		tests = {
-- 			{
-- 				input = "bc",
-- 				matches = {{ index = 0, match = "bc" }},
-- 			},
-- 			{
-- 				input = "abc",
-- 				matches = {{ index = 0, match = "bc" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(*SKIP)bc]==],
-- 		tests = {
-- 			{ input = "a" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(*SKIP)b]==],
-- 		tests = {
-- 			{ input = "a" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?P<abn>(?P=abn)xxx|)+]==],
-- 		tests = {
-- 			{
-- 				input = "xxx",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?i:([^b]))(?1)]==],
-- 		tests = {
-- 			{
-- 				input = "aa",
-- 				matches = {
-- 					{ index = 0, match = "aa" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 			{
-- 				input = "aA",
-- 				matches = {
-- 					{ index = 0, match = "aA" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 			{
-- 				input = "** Failers",
-- 				matches = {
-- 					{ index = 0, match = "**" },
-- 					{ index = 1, match = "*" },
-- 				}
-- 			},
-- 			{ input = "ab" },
-- 			{ input = "aB" },
-- 			{ input = "Ba" },
-- 			{ input = "ba" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(?&t)*+(?(DEFINE)(?<t>a))\w$]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaaaX",
-- 				matches = {{ index = 0, match = "aaaaaaX" }},
-- 			},
-- 			{ input = "** Failers" },
-- 			{ input = "aaaaaa" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(?&t)*(?(DEFINE)(?<t>a))\w$]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaaaX",
-- 				matches = {{ index = 0, match = "aaaaaaX" }},
-- 			},
-- 			{
-- 				input = "aaaaaa",
-- 				matches = {{ index = 0, match = "aaaaaa" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(a)*+(\w)]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaX",
-- 				matches = {
-- 					{ index = 0, match = "aaaaX" },
-- 					{ index = 1, match = "a" },
-- 					{ index = 2, match = "X" },
-- 				}
-- 			},
-- 			{
-- 				input = "YZ",
-- 				matches = {
-- 					{ index = 0, match = "Y" },
-- 					{ index = 1, match = "<unset>" },
-- 					{ index = 2, match = "Y" },
-- 				}
-- 			},
-- 			{ input = "** Failers" },
-- 			{ input = "aaaa" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(?:a)*+(\w)]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaX",
-- 				matches = {
-- 					{ index = 0, match = "aaaaX" },
-- 					{ index = 1, match = "X" },
-- 				}
-- 			},
-- 			{
-- 				input = "YZ",
-- 				matches = {
-- 					{ index = 0, match = "Y" },
-- 					{ index = 1, match = "Y" },
-- 				}
-- 			},
-- 			{ input = "** Failers" },
-- 			{ input = "aaaa" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(a)++(\w)]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaX",
-- 				matches = {
-- 					{ index = 0, match = "aaaaX" },
-- 					{ index = 1, match = "a" },
-- 					{ index = 2, match = "X" },
-- 				}
-- 			},
-- 			{ input = "** Failers" },
-- 			{ input = "aaaa" },
-- 			{ input = "YZ" },
-- 		},
-- 	},
	{
		source = [==[^(?:a)++(\w)]==],
		tests = {
			-- {
			-- 	input = "aaaaX",
			-- 	matches = {
			-- 		{ index = 0, match = "aaaaX" },
			-- 		{ index = 1, match = "X" },
			-- 	}
			-- },
			{ input = "** Failers" },
			{ input = "aaaa" },
			{ input = "YZ" },
		},
	},
	{
		source = [==[^(a)?+(\w)]==],
		tests = {
			{
				input = "aaaaX",
				matches = {
					{ index = 0, match = "aa" },
					{ index = 1, match = "a" },
					{ index = 2, match = "a" },
				}
			},
			-- {
			-- 	input = "YZ",
			-- 	matches = {
			-- 		{ index = 0, match = "Y" },
			-- 		{ index = 1, match = "<unset>" },
			-- 		{ index = 2, match = "Y" },
			-- 	}
			-- },
		},
	},
	{
		source = [==[^(?:a)?+(\w)]==],
		tests = {
			{
				input = "aaaaX",
				matches = {
					{ index = 0, match = "aa" },
					{ index = 1, match = "a" },
				}
			},
			-- {
			-- 	input = "YZ",
			-- 	matches = {
			-- 		{ index = 0, match = "Y" },
			-- 		{ index = 1, match = "Y" },
			-- 	}
			-- },
		},
	},
	{
		source = [==[^(a){2,}+(\w)]==],
		tests = {
			-- {
			-- 	input = "aaaaX",
			-- 	matches = {
			-- 		{ index = 0, match = "aaaaX" },
			-- 		{ index = 1, match = "a" },
			-- 		{ index = 2, match = "X" },
			-- 	}
			-- },
			{ input = "** Failers" },
			{ input = "aaa" },
			{ input = "YZ" },
		},
	},
	{
		source = [==[^(?:a){2,}+(\w)]==],
		tests = {
			-- {
			-- 	input = "aaaaX",
			-- 	matches = {
			-- 		{ index = 0, match = "aaaaX" },
			-- 		{ index = 1, match = "X" },
			-- 	}
			-- },
			{ input = "** Failers" },
			{ input = "aaa" },
			{ input = "YZ" },
		},
	},
-- 	{
-- 		source = [==[(a|)*(?1)b]==],
-- 		tests = {
-- 			{
-- 				input = "b",
-- 				matches = {
-- 					{ index = 0, match = "b" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "ab",
-- 				matches = {
-- 					{ index = 0, match = "ab" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 			{
-- 				input = "aab",
-- 				matches = {
-- 					{ index = 0, match = "aab" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[(a)++(?1)b]==],
		tests = {
			{ input = "** Failers" },
			{ input = "ab" },
			{ input = "aab" },
		},
	},
	{
		source = [==[(a)*+(?1)b]==],
		tests = {
			{ input = "** Failers" },
			{ input = "ab" },
			{ input = "aab" },
		},
	},
-- 	{
-- 		source = [==[(?1)(?:(b)){0}]==],
-- 		tests = {
-- 			{
-- 				input = "b",
-- 				matches = {{ index = 0, match = "b" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(foo ( \( ((?:(?> [^()]+ )|(?2))*) \) ) )]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "foo(bar(baz)+baz(bop))",
-- 				matches = {
-- 					{ index = 0, match = "foo(bar(baz)+baz(bop))" },
-- 					{ index = 1, match = "foo(bar(baz)+baz(bop))" },
-- 					{ index = 2, match = "(bar(baz)+baz(bop))" },
-- 					{ index = 3, match = "bar(baz)+baz(bop)" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[(A (A|B(*ACCEPT)|C) D)(E)]==],
		flags = "x",
		tests = {
			{
				input = "AB",
				matches = {
					{ index = 0, match = "AB" },
					-- { index = 1, match = "AB" },
					-- { index = 2, match = "B" },
				}
			},
		},
	},
-- 	{
-- 		source = [==[\A.*?(a|bc)]==],
-- 		tests = {
-- 			{
-- 				input = "ba",
-- 				matches = {
-- 					{ index = 0, match = "ba" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[\A.*?(?:a|bc)++]==],
-- 		tests = {
-- 			{
-- 				input = "ba",
-- 				matches = {{ index = 0, match = "ba" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[\A.*?(a|bc)++]==],
-- 		tests = {
-- 			{
-- 				input = "ba",
-- 				matches = {
-- 					{ index = 0, match = "ba" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[\A.*?(?:a|bc|d)]==],
-- 		tests = {
-- 			{
-- 				input = "ba",
-- 				matches = {{ index = 0, match = "ba" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?:(b))++]==],
-- 		tests = {
-- 			{
-- 				input = "beetle",
-- 				matches = {
-- 					{ index = 0, match = "b" },
-- 					{ index = 1, match = "b" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?(?=(a(*ACCEPT)z))a)]==],
-- 		tests = {
-- 			{
-- 				input = "a",
-- 				matches = {
-- 					{ index = 0, match = "a" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(a)(?1)+ab]==],
-- 		tests = {
-- 			{
-- 				input = "aaaab",
-- 				matches = {
-- 					{ index = 0, match = "aaaab" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[^(a)(?1)++ab]==],
		tests = {
			{ input = "aaaab" },
		},
	},
-- 	{
-- 		source = [==[^(?=a(*:M))aZ]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "aZbc",
-- 				matches = {{ index = 0, match = "aZ" }},
-- 			},
-- 			{
-- 				input = "MK: M",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(?!(*:M)b)aZ]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "aZbc",
-- 				matches = {{ index = 0, match = "aZ" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?(DEFINE)(a))?b(?1)]==],
-- 		tests = {
-- 			{
-- 				input = "backgammon",
-- 				matches = {{ index = 0, match = "ba" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[^\N+]==],
		tests = {
			{
				input = "abc\ndef",
				matches = {{ index = 0, match = "abc" }},
			},
		},
	},
	{
		source = [==[^\N{1,}]==],
		tests = {
			{
				input = "abc\ndef",
				matches = {{ index = 0, match = "abc" }},
			},
		},
	},
-- 	{
-- 		source = [==[(?(R)a+|(?R)b)]==],
-- 		tests = {
-- 			{
-- 				input = "aaaabcde",
-- 				matches = {{ index = 0, match = "aaaab" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?(R)a+|((?R))b)]==],
-- 		tests = {
-- 			{
-- 				input = "aaaabcde",
-- 				matches = {
-- 					{ index = 0, match = "aaaab" },
-- 					{ index = 1, match = "aaaa" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?(R)a+|(?1)b))]==],
-- 		tests = {
-- 			{
-- 				input = "aaaabcde",
-- 				matches = {
-- 					{ index = 0, match = "aaaab" },
-- 					{ index = 1, match = "aaaab" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?(R1)a+|(?1)b))]==],
-- 		tests = {
-- 			{
-- 				input = "aaaabcde",
-- 				matches = {
-- 					{ index = 0, match = "aaaab" },
-- 					{ index = 1, match = "aaaab" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?(R)a|(?1)))*]==],
-- 		tests = {
-- 			{
-- 				input = "aaa",
-- 				matches = {
-- 					{ index = 0, match = "aaa" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?(R)a|(?1)))+]==],
-- 		tests = {
-- 			{
-- 				input = "aaa",
-- 				matches = {
-- 					{ index = 0, match = "aaa" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a(*:any
-- name)]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "abc",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 			{
-- 				input = "MK: any \010name",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))]==],
-- 		tests = {
-- 			{
-- 				input = "a",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 			{
-- 				input = "ba",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 			{
-- 				input = "bba",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^.*? (a(*THEN)b) c]==],
-- 		flags = "x",
-- 		tests = {
-- 			{ input = "aabc" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^.*? (a(*THEN)b|(*F)) c]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "aabc",
-- 				matches = {
-- 					{ index = 0, match = "aabc" },
-- 					{ index = 1, match = "ab" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^.*? ( (a(*THEN)b) | (*F) ) c]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "aabc",
-- 				matches = {
-- 					{ index = 0, match = "aabc" },
-- 					{ index = 1, match = "ab" },
-- 					{ index = 2, match = "ab" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^.*? ( (a(*THEN)b) ) c]==],
-- 		flags = "x",
-- 		tests = {
-- 			{ input = "aabc" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^.*? (?:a(*THEN)b) c]==],
-- 		flags = "x",
-- 		tests = {
-- 			{ input = "aabc" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^.*? (?:a(*THEN)b|(*F)) c]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "aabc",
-- 				matches = {{ index = 0, match = "aabc" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^.*? (?: (?:a(*THEN)b) | (*F) ) c]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "aabc",
-- 				matches = {{ index = 0, match = "aabc" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^.*? (?: (?:a(*THEN)b) ) c]==],
-- 		flags = "x",
-- 		tests = {
-- 			{ input = "aabc" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^.*? (?>a(*THEN)b) c]==],
-- 		flags = "x",
-- 		tests = {
-- 			{ input = "aabc" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^.*? (?>a(*THEN)b|(*F)) c]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "aabc",
-- 				matches = {{ index = 0, match = "aabc" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^.*? (?> (?>a(*THEN)b) | (*F) ) c]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "aabc",
-- 				matches = {{ index = 0, match = "aabc" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^.*? (?> (?>a(*THEN)b) ) c]==],
-- 		flags = "x",
-- 		tests = {
-- 			{ input = "aabc" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^.*? (a(*THEN)b)++ c]==],
-- 		flags = "x",
-- 		tests = {
-- 			{ input = "aabc" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^.*? (a(*THEN)b|(*F))++ c]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "aabc",
-- 				matches = {
-- 					{ index = 0, match = "aabc" },
-- 					{ index = 1, match = "ab" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^.*? ( (a(*THEN)b)++ | (*F) )++ c]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "aabc",
-- 				matches = {
-- 					{ index = 0, match = "aabc" },
-- 					{ index = 1, match = "ab" },
-- 					{ index = 2, match = "ab" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^.*? ( (a(*THEN)b)++ )++ c]==],
-- 		flags = "x",
-- 		tests = {
-- 			{ input = "aabc" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^.*? (?:a(*THEN)b)++ c]==],
-- 		flags = "x",
-- 		tests = {
-- 			{ input = "aabc" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^.*? (?:a(*THEN)b|(*F))++ c]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "aabc",
-- 				matches = {{ index = 0, match = "aabc" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "aabc",
-- 				matches = {{ index = 0, match = "aabc" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^.*? (?: (?:a(*THEN)b)++ )++ c]==],
-- 		flags = "x",
-- 		tests = {
-- 			{ input = "aabc" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(?(?=a(*THEN)b)ab|ac)]==],
-- 		tests = {
-- 			{
-- 				input = "ac",
-- 				matches = {{ index = 0, match = "ac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^.*?(?(?=a)a|b(*THEN)c)]==],
-- 		tests = {
-- 			{ input = "ba" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^.*?(?:(?(?=a)a|b(*THEN)c)|d)]==],
-- 		tests = {
-- 			{
-- 				input = "ba",
-- 				matches = {{ index = 0, match = "ba" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^.*?(?(?=a)a(*THEN)b|c)]==],
-- 		tests = {
-- 			{ input = "ac" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^.*(?=a(*THEN)b)]==],
-- 		tests = {
-- 			{
-- 				input = "aabc",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?>a(*:m))]==],
-- 		flags = "imsx,mark",
-- 		tests = {
-- 			{
-- 				input = "a",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 			{
-- 				input = "MK: m",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?>(a)(*:m))]==],
-- 		flags = "imsx,mark",
-- 		tests = {
-- 			{
-- 				input = "a",
-- 				matches = {
-- 					{ index = 0, match = "a" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 			{
-- 				input = "MK: m",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?<=a(*ACCEPT)b)c]==],
-- 		tests = {
-- 			{
-- 				input = "xacd",
-- 				matches = {{ index = 0, match = "c" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?<=(a(*ACCEPT)b))c]==],
-- 		tests = {
-- 			{
-- 				input = "xacd",
-- 				matches = {
-- 					{ index = 0, match = "c" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?<=(a(*COMMIT)b))c]==],
-- 		tests = {
-- 			{
-- 				input = "xabcd",
-- 				matches = {
-- 					{ index = 0, match = "c" },
-- 					{ index = 1, match = "ab" },
-- 				}
-- 			},
-- 			{ input = "** Failers" },
-- 			{ input = "xacd" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?<!a(*FAIL)b)c]==],
-- 		tests = {
-- 			{
-- 				input = "xcd",
-- 				matches = {{ index = 0, match = "c" }},
-- 			},
-- 			{
-- 				input = "acd",
-- 				matches = {{ index = 0, match = "c" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?<=a(*:N)b)c]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "xabcd",
-- 				matches = {{ index = 0, match = "c" }},
-- 			},
-- 			{
-- 				input = "MK: N",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?<=a(*PRUNE)b)c]==],
-- 		tests = {
-- 			{
-- 				input = "xabcd",
-- 				matches = {{ index = 0, match = "c" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?<=a(*SKIP)b)c]==],
-- 		tests = {
-- 			{
-- 				input = "xabcd",
-- 				matches = {{ index = 0, match = "c" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?<=a(*THEN)b)c]==],
-- 		tests = {
-- 			{
-- 				input = "xabcd",
-- 				matches = {{ index = 0, match = "c" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(a)(?2){2}(.)]==],
-- 		tests = {
-- 			{
-- 				input = "abcd",
-- 				matches = {
-- 					{ index = 0, match = "abcd" },
-- 					{ index = 1, match = "a" },
-- 					{ index = 2, match = "d" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(*MARK:A)(*PRUNE:B)(C|X)]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "C",
-- 				matches = {
-- 					{ index = 0, match = "C" },
-- 					{ index = 1, match = "C" },
-- 				}
-- 			},
-- 			{
-- 				input = "MK: B",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "D",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = B",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(*MARK:A)(*PRUNE:B)(C|X)]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "C",
-- 				matches = {
-- 					{ index = 0, match = "C" },
-- 					{ index = 1, match = "C" },
-- 				}
-- 			},
-- 			{
-- 				input = "MK: B",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "D",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = B",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(*MARK:A)(*THEN:B)(C|X)]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "C",
-- 				matches = {
-- 					{ index = 0, match = "C" },
-- 					{ index = 1, match = "C" },
-- 				}
-- 			},
-- 			{
-- 				input = "MK: B",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "D",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = B",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(*MARK:A)(*THEN:B)(C|X)]==],
-- 		flags = "mark,no_start_optimize",
-- 		tests = {
-- 			{
-- 				input = "C",
-- 				matches = {
-- 					{ index = 0, match = "C" },
-- 					{ index = 1, match = "C" },
-- 				}
-- 			},
-- 			{
-- 				input = "MK: B",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "D",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = B",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(*MARK:A)(*THEN:B)(C|X)]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "C",
-- 				matches = {
-- 					{ index = 0, match = "C" },
-- 					{ index = 1, match = "C" },
-- 				}
-- 			},
-- 			{
-- 				input = "MK: B",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "D",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = B",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[A(*MARK:A)A+(*SKIP)(B|Z) | AC]==],
-- 		flags = "x,mark",
-- 		tests = {
-- 			{
-- 				input = "AAAC",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = A",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC]==],
-- 		flags = "x,mark",
-- 		tests = {
-- 			{
-- 				input = "AAAC",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = B",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[A(*:A)A+(*SKIP)(B|Z) | AC]==],
-- 		flags = "x,mark",
-- 		tests = {
-- 			{
-- 				input = "AAAC",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = A",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[A(*MARK:A)A+(*SKIP:)(B|Z) | AC]==],
-- 		flags = "x,mark",
-- 		tests = {
-- 			{
-- 				input = "AAAC",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = A",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[A(*:A)B|XX(*:B)Y]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "AABC",
-- 				matches = {{ index = 0, match = "AB" }},
-- 			},
-- 			{
-- 				input = "MK: A",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "XXYZ",
-- 				matches = {{ index = 0, match = "XXY" }},
-- 			},
-- 			{
-- 				input = "MK: B",
-- 				matches = {
-- 				}
-- 			},
-- 			{ input = "** Failers" },
-- 			{
-- 				input = "XAQQ",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = A",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "XAQQXZZ",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = A",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "AXQQQ",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = A",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "AXXQQQ",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = B",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(A(*THEN:A)B|C(*THEN:B)D)]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "AB",
-- 				matches = {
-- 					{ index = 0, match = "AB" },
-- 					{ index = 1, match = "AB" },
-- 				}
-- 			},
-- 			{
-- 				input = "MK: A",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "CD",
-- 				matches = {
-- 					{ index = 0, match = "CD" },
-- 					{ index = 1, match = "CD" },
-- 				}
-- 			},
-- 			{
-- 				input = "MK: B",
-- 				matches = {
-- 				}
-- 			},
-- 			{ input = "** Failers" },
-- 			{
-- 				input = "AC",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = A",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "CB",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = B",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(A(*PRUNE:A)B|C(*PRUNE:B)D)]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "AB",
-- 				matches = {
-- 					{ index = 0, match = "AB" },
-- 					{ index = 1, match = "AB" },
-- 				}
-- 			},
-- 			{
-- 				input = "MK: A",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "CD",
-- 				matches = {
-- 					{ index = 0, match = "CD" },
-- 					{ index = 1, match = "CD" },
-- 				}
-- 			},
-- 			{
-- 				input = "MK: B",
-- 				matches = {
-- 				}
-- 			},
-- 			{ input = "** Failers" },
-- 			{
-- 				input = "AC",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = A",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "CB",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = B",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(A(*PRUNE:)B|C(*PRUNE:B)D)]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "AB",
-- 				matches = {
-- 					{ index = 0, match = "AB" },
-- 					{ index = 1, match = "AB" },
-- 				}
-- 			},
-- 			{
-- 				input = "CD",
-- 				matches = {
-- 					{ index = 0, match = "CD" },
-- 					{ index = 1, match = "CD" },
-- 				}
-- 			},
-- 			{
-- 				input = "MK: B",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[A(*PRUNE:A)B]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "ACAB",
-- 				matches = {{ index = 0, match = "AB" }},
-- 			},
-- 			{
-- 				input = "MK: A",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[A(*:A)B|X(*:A)Y]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "AABC",
-- 				matches = {{ index = 0, match = "AB" }},
-- 			},
-- 			{
-- 				input = "MK: A",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "XXYZ",
-- 				matches = {{ index = 0, match = "XY" }},
-- 			},
-- 			{
-- 				input = "MK: A",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[b(*:m)f|a(*:n)w]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "aw",
-- 				matches = {{ index = 0, match = "aw" }},
-- 			},
-- 			{
-- 				input = "MK: n",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "** Failers",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = n",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "abc",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = m",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[b(*:m)f|aw]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "abaw",
-- 				matches = {{ index = 0, match = "aw" }},
-- 			},
-- 			{ input = "** Failers" },
-- 			{
-- 				input = "abc",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = m",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "abax",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = m",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC]==],
-- 		flags = "x,mark",
-- 		tests = {
-- 			{
-- 				input = "AAAC",
-- 				matches = {{ index = 0, match = "AAC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a(*PRUNE:X)bc|qq]==],
-- 		flags = "mark,no_start_optimize",
-- 		tests = {
-- 			{
-- 				input = "** Failers",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = X",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "axy",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = X",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a(*THEN:X)bc|qq]==],
-- 		flags = "mark,no_start_optimize",
-- 		tests = {
-- 			{
-- 				input = "** Failers",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = X",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "axy",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = X",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?=a(*MARK:A)b)..x]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "abxy",
-- 				matches = {{ index = 0, match = "abx" }},
-- 			},
-- 			{
-- 				input = "MK: A",
-- 				matches = {
-- 				}
-- 			},
-- 			{ input = "** Failers" },
-- 			{ input = "abpq" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?=a(*MARK:A)b)..(*:Y)x]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "abxy",
-- 				matches = {{ index = 0, match = "abx" }},
-- 			},
-- 			{
-- 				input = "MK: Y",
-- 				matches = {
-- 				}
-- 			},
-- 			{ input = "** Failers" },
-- 			{ input = "abpq" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?=a(*PRUNE:A)b)..x]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "abxy",
-- 				matches = {{ index = 0, match = "abx" }},
-- 			},
-- 			{
-- 				input = "MK: A",
-- 				matches = {
-- 				}
-- 			},
-- 			{ input = "** Failers" },
-- 			{ input = "abpq" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?=a(*PRUNE:A)b)..(*:Y)x]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "abxy",
-- 				matches = {{ index = 0, match = "abx" }},
-- 			},
-- 			{
-- 				input = "MK: Y",
-- 				matches = {
-- 				}
-- 			},
-- 			{ input = "** Failers" },
-- 			{ input = "abpq" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?=a(*THEN:A)b)..x]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "abxy",
-- 				matches = {{ index = 0, match = "abx" }},
-- 			},
-- 			{
-- 				input = "MK: A",
-- 				matches = {
-- 				}
-- 			},
-- 			{ input = "** Failers" },
-- 			{ input = "abpq" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?=a(*THEN:A)b)..(*:Y)x]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "abxy",
-- 				matches = {{ index = 0, match = "abx" }},
-- 			},
-- 			{
-- 				input = "MK: Y",
-- 				matches = {
-- 				}
-- 			},
-- 			{ input = "** Failers" },
-- 			{ input = "abpq" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(another)?(\1?)test]==],
-- 		tests = {
-- 			{
-- 				input = "hello world test",
-- 				matches = {
-- 					{ index = 0, match = "test" },
-- 					{ index = 1, match = "<unset>" },
-- 					{ index = 2, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[(another)?(\1+)test]==],
		tests = {
			{ input = "hello world test" },
		},
	},
-- 	{
-- 		source = [==[(a(*COMMIT)b){0}a(?1)|aac]==],
-- 		tests = {
-- 			{
-- 				input = "aac",
-- 				matches = {{ index = 0, match = "aac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?:a?)*)*c]==],
-- 		tests = {
-- 			{
-- 				input = "aac",
-- 				matches = {
-- 					{ index = 0, match = "aac" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?>a?)*)*c]==],
-- 		tests = {
-- 			{
-- 				input = "aac",
-- 				matches = {
-- 					{ index = 0, match = "aac" },
-- 					{ index = 1, match = "" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[(?>.*?a)(?<=ba)]==],
		tests = {
			{
				input = "aba",
				matches = {{ index = 0, match = "ba" }},
			},
		},
	},
	{
		source = [==[(?:.*?a)(?<=ba)]==],
		tests = {
			{
				input = "aba",
				matches = {{ index = 0, match = "aba" }},
			},
		},
	},
-- 	{
-- 		source = [==[.*?a(*PRUNE)b]==],
-- 		tests = {
-- 			{
-- 				input = "aab",
-- 				matches = {{ index = 0, match = "ab" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[.*?a(*PRUNE)b]==],
-- 		flags = "s",
-- 		tests = {
-- 			{
-- 				input = "aab",
-- 				matches = {{ index = 0, match = "ab" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^a(*PRUNE)b]==],
-- 		flags = "s",
-- 		tests = {
-- 			{ input = "aab" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[.*?a(*SKIP)b]==],
-- 		tests = {
-- 			{
-- 				input = "aab",
-- 				matches = {{ index = 0, match = "ab" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[(?>.*?a)b]==],
		flags = "s",
		tests = {
			{
				input = "aab",
				matches = {{ index = 0, match = "ab" }},
			},
		},
	},
	{
		source = [==[(?>.*?a)b]==],
		tests = {
			{
				input = "aab",
				matches = {{ index = 0, match = "ab" }},
			},
		},
	},
	{
		source = [==[(?>^a)b]==],
		flags = "s",
		tests = {
			{ input = "aab" },
		},
	},
-- 	{
-- 		source = [==[(?>.*?)(?<=(abcd)|(wxyz))]==],
-- 		tests = {
-- 			{
-- 				input = "alphabetabcd",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "abcd" },
-- 				}
-- 			},
-- 			{
-- 				input = "endingwxyz",
-- 				matches = {
-- 					{ index = 0, match = "" },
-- 					{ index = 1, match = "<unset>" },
-- 					{ index = 2, match = "wxyz" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?>.*)(?<=(abcd)|(wxyz))]==],
-- 		tests = {
-- 			{
-- 				input = "alphabetabcd",
-- 				matches = {
-- 					{ index = 0, match = "alphabetabcd" },
-- 					{ index = 1, match = "abcd" },
-- 				}
-- 			},
-- 			{
-- 				input = "endingwxyz",
-- 				matches = {
-- 					{ index = 0, match = "endingwxyz" },
-- 					{ index = 1, match = "<unset>" },
-- 					{ index = 2, match = "wxyz" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?:(a(*PRUNE)b)){0}(?:(?1)|ac)]==],
-- 		tests = {
-- 			{
-- 				input = "ac",
-- 				matches = {{ index = 0, match = "ac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?:(a(*SKIP)b)){0}(?:(?1)|ac)]==],
-- 		tests = {
-- 			{
-- 				input = "ac",
-- 				matches = {{ index = 0, match = "ac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?<=(*SKIP)ac)a]==],
-- 		tests = {
-- 			{ input = "aa" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[A(*MARK:A)A+(*SKIP:B)(B|Z) | AC]==],
-- 		flags = "x,mark",
-- 		tests = {
-- 			{
-- 				input = "AAAC",
-- 				matches = {{ index = 0, match = "AC" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a(*SKIP:m)x|ac(*:n)(*SKIP:n)d|ac]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "acacd",
-- 				matches = {{ index = 0, match = "acd" }},
-- 			},
-- 			{
-- 				input = "MK: n",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[A(*SKIP:m)x|A(*SKIP:n)x|AB]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "AB",
-- 				matches = {{ index = 0, match = "AB" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[((*SKIP:r)d){0}a(*SKIP:m)x|ac(*:n)|ac]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "acacd",
-- 				matches = {{ index = 0, match = "ac" }},
-- 			},
-- 			{
-- 				input = "MK: n",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[aaaaa(*PRUNE)b|a+c]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaaac",
-- 				matches = {{ index = 0, match = "aaaac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[aaaaa(*SKIP)(*PRUNE)b|a+c]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaaac",
-- 				matches = {{ index = 0, match = "aaaac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[aaaaa(*SKIP:N)(*PRUNE)b|a+c]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaaac",
-- 				matches = {{ index = 0, match = "aaaac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[aaaa(*:N)a(*SKIP:N)(*PRUNE)b|a+c]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaaac",
-- 				matches = {{ index = 0, match = "aaaac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[aaaaa(*THEN)(*PRUNE)b|a+c]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaaac",
-- 				matches = {{ index = 0, match = "aaaac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[aaaaa(*SKIP)b|a+c]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaaac",
-- 				matches = {{ index = 0, match = "ac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[aaaaa(*PRUNE)(*SKIP)b|a+c]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaaac",
-- 				matches = {{ index = 0, match = "ac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[aaaaa(*THEN)(*SKIP)b|a+c]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaaac",
-- 				matches = {{ index = 0, match = "ac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[aaaaa(*COMMIT)(*SKIP)b|a+c]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaaac",
-- 				matches = {{ index = 0, match = "ac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[aaaaa(*COMMIT)b|a+c]==],
-- 		tests = {
-- 			{ input = "aaaaaac" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[aaaaa(*THEN)b|a+c]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaaac",
-- 				matches = {{ index = 0, match = "aaaaaac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[aaaaa(*SKIP)(*THEN)b|a+c]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaaac",
-- 				matches = {{ index = 0, match = "aaaaaac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[aaaaa(*PRUNE)(*THEN)b|a+c]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaaac",
-- 				matches = {{ index = 0, match = "aaaaaac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[aaaaa(*COMMIT)(*THEN)b|a+c]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaaac",
-- 				matches = {{ index = 0, match = "aaaaaac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[aaaaa(*:m)(*PRUNE:m)(*SKIP:m)m|a+]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaaa",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[aaaaa(*:m)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaaa",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[aaaaa(*:n)(*PRUNE:m)(*SKIP:m)m|a+]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaaa",
-- 				matches = {{ index = 0, match = "aaaa" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[aaaaa(*:n)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+]==],
-- 		tests = {
-- 			{
-- 				input = "aaaaaa",
-- 				matches = {{ index = 0, match = "a" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a(*MARK:A)aa(*PRUNE:A)a(*SKIP:A)b|a+c]==],
-- 		tests = {
-- 			{
-- 				input = "aaaac",
-- 				matches = {{ index = 0, match = "aac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a(*MARK:A)aa(*MARK:A)a(*SKIP:A)b|a+c]==],
-- 		tests = {
-- 			{
-- 				input = "aaaac",
-- 				matches = {{ index = 0, match = "ac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[aaa(*PRUNE:A)a(*SKIP:A)b|a+c]==],
-- 		tests = {
-- 			{
-- 				input = "aaaac",
-- 				matches = {{ index = 0, match = "aac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[aaa(*MARK:A)a(*SKIP:A)b|a+c]==],
-- 		tests = {
-- 			{
-- 				input = "aaaac",
-- 				matches = {{ index = 0, match = "ac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a(*:m)a(*COMMIT)(*SKIP:m)b|a+c]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "aaaaaac",
-- 				matches = {{ index = 0, match = "ac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[.?(a|b(*THEN)c)]==],
-- 		tests = {
-- 			{
-- 				input = "ba",
-- 				matches = {
-- 					{ index = 0, match = "ba" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(a(*COMMIT)b)c|abd]==],
-- 		tests = {
-- 			{
-- 				input = "abc",
-- 				matches = {
-- 					{ index = 0, match = "abc" },
-- 					{ index = 1, match = "ab" },
-- 				}
-- 			},
-- 			{ input = "abd" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?=a(*COMMIT)b)abc|abd]==],
-- 		tests = {
-- 			{
-- 				input = "abc",
-- 				matches = {{ index = 0, match = "abc" }},
-- 			},
-- 			{
-- 				input = "abd",
-- 				matches = {{ index = 0, match = "abd" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?>a(*COMMIT)b)c|abd]==],
-- 		tests = {
-- 			{
-- 				input = "abc",
-- 				matches = {{ index = 0, match = "abc" }},
-- 			},
-- 			{
-- 				input = "abd",
-- 				matches = {{ index = 0, match = "abd" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[a(?=b(*COMMIT)c)[^d]|abd]==],
-- 		tests = {
-- 			{ input = "abd" },
-- 			{
-- 				input = "abc",
-- 				matches = {{ index = 0, match = "ab" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[a(?=bc).|abd]==],
		tests = {
			{
				input = "abd",
				matches = {{ index = 0, match = "abd" }},
			},
			{
				input = "abc",
				matches = {{ index = 0, match = "ab" }},
			},
		},
	},
-- 	{
-- 		source = [==[a(?>b(*COMMIT)c)d|abd]==],
-- 		tests = {
-- 			{ input = "abceabd" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[a(?>bc)d|abd]==],
-- 		tests = {
-- 			{
-- 				input = "abceabd",
-- 				matches = {{ index = 0, match = "abd" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?>a(*COMMIT)b)c|abd]==],
-- 		tests = {
-- 			{
-- 				input = "abd",
-- 				matches = {{ index = 0, match = "abd" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?>a(*COMMIT)c)d|abd]==],
-- 		tests = {
-- 			{ input = "abd" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[((?=a(*COMMIT)b)ab|ac){0}(?:(?1)|a(c))]==],
-- 		tests = {
-- 			{
-- 				input = "ac",
-- 				matches = {
-- 					{ index = 0, match = "ac" },
-- 					{ index = 1, match = "<unset>" },
-- 					{ index = 2, match = "c" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(a)?(?(1)a|b)+$]==],
-- 		tests = {
-- 			{ input = "*** Failers" },
-- 			{ input = "a" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?=a\Kb)ab]==],
-- 		tests = {
-- 			{
-- 				input = "ab",
-- 				matches = {{ index = 0, match = "b" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[(?!a\Kb)ac]==],
		tests = {
			{
				input = "ac",
				matches = {{ index = 0, match = "ac" }},
			},
		},
	},
-- 	{
-- 		source = [==[^abc(?<=b\Kc)d]==],
-- 		tests = {
-- 			{
-- 				input = "abcd",
-- 				matches = {{ index = 0, match = "cd" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[^abc(?<!b\Kq)d]==],
		tests = {
			{
				input = "abcd",
				matches = {{ index = 0, match = "abcd" }},
			},
		},
	},
-- 	{
-- 		source = [==[A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC]==],
-- 		flags = "x,mark",
-- 		tests = {
-- 			{
-- 				input = "AAAC",
-- 				matches = {
-- 				}
-- 			},
-- 			{
-- 				input = "No match, mark = A",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^((abc|abcx)(*THEN)y|abcd)]==],
-- 		tests = {
-- 			{
-- 				input = "abcd",
-- 				matches = {
-- 					{ index = 0, match = "abcd" },
-- 					{ index = 1, match = "abcd" },
-- 				}
-- 			},
-- 			{ input = "*** Failers" },
-- 			{ input = "abcxy" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[^((yes|no)(*THEN)(*F))?]==],
-- 		tests = {
-- 			{ input = "yes" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(A (.*)   C? (*THEN)  | A D) (*FAIL)]==],
-- 		flags = "x",
-- 		tests = {
-- 			{ input = "AbcdCBefgBhiBqz" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(A (.*)   C? (*THEN)  | A D) z]==],
-- 		flags = "x",
-- 		tests = {
-- 			{ input = "AbcdCBefgBhiBqz" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(A (.*)   C? (*THEN)  | A D) \s* (*FAIL)]==],
-- 		flags = "x",
-- 		tests = {
-- 			{ input = "AbcdCBefgBhiBqz" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(A (.*)   C? (*THEN)  | A D) \s* z]==],
-- 		flags = "x",
-- 		tests = {
-- 			{ input = "AbcdCBefgBhiBqz" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(A (.*)   (?:C|) (*THEN)  | A D) (*FAIL)]==],
-- 		flags = "x",
-- 		tests = {
-- 			{ input = "AbcdCBefgBhiBqz" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(A (.*)   (?:C|) (*THEN)  | A D) z]==],
-- 		flags = "x",
-- 		tests = {
-- 			{ input = "AbcdCBefgBhiBqz" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(A (.*)   C{0,6} (*THEN)  | A D) (*FAIL)]==],
-- 		flags = "x",
-- 		tests = {
-- 			{ input = "AbcdCBefgBhiBqz" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(A (.*)   C{0,6} (*THEN)  | A D) z]==],
-- 		flags = "x",
-- 		tests = {
-- 			{ input = "AbcdCBefgBhiBqz" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(A (.*)   (CE){0,6} (*THEN)  | A D) (*FAIL)]==],
-- 		flags = "x",
-- 		tests = {
-- 			{ input = "AbcdCEBefgBhiBqz" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(A (.*)   (CE){0,6} (*THEN)  | A D) z]==],
-- 		flags = "x",
-- 		tests = {
-- 			{ input = "AbcdCEBefgBhiBqz" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(A (.*)   (CE*){0,6} (*THEN)  | A D) (*FAIL)]==],
-- 		flags = "x",
-- 		tests = {
-- 			{ input = "AbcdCBefgBhiBqz" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(A (.*)   (CE*){0,6} (*THEN)  | A D) z]==],
-- 		flags = "x",
-- 		tests = {
-- 			{ input = "AbcdCBefgBhiBqz" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?=a(*COMMIT)b|ac)ac|ac]==],
-- 		tests = {
-- 			{ input = "ac" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?=a(*COMMIT)b|(ac)) ac | (a)c]==],
-- 		flags = "x",
-- 		tests = {
-- 			{ input = "ac" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?(?!b(*THEN)a)bn|bnn)]==],
-- 		tests = {
-- 			{
-- 				input = "bnn",
-- 				matches = {{ index = 0, match = "bn" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?!b(*SKIP)a)bn|bnn]==],
-- 		tests = {
-- 			{
-- 				input = "bnn",
-- 				matches = {{ index = 0, match = "bn" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?(?!b(*SKIP)a)bn|bnn)]==],
-- 		tests = {
-- 			{
-- 				input = "bnn",
-- 				matches = {{ index = 0, match = "bn" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?!b(*PRUNE)a)bn|bnn]==],
-- 		tests = {
-- 			{
-- 				input = "bnn",
-- 				matches = {{ index = 0, match = "bn" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?(?!b(*PRUNE)a)bn|bnn)]==],
-- 		tests = {
-- 			{
-- 				input = "bnn",
-- 				matches = {{ index = 0, match = "bn" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?!b(*COMMIT)a)bn|bnn]==],
-- 		tests = {
-- 			{
-- 				input = "bnn",
-- 				matches = {{ index = 0, match = "bn" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?(?!b(*COMMIT)a)bn|bnn)]==],
-- 		tests = {
-- 			{
-- 				input = "bnn",
-- 				matches = {{ index = 0, match = "bn" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?=b(*SKIP)a)bn|bnn]==],
-- 		tests = {
-- 			{ input = "bnn" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?=b(*THEN)a)bn|bnn]==],
-- 		tests = {
-- 			{
-- 				input = "bnn",
-- 				matches = {{ index = 0, match = "bnn" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(?!a(*SKIP)b)]==],
-- 		tests = {
-- 			{
-- 				input = "ac",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(?!a(*SKIP)b)..]==],
-- 		tests = {
-- 			{
-- 				input = "acd",
-- 				matches = {{ index = 0, match = "ac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?!a(*SKIP)b)..]==],
-- 		tests = {
-- 			{
-- 				input = "acd",
-- 				matches = {{ index = 0, match = "ac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(?(?!a(*SKIP)b))]==],
-- 		tests = {
-- 			{
-- 				input = "ac",
-- 				matches = {{ index = 0, match = "" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(?!a(*PRUNE)b)..]==],
-- 		tests = {
-- 			{
-- 				input = "acd",
-- 				matches = {{ index = 0, match = "ac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?!a(*PRUNE)b)..]==],
-- 		tests = {
-- 			{
-- 				input = "acd",
-- 				matches = {{ index = 0, match = "ac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?!a(*COMMIT)b)ac|cd]==],
-- 		tests = {
-- 			{
-- 				input = "ac",
-- 				matches = {{ index = 0, match = "ac" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[\A.*?(?:a|bc)]==],
-- 		tests = {
-- 			{
-- 				input = "ba",
-- 				matches = {{ index = 0, match = "ba" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[^(A(*THEN)B|C(*THEN)D)]==],
-- 		tests = {
-- 			{
-- 				input = "CD",
-- 				matches = {
-- 					{ index = 0, match = "CD" },
-- 					{ index = 1, match = "CD" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(*:m(m)(?&y)(?(DEFINE)(?<y>b))]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "abc",
-- 				matches = {{ index = 0, match = "b" }},
-- 			},
-- 			{
-- 				input = "MK: m(m",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(*PRUNE:m(m)(?&y)(?(DEFINE)(?<y>b))]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "abc",
-- 				matches = {{ index = 0, match = "b" }},
-- 			},
-- 			{
-- 				input = "MK: m(m",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(*SKIP:m(m)(?&y)(?(DEFINE)(?<y>b))]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "abc",
-- 				matches = {{ index = 0, match = "b" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(*THEN:m(m)(?&y)(?(DEFINE)(?<y>b))]==],
-- 		flags = "mark",
-- 		tests = {
-- 			{
-- 				input = "abc",
-- 				matches = {{ index = 0, match = "b" }},
-- 			},
-- 			{
-- 				input = "MK: m(m",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[^\d*\w{4}]==],
		tests = {
			{
				input = "1234",
				matches = {{ index = 0, match = "1234" }},
			},
			{ input = "123" },
		},
	},
	{
		source = [==[^[^b]*\w{4}]==],
		tests = {
			{
				input = "aaaa",
				matches = {{ index = 0, match = "aaaa" }},
			},
			{ input = "aaa" },
		},
	},
	{
		source = [==[^[^b]*\w{4}]==],
		flags = "i",
		tests = {
			{
				input = "aaaa",
				matches = {{ index = 0, match = "aaaa" }},
			},
			{ input = "aaa" },
		},
	},
	{
		source = [==[^a*\w{4}]==],
		tests = {
			{
				input = "aaaa",
				matches = {{ index = 0, match = "aaaa" }},
			},
			{ input = "aaa" },
		},
	},
	{
		source = [==[^a*\w{4}]==],
		flags = "i",
		tests = {
			{
				input = "aaaa",
				matches = {{ index = 0, match = "aaaa" }},
			},
			{ input = "aaa" },
		},
	},
-- 	{
-- 		source = [==[(?:(?<n>foo)|(?<n>bar))\k<n>]==],
-- 		flags = "dupnames",
-- 		tests = {
-- 			{
-- 				input = "foofoo",
-- 				matches = {
-- 					{ index = 0, match = "foofoo" },
-- 					{ index = 1, match = "foo" },
-- 				}
-- 			},
-- 			{
-- 				input = "barbar",
-- 				matches = {
-- 					{ index = 0, match = "barbar" },
-- 					{ index = 1, match = "<unset>" },
-- 					{ index = 2, match = "bar" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?<n>A)(?:(?<n>foo)|(?<n>bar))\k<n>]==],
-- 		flags = "dupnames",
-- 		tests = {
-- 			{
-- 				input = "AfooA",
-- 				matches = {
-- 					{ index = 0, match = "AfooA" },
-- 					{ index = 1, match = "A" },
-- 					{ index = 2, match = "foo" },
-- 				}
-- 			},
-- 			{
-- 				input = "AbarA",
-- 				matches = {
-- 					{ index = 0, match = "AbarA" },
-- 					{ index = 1, match = "A" },
-- 					{ index = 2, match = "<unset>" },
-- 					{ index = 3, match = "bar" },
-- 				}
-- 			},
-- 			{ input = "** Failers" },
-- 			{ input = "Afoofoo" },
-- 			{ input = "Abarbar" },
-- 		},
-- 	},
	{
		source = [==[^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$]==],
		tests = {
			{
				input = "1 IN SOA non-sp1 non-sp2(",
				matches = {
					{ index = 0, match = "1 IN SOA non-sp1 non-sp2(" },
					{ index = 1, match = "1" },
					{ index = 2, match = "non-sp1" },
					{ index = 3, match = "non-sp2" },
				}
			},
		},
	},
-- 	{
-- 		source = [==[^ (?:(?<A>A)|(?'B'B)(?<A>A)) (?('A')x) (?(<B>)y)$]==],
-- 		flags = "x,dupnames",
-- 		tests = {
-- 			{
-- 				input = "Ax",
-- 				matches = {
-- 					{ index = 0, match = "Ax" },
-- 					{ index = 1, match = "A" },
-- 				}
-- 			},
-- 			{
-- 				input = "BAxy",
-- 				matches = {
-- 					{ index = 0, match = "BAxy" },
-- 					{ index = 1, match = "<unset>" },
-- 					{ index = 2, match = "B" },
-- 					{ index = 3, match = "A" },
-- 				}
-- 			},
-- 		},
-- 	},
	{
		source = [==[^A\xZ]==],
		tests = {
			{
				input = "A\0Z",
				matches = {{ index = 0, match = "A\000Z" }},
			},
		},
	},
-- 	{
-- 		source = [==[^A\o{123}B]==],
-- 		tests = {
-- 			{
-- 				input = "A\123B",
-- 				matches = {{ index = 0, match = "ASB" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[ ^ a + + b $ ]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "aaaab",
-- 				matches = {{ index = 0, match = "aaaab" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[ ^ a + #comment
--   + b $ ]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "aaaab",
-- 				matches = {{ index = 0, match = "aaaab" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[ ^ a + #comment
--   #comment
--   + b $ ]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "aaaab",
-- 				matches = {{ index = 0, match = "aaaab" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[ ^ (?> a + ) b $ ]==],
		flags = "x",
		tests = {
			{
				input = "aaaab",
				matches = {{ index = 0, match = "aaaab" }},
			},
		},
	},
-- 	{
-- 		source = [==[ ^ ( a + ) + + \w $ ]==],
-- 		flags = "x",
-- 		tests = {
-- 			{
-- 				input = "aaaab",
-- 				matches = {
-- 					{ index = 0, match = "aaaab" },
-- 					{ index = 1, match = "aaaa" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?:a\Kb)*+]==],
-- 		flags = "aftertext",
-- 		tests = {
-- 			{
-- 				input = "ababc",
-- 				matches = {{ index = 0, match = "b" }},
-- 			},
-- 			{
-- 				input = "0+ c",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?>a\Kb)*]==],
-- 		flags = "aftertext",
-- 		tests = {
-- 			{
-- 				input = "ababc",
-- 				matches = {{ index = 0, match = "b" }},
-- 			},
-- 			{
-- 				input = "0+ c",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?:a\Kb)*]==],
-- 		flags = "aftertext",
-- 		tests = {
-- 			{
-- 				input = "ababc",
-- 				matches = {{ index = 0, match = "b" }},
-- 			},
-- 			{
-- 				input = "0+ c",
-- 				matches = {
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(a\Kb)*+]==],
-- 		flags = "aftertext",
-- 		tests = {
-- 			{
-- 				input = "ababc",
-- 				matches = {{ index = 0, match = "b" }},
-- 			},
-- 			{
-- 				input = "0+ c",
-- 				matches = {{ index = 1, match = "ab" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(a\Kb)*]==],
-- 		flags = "aftertext",
-- 		tests = {
-- 			{
-- 				input = "ababc",
-- 				matches = {{ index = 0, match = "b" }},
-- 			},
-- 			{
-- 				input = "0+ c",
-- 				matches = {{ index = 1, match = "ab" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[(?:x|(?:(xx|yy)+|x|x|x|x|x)|a|a|a)bc]==],
		tests = {
			{ input = "acb" },
		},
	},
	{
		source = [==[^\w+(?>\s*)(?<=\w)]==],
		tests = {
			{
				input = "test test",
				matches = {{ index = 0, match = "tes" }},
			},
		},
	},
-- 	{
-- 		source = [==[(?P<same>a)(?P<same>b)]==],
-- 		flags = "g,dupnames",
-- 		tests = {
-- 			{
-- 				input = "abbaba",
-- 				matches = {
-- 					{ index = 0, match = "ab" },
-- 					{ index = 1, match = "a" },
-- 					{ index = 2, match = "b" },
-- 					{ index = 0, match = "ab" },
-- 					{ index = 1, match = "a" },
-- 					{ index = 2, match = "b" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?P<same>a)(?P<same>b)(?P=same)]==],
-- 		flags = "g,dupnames",
-- 		tests = {
-- 			{
-- 				input = "abbaba",
-- 				matches = {
-- 					{ index = 0, match = "aba" },
-- 					{ index = 1, match = "a" },
-- 					{ index = 2, match = "b" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?P=same)?(?P<same>a)(?P<same>b)]==],
-- 		flags = "g,dupnames",
-- 		tests = {
-- 			{
-- 				input = "abbaba",
-- 				matches = {
-- 					{ index = 0, match = "ab" },
-- 					{ index = 1, match = "a" },
-- 					{ index = 2, match = "b" },
-- 					{ index = 0, match = "ab" },
-- 					{ index = 1, match = "a" },
-- 					{ index = 2, match = "b" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?:(?P=same)?(?:(?P<same>a)|(?P<same>b))(?P=same))+]==],
-- 		flags = "g,dupnames",
-- 		tests = {
-- 			{
-- 				input = "bbbaaabaabb",
-- 				matches = {
-- 					{ index = 0, match = "bbbaaaba" },
-- 					{ index = 1, match = "a" },
-- 					{ index = 2, match = "b" },
-- 					{ index = 0, match = "bb" },
-- 					{ index = 1, match = "<unset>" },
-- 					{ index = 2, match = "b" },
-- 				}
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?:(?P=same)?(?:(?P=same)(?P<same>a)(?P=same)|(?P=same)?(?P<same>b)(?P=same)){2}(?P=same)(?P<same>c)(?P=same)){2}(?P<same>z)?]==],
-- 		flags = "g,dupnames",
-- 		tests = {
-- 			{ input = "bbbaaaccccaaabbbcc" },
-- 		},
-- 	},
-- 	{
-- 		source = [==[(?P<Name>a)?(?P<Name2>b)?(?(<Name>)c|d)*l]==],
-- 		tests = {
-- 			{
-- 				input = "acl",
-- 				matches = {
-- 					{ index = 0, match = "acl" },
-- 					{ index = 1, match = "a" },
-- 				}
-- 			},
-- 			{
-- 				input = "bdl",
-- 				matches = {
-- 					{ index = 0, match = "bdl" },
-- 					{ index = 1, match = "<unset>" },
-- 					{ index = 2, match = "b" },
-- 				}
-- 			},
-- 			{
-- 				input = "adl",
-- 				matches = {{ index = 0, match = "dl" }},
-- 			},
-- 			{
-- 				input = "bcl",
-- 				matches = {{ index = 0, match = "l" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[\sabc]==],
-- 		tests = {
-- 			{
-- 				input = "\\x{0b}abc",
-- 				matches = {{ index = 0, match = "\011abc" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[[\Qa]\E]+]==],
-- 		tests = {
-- 			{
-- 				input = "aa]]",
-- 				matches = {{ index = 0, match = "aa]]" }},
-- 			},
-- 		},
-- 	},
-- 	{
-- 		source = [==[[\Q]a\E]+]==],
-- 		tests = {
-- 			{
-- 				input = "aa]]",
-- 				matches = {{ index = 0, match = "aa]]" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[A((((((((a))))))))\8B]==],
		tests = {
			{
				input = "AaaB",
				matches = {
					{ index = 0, match = "AaaB" },
					{ index = 1, match = "a" },
					{ index = 2, match = "a" },
					{ index = 3, match = "a" },
					{ index = 4, match = "a" },
					{ index = 5, match = "a" },
					{ index = 6, match = "a" },
					{ index = 7, match = "a" },
					{ index = 8, match = "a" },
				}
			},
		},
	},
	{
		source = [==[A(((((((((a)))))))))\9B]==],
		tests = {
			{
				input = "AaaB",
				matches = {
					{ index = 0, match = "AaaB" },
					{ index = 1, match = "a" },
					{ index = 2, match = "a" },
					{ index = 3, match = "a" },
					{ index = 4, match = "a" },
					{ index = 5, match = "a" },
					{ index = 6, match = "a" },
					{ index = 7, match = "a" },
					{ index = 8, match = "a" },
					{ index = 9, match = "a" },
				}
			},
		},
	},
	{
		source = [==[A[\8\9]B]==],
		tests = {
			{
				input = "A8B",
				matches = {{ index = 0, match = "A8B" }},
			},
			{
				input = "A9B",
				matches = {{ index = 0, match = "A9B" }},
			},
		},
	},
-- 	{
-- 		source = [==[(|ab)*?d]==],
-- 		tests = {
-- 			{
-- 				input = "abd",
-- 				matches = {
-- 					{ index = 0, match = "abd" },
-- 					{ index = 1, match = "ab" },
-- 				}
-- 			},
-- 			{
-- 				input = "xyd",
-- 				matches = {{ index = 0, match = "d" }},
-- 			},
-- 		},
-- 	},
	{
		source = [==[(?:((abcd))|(((?:(?:(?:(?:abc|(?:abcdef))))b)abcdefghi)abc)|((*ACCEPT)))]==],
		tests = {
			{
				input = "1234abcd",
				matches = {
					{ index = 0, match = "" },
					{ index = 1, match = "<unset>" },
					{ index = 2, match = "<unset>" },
					{ index = 3, match = "<unset>" },
					{ index = 4, match = "<unset>" },
					-- { index = 5, match = "" },
				}
			},
		},
	},
	{
		source = [==[(\2|a)(\1)]==],
		tests = {
			{
				input = "aaa",
				matches = {
					{ index = 0, match = "aa" },
					{ index = 1, match = "a" },
					{ index = 2, match = "a" },
				}
			},
		},
	},
}
