E (?<!bar)foo foo (0,3) E SAME catfood (3,6) E SAME arfootle (2,5) E SAME rfoosh (1,4) E SAME barfoo NOMATCH E SAME towbarfoo NOMATCH E$ \\w{3}(?<!bar)foo catfood (0,6) E$ SAME foo NOMATCH E$ SAME barfoo NOMATCH E$ SAME towbarfoo NOMATCH E (?<=(foo)a)bar fooabar (4,7)(0,3) E SAME bar NOMATCH E SAME foobbar NOMATCH E$n \\Aabc\\z abc (0,3) E$n SAME abc\n NOMATCH E$n SAME qqq\nabc NOMATCH E$n SAME abc\nzzz NOMATCH E$n SAME qqq\nabc\nzzz NOMATCH E (?>.*/)foo /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/ NOMATCH E (?>.*/)foo /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo (0,67) E$ (?>(\\.\\d\\d[1-9]?))\\d+ 1.230003938 (1,11)(1,4) E$ SAME 1.875000282 (1,11)(1,5) E$ SAME 1.235 NOMATCH E$ ^((?>\\w+)|(?>\\s+))*$ now is the time for all good men to come to the aid of the party (0,64)(59,64) E$ SAME this is not a line with only words and spaces! NOMATCH E$ (\\d+)(\\w) 12345a (0,6)(0,5)(5,6) E$ SAME 12345+ (0,5)(0,4)(4,5) E$ ((?>\\d+))(\\w) 12345a (0,6)(0,5)(5,6) E$ SAME 12345+ NOMATCH E (?>a+)b aaab (0,4) E ((?>a+)b) aaab (0,4)(0,4) E (?>(a+))b aaab (0,4)(0,3) E (?>b) aaabbbccc (3,4) E (?>b)* aaabbbccc (0,0) E (?>b)+ aaabbbccc (3,6) E (?>(b))+ aaabbbccc (3,6)(5,6) E ((?>b))+ aaabbbccc (3,6)(5,6) E ((?>(b)))+ aaabbbccc (3,6)(5,6)(5,6) E (?>b)+. aaabbbccc (3,7) E (?:b) aaabbbccc (3,4) E (?:b)* aaabbbccc (0,0) E (?:b)+ aaabbbccc (3,6) E (?:(b))+ aaabbbccc (3,6)(5,6) E ((?:b))+ aaabbbccc (3,6)(5,6) E ((?:(b)))+ aaabbbccc (3,6)(5,6)(5,6) E (?:b)+. aaabbbccc (3,7) E (a+|b+|c+)*c aaabbbbccccd (0,11)(7,10) E (?>a+|b+|c+)*c aaabbbbccccd (0,8) E$ ((?>[^()]+)|\\([^()]*\\))+ ((abc(ade)ufh()()x (2,18)(17,18) E$ \\(((?>[^()]+)|\\([^()]+\\))+\\) (abc) (0,5)(1,4) E$ SAME (abc(def)xyz) (0,13)(9,12) E$ SAME ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa NOMATCH Ei (?-i)ab ab (0,2) Ei SAME Ab NOMATCH Ei SAME aB NOMATCH Ei SAME AB NOMATCH E (?i)ab ab (0,2) E SAME Ab (0,2) E SAME aB (0,2) E SAME AB (0,2) Ei a(?-i)b ab (0,2) Ei SAME Ab (0,2) Ei SAME aB NOMATCH Ei SAME AB NOMATCH E a(?i)b ab (0,2) E SAME Ab NOMATCH E SAME aB (0,2) E SAME AB NOMATCH Ei (?-i)AB ab NOMATCH Ei SAME Ab NOMATCH Ei SAME aB NOMATCH Ei SAME AB (0,2) E (?i)AB ab (0,2) E SAME Ab (0,2) E SAME aB (0,2) E SAME AB (0,2) Ei A(?-i)B ab NOMATCH Ei SAME Ab NOMATCH Ei SAME aB (0,2) Ei SAME AB (0,2) E A(?i)B ab NOMATCH E SAME Ab (0,2) E SAME aB NOMATCH E SAME AB (0,2) Ei ^(?-i)ab ab (0,2) Ei SAME Ab NOMATCH Ei SAME aB NOMATCH Ei SAME AB NOMATCH E ^(?i)ab ab (0,2) E SAME Ab (0,2) E SAME aB (0,2) E SAME AB (0,2) Ei ^a(?-i)b ab (0,2) Ei SAME Ab (0,2) Ei SAME aB NOMATCH Ei SAME AB NOMATCH E ^a(?i)b ab (0,2) E SAME Ab NOMATCH E SAME aB (0,2) E SAME AB NOMATCH Ei ^(?-i)AB ab NOMATCH Ei SAME Ab NOMATCH Ei SAME aB NOMATCH Ei SAME AB (0,2) E ^(?i)AB ab (0,2) E SAME Ab (0,2) E SAME aB (0,2) E SAME AB (0,2) Ei ^A(?-i)B ab NOMATCH Ei SAME Ab NOMATCH Ei SAME aB (0,2) Ei SAME AB (0,2) E ^A(?i)B ab NOMATCH E SAME Ab (0,2) E SAME aB NOMATCH E SAME AB (0,2) E (a (?x)b c)d e a bcde NOMATCH E (a (?x)b c)d e a bcd e (0,7)(0,4) E SAME a b cd e NOMATCH E SAME abcd e NOMATCH E SAME a bcde NOMATCH E (a b(?x)c d (?-x)e f) a bcde f (0,8)(0,8) E SAME abcdef NOMATCH E (a(?i)b)c abc (0,3)(0,2) E SAME aBc (0,3)(0,2) E SAME abC NOMATCH E SAME aBC NOMATCH E SAME Abc NOMATCH E SAME ABc NOMATCH E SAME ABC NOMATCH E SAME AbC NOMATCH E a(?i:b)c abc (0,3) E SAME aBc (0,3) E SAME ABC NOMATCH E SAME abC NOMATCH E SAME aBC NOMATCH E a(?i:b)*c aBc (0,3) E SAME aBBc (0,4) E SAME aBC NOMATCH E SAME aBBC NOMATCH E$ a(?=b(?i)c)\\w\\wd abcd (0,4) E$ SAME abCd (0,4) E$ SAME aBCd NOMATCH E$ SAME abcD NOMATCH Ei (?s-i:more.*than).*million more than million (0,17) Ei SAME more than MILLION (0,17) Ei$ SAME more \n than Million (0,19) Ei$ SAME MORE THAN MILLION NOMATCH Ei$ SAME more \n than \n million (0,21) Ei (?:(?s-i)more.*than).*million more than million (0,17) Ei SAME more than MILLION (0,17) Ei$ SAME more \n than Million (0,19) Ei$ SAME MORE THAN MILLION NOMATCH Ei$ SAME more \n than \n million (0,21) E (?>a(?i)b+)+c abc (0,3) E SAME aBbc (0,4) E SAME aBBc (0,4) E SAME Abc NOMATCH E SAME abAb NOMATCH E SAME abbC NOMATCH E$ (?=a(?i)b)\\w\\wc abc (0,3) E$ SAME aBc (0,3) E$ SAME Ab NOMATCH E$ SAME abC NOMATCH E$ SAME aBC NOMATCH E$ (?<=a(?i)b)(\\w\\w)c abxxc (2,5)(2,4) E$ SAME aBxxc (2,5)(2,4) E$ SAME Abxxc NOMATCH E$ SAME ABxxc NOMATCH E$ SAME abxxC NOMATCH E (?:(a)|b)(?(1)A|B) aA (0,2)(0,1) E SAME bB (0,2) E SAME aB NOMATCH E SAME bA NOMATCH E (a)?(?(1)a|b) aa (0,2)(0,1) E (a)?(?(1)a|b)+ aa (0,2)(0,1) E ^(a)?(?(1)a|b)+$ aa (0,2)(0,1) E SAME b (0,1) E SAME bb (0,2) E SAME ab NOMATCH E$ \\w\\w\\w: abc: (0,4) E$ \\d\\d 12 (0,2) E$ (?(?=abc)\\w\\w\\w:|\\d\\d) abc: (0,4) E$ ^(?(?=abc)\\w\\w\\w:|\\d\\d)$ abc: (0,4) E$ ^(?(?=abc)\\w{3}:|\\d\\d)$ abc: (0,4) E$ SAME 12 (0,2) E$ SAME 123 NOMATCH E$ SAME xyz NOMATCH E$ ^(?(?!abc)\\d\\d|\\w{3}:)$ abc: (0,4) E$ ^(?(?!abc)\\d\\d|\\w\\w\\w:)$ abc: (0,4) E$ SAME 12 (0,2) E$ SAME 123 NOMATCH E$ SAME xyz NOMATCH E (?(?<=foo)bar|cat) foobar (3,6) E SAME cat (0,3) E SAME fcat (1,4) E SAME focat (2,5) E SAME foocat NOMATCH E (?(?<!foo)cat|bar) foobar (3,6) E SAME cat (0,3) E SAME fcat (1,4) E SAME focat (2,5) E SAME foocat NOMATCH E$cz ( \\( )? [^()]+ (?(1) \\) |) abcd (0,4) E$cz SAME (abcd) (0,6)(0,1) E$cz SAME the quick (abcd) fox (0,10) E$cz SAME (abcd (1,5) E$cz ( \\( )? [^()]+ (?(1) \\) ) abcd (0,4) E$cz SAME (abcd) (0,6)(0,1) E$cz SAME the quick (abcd) fox (0,10) E$cz SAME (abcd (1,5) E$ ((?i)blah)\\s+\\1 blah blah (0,9)(0,4) E$ SAME BLAH BLAH (0,9)(0,4) E$ SAME Blah Blah (0,9)(0,4) E$ SAME blaH blaH (0,9)(0,4) E$ SAME blah BLAH NOMATCH E$ SAME Blah blah NOMATCH E$ SAME blaH blah NOMATCH E$ ((?i)blah)\\s+(?i:\\1) blah blah (0,9)(0,4) E$ SAME BLAH BLAH (0,9)(0,4) E$ SAME Blah Blah (0,9)(0,4) E$ SAME blaH blaH (0,9)(0,4) E$ SAME blah BLAH (0,9)(0,4) E$ SAME Blah blah (0,9)(0,4) E$ SAME blaH blah (0,9)(0,4) E (?>a*)* a (0,1) E SAME aa (0,2) E SAME aaaa (0,4) Ez (abc|)+ abc (0,3)(0,3) Ez SAME abcabc (0,6)(3,6) Ez SAME abcabcabc (0,9)(6,9) Ez SAME xyz (0,0)(0,0) E ([a]*)* a (0,1)(0,1) E SAME aaaaa (0,5)(0,5) E ([ab]*)* a (0,1)(0,1) E SAME b (0,1)(0,1) E SAME ababab (0,6)(0,6) E SAME aaaabcde (0,5)(0,5) E SAME bbbb (0,4)(0,4) E ([^a]*)* b (0,1)(0,1) E SAME bbbb (0,4)(0,4) E SAME aaa (0,0)(0,0) E ([^ab]*)* cccc (0,4)(0,4) E SAME abab (0,0)(0,0) E ([a]*?)* a (0,0)(0,0) E SAME aaaa (0,0)(0,0) E ([ab]*?)* a (0,0)(0,0) E SAME b (0,0)(0,0) E SAME abab (0,0)(0,0) E SAME baba (0,0)(0,0) E ([^a]*?)* b (0,0)(0,0) E SAME bbbb (0,0)(0,0) E SAME aaa (0,0)(0,0) E ([^ab]*?)* c (0,0)(0,0) E SAME cccc (0,0)(0,0) E SAME baba (0,0)(0,0) E (?>a*)* a (0,1) E SAME aaabcde (0,3) E ((?>a*))* aaaaa (0,5)(0,5) E SAME aabbaa (0,2)(0,2) E ((?>a*)*) aaaaa (0,5)(0,5) E SAME aabbaa (0,2)(0,2) E ((?>a*?))* aaaaa (0,0)(0,0) E SAME aabbaa (0,0)(0,0) E ((?>a*?)*) aaaaa (0,0)(0,0) E SAME aabbaa (0,0)(0,0) E$c (?(?=[^a-z]+[a-z]) \\d{2}-[a-z]{3}-\\d{2} | \\d{2}-\\d{2}-\\d{2} ) 12-sep-98 (0,9) E$c SAME 12-09-98 (0,8) E$c SAME sep-12-98 NOMATCH E$ (?<=(foo))bar\\1 foobarfoo (3,9)(0,3) E$ SAME foobarfootling (3,9)(0,3) E$ SAME foobar NOMATCH E$ SAME barfoo NOMATCH E (?i:saturday|sunday) saturday (0,8) E SAME sunday (0,6) E SAME Saturday (0,8) E SAME Sunday (0,6) E SAME SATURDAY (0,8) E SAME SUNDAY (0,6) E SAME SunDay (0,6) E (a(?i)bc|BB)x abcx (0,4)(0,3) E SAME aBCx (0,4)(0,3) E SAME bbx (0,3)(0,2) E SAME BBx (0,3)(0,2) E SAME abcX NOMATCH E SAME aBCX NOMATCH E SAME bbX NOMATCH E SAME BBX NOMATCH E ^([ab](?i)[cd]|[ef]) ac (0,2)(0,2) E SAME aC (0,2)(0,2) E SAME bD (0,2)(0,2) E SAME elephant (0,1)(0,1) E SAME Europe (0,1)(0,1) E SAME frog (0,1)(0,1) E SAME France (0,1)(0,1) E SAME Africa NOMATCH E ^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z) ab (0,2)(0,2) E SAME aBd (0,3)(0,3) E SAME xy (0,2)(0,2) E SAME xY (0,2)(0,2) E SAME zebra (0,1)(0,1) E SAME Zambesi (0,1)(0,1) E SAME aCD NOMATCH E SAME XY NOMATCH E$n (?<=foo\\n)^bar foo\nbar (4,7) E$n SAME bar NOMATCH E$n SAME baz\nbar NOMATCH E (?<=(?<!foo)bar)baz barbaz (3,6) E SAME barbarbaz (6,9) E SAME koobarbaz (6,9) E SAME baz NOMATCH E SAME foobarbaz NOMATCH E The case of aaaaaa is missed out below because I think Perl 5.005_02 gets /it wrong; it sets $1 to aaa rather than aa. Compare the following test,/ NOMATCH E SAME /where it does set $1 to aa when matching aaaaaa./ NOMATCH E$ ^(a\\1?){4}$ a ESUBREG E$ ^((a)\\2?){4}$ a NOMATCH E$ SAME aa NOMATCH E$ SAME aaa NOMATCH E$ SAME aaaa (0,4)(3,4)(3,4) E$ SAME aaaaa (0,5)(4,5)(4,5) E$ SAME aaaaaaa (0,7)(6,7)(6,7) E$ SAME aaaaaaaa (0,8)(6,8)(6,7) E$ SAME aaaaaaaaa NOMATCH E$ SAME aaaaaaaaaa NOMATCH E$ SAME aaaaaaaaaaa NOMATCH E$ SAME aaaaaaaaaaaa NOMATCH E$ SAME aaaaaaaaaaaaa NOMATCH E$ SAME aaaaaaaaaaaaaa NOMATCH E$ SAME aaaaaaaaaaaaaaa NOMATCH E$ SAME aaaaaaaaaaaaaaaa NOMATCH E$ ^(aa?)(a\\1?)(a\\2?)(a\\3?)$ a NOMATCH E$ SAME aa NOMATCH E$ SAME aaa NOMATCH E$ SAME aaaa (0,4)(0,1)(1,2)(2,3)(3,4) E$ SAME aaaaa (0,5)(0,2)(2,3)(3,4)(4,5) E$ SAME aaaaaa (0,6)(0,2)(2,3)(3,5)(5,6) E$ SAME aaaaaaa (0,7)(0,2)(2,5)(5,6)(6,7) E$ SAME aaaaaaaa (0,8)(0,2)(2,5)(5,6)(6,8) E$ SAME aaaaaaaaa NOMATCH E$ SAME aaaaaaaaaa (0,10)(0,2)(2,5)(5,9)(9,10) E$ SAME aaaaaaaaaaa NOMATCH E$ SAME aaaaaaaaaaaa NOMATCH E$ SAME aaaaaaaaaaaaa NOMATCH E$ SAME aaaaaaaaaaaaaa (0,14)(0,2)(2,5)(5,9)(9,14) E$ SAME aaaaaaaaaaaaaaa NOMATCH E$ SAME aaaaaaaaaaaaaaaa NOMATCH # The following tests are taken from the Perl 5.005 test suite # some of them are compatible with 5.004 # but I'd rather not have to sort them out. E abc abc (0,3) E SAME xabcy (1,4) E SAME ababc (2,5) E SAME xbc NOMATCH E SAME axc NOMATCH E SAME abx NOMATCH E ab*c abc (0,3) E ab*bc abc (0,3) E SAME abbc (0,4) E SAME abbbbc (0,6) E .{1} abbbbc (0,1) E .{3,4} abbbbc (0,4) E ab{0,}bc abbbbc (0,6) E ab+bc abbc (0,4) E SAME abc NOMATCH E SAME abq NOMATCH E ab+bc abbbbc (0,6) E ab{1,}bc abbbbc (0,6) E ab{1,3}bc abbbbc (0,6) E ab{3,4}bc abbbbc (0,6) E ab{4,5}bc abq NOMATCH E SAME abbbbc NOMATCH E ab?bc abbc (0,4) E SAME abc (0,3) E ab{0,1}bc abc (0,3) E ab?c abc (0,3) E ab{0,1}c abc (0,3) E ^abc$ abc (0,3) E SAME abbbbc NOMATCH E SAME abcc NOMATCH E ^abc abcc (0,3) E abc$ aabc (1,4) E SAME aabc (1,4) E SAME aabcd NOMATCH E ^ abc (0,0) E $ abc (3,3) E a.c abc (0,3) E SAME axc (0,3) E a.*c axyzc (0,5) E a[bc]d abd (0,3) E SAME axyzd NOMATCH E SAME abc NOMATCH E a[b-d]e ace (0,3) E a[b-d] aac (1,3) E a[-b] a- (0,2) E a[b-] a- (0,2) E a] a] (0,2) E a[]]b a]b (0,3) E a[^bc]d aed (0,3) E SAME abd NOMATCH E SAME abd NOMATCH E a[^-b]c adc (0,3) E a[^]b]c adc (0,3) E SAME a-c (0,3) E SAME a]c NOMATCH E$ \\ba\\b a- (0,1) E$ SAME -a (1,2) E$ SAME -a- (1,2) E$ \\by\\b xy NOMATCH E$ SAME yz NOMATCH E$ SAME xyz NOMATCH E$ \\Ba\\B a- NOMATCH E$ SAME -a NOMATCH E$ SAME -a- NOMATCH E$ \\By\\b xy (1,2) E$ \\by\\B yz (0,1) E$ \\By\\B xyz (1,2) E$ \\w a (0,1) E$ \\W - (0,1) E$ SAME - (0,1) E$ SAME a NOMATCH E$ a\\sb a b (0,3) E$ a\\Sb a-b (0,3) E$ SAME a-b (0,3) E$ SAME a b NOMATCH E$ \\d 1 (0,1) E$ \\D - (0,1) E$ SAME - (0,1) E$ SAME 1 NOMATCH E$v [\\w] a (0,1) E$v [\\W] - (0,1) E$v SAME - (0,1) E$v SAME a NOMATCH E$v a[\\s]b a b (0,3) E$v a[\\S]b a-b (0,3) E$v SAME a-b (0,3) E$v SAME a b NOMATCH E$v [\\d] 1 (0,1) E$v [\\D] - (0,1) E$v SAME - (0,1) E$v SAME 1 NOMATCH E ab|cd abc (0,2) E SAME abcd (0,2) Ez ()ef def (1,3)(1,1) E$ a\\(b a(b (0,3) E$ a\\(*b ab (0,2) E$ SAME a((b (0,4) E$ a\\\\b a\b NOMATCH E ((a)) abc (0,1)(0,1)(0,1) E (a)b(c) abc (0,3)(0,1)(2,3) E a+b+c aabbabc (4,7) E a{1,}b{1,}c aabbabc (4,7) E a.+?c abcabc (0,3) E (a+|b)* ab (0,2)(1,2) E (a+|b){0,} ab (0,2)(1,2) E (a+|b)+ ab (0,2)(1,2) E (a+|b){1,} ab (0,2)(1,2) E (a+|b)? ab (0,1)(0,1) E (a+|b){0,1} ab (0,1)(0,1) E [^ab]* cde (0,3) E abc b NOMATCH E ([abc])*d abbbcd (0,6)(4,5) E ([abc])*bcd abcd (0,4)(0,1) E a|b|c|d|e e (0,1) E (a|b|c|d|e)f ef (0,2)(0,1) E abcd*efg abcdefg (0,7) E ab* xabyabbbz (1,3) E SAME xayabbbz (1,2) E (ab|cd)e abcde (2,5)(2,4) E [abhgefdc]ij hij (0,3) Ez (abc|)ef abcdef (4,6)(4,4) E (a|b)c*d abcd (1,4)(1,2) E (ab|ab*)bc abc (0,3)(0,1) E a([bc]*)c* abc (0,3)(1,3) E a([bc]*)(c*d) abcd (0,4)(1,3)(3,4) E a([bc]+)(c*d) abcd (0,4)(1,3)(3,4) E a([bc]*)(c+d) abcd (0,4)(1,2)(2,4) E a[bcd]*dcdcde adcdcde (0,7) E a[bcd]+dcdcde abcde NOMATCH E SAME adcdcde NOMATCH E (ab|a)b*c abc (0,3)(0,2) E ((a)(b)c)(d) abcd (0,4)(0,3)(0,1)(1,2)(3,4) E [a-zA-Z_][a-zA-Z0-9_]* alpha (0,5) E ^a(bc+|b[eh])g|.h$ abh (1,3) E (bc+d$|ef*g.|h?i(j|k)) effgz (0,5)(0,5) E SAME ij (0,2)(0,2)(1,2) E SAME reffgz (1,6)(1,6) E SAME effg NOMATCH E SAME bcdd NOMATCH E ((((((((((a)))))))))) a (0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1) E$ ((((((((((a))))))))))\\10 aa NOMATCH E$ ((((((((((a))))))))))\\10 aa0 (0,3)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1) E$ ((((((((((a))))))))))(?10) aa (0,2)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1) E (((((((((a))))))))) a (0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1) E multiple words of text aa NOMATCH E SAME uh-uh NOMATCH E multiple words multiple words, yeah (0,14) E (.*)c(.*) abcde (0,5)(0,2)(3,5) E$ \\((.*), (.*)\\) (a, b) (0,6)(1,2)(4,5) E abcd abcd (0,4) E a(bc)d abcd (0,4)(1,3) E a[-]?c ac (0,2) E$ (abc)\\1 abcabc (0,6)(0,3) E$ ([a-c]*)\\1 abcabc (0,6)(0,3) E$ (a)|\\1 a (0,1)(0,1) E$ SAME ab (0,1)(0,1) E$ SAME x NOMATCH E$ (([a-c])b*?\\2)* ababbbcbc (0,5)(3,5)(3,4) E$ (([a-c])b*?\\2){3} ababbbcbc (0,9)(6,9)(6,7) E ((a|b)\2(a)x)+ aaaxabaxbaaxbbax (0,4)(0,4)(0,1)(2,3) E$ ((\\3|b)\\2(a)x)+ aaaxabaxbaaxbbax ESUBREG E$ ((\\3|b)\\2(a)){2,} bbaababbabaaaaabbaaaabba ESUBREG Ei abc ABC (0,3) Ei SAME XABCY (1,4) Ei SAME ABABC (2,5) Ei SAME aaxabxbaxbbx NOMATCH Ei SAME XBC NOMATCH Ei SAME AXC NOMATCH Ei SAME ABX NOMATCH Ei ab*c ABC (0,3) Ei ab*bc ABC (0,3) Ei SAME ABBC (0,4) Ei ab*?bc ABBBBC (0,6) Ei ab{0,}?bc ABBBBC (0,6) Ei ab+?bc ABBC (0,4) Ei ab+bc ABC NOMATCH Ei SAME ABQ NOMATCH Ei ab+bc ABBBBC (0,6) Ei ab{1,}?bc ABBBBC (0,6) Ei ab{1,3}?bc ABBBBC (0,6) Ei ab{3,4}?bc ABBBBC (0,6) Ei ab{4,5}?bc ABQ NOMATCH Ei SAME ABBBBC NOMATCH Ei ab??bc ABBC (0,4) Ei SAME ABC (0,3) Ei ab{0,1}?bc ABC (0,3) Ei ab??c ABC (0,3) Ei ab{0,1}?c ABC (0,3) Ei ^abc$ ABC (0,3) Ei SAME ABBBBC NOMATCH Ei SAME ABCC NOMATCH Ei ^abc ABCC (0,3) Ei abc$ AABC (1,4) Ei ^ ABC (0,0) Ei $ ABC (3,3) Ei a.c ABC (0,3) Ei SAME AXC (0,3) Ei a.*?c AXYZC (0,5) Ei a.*c AABC (0,4) Ei SAME AXYZD NOMATCH Ei a[bc]d ABD (0,3) Ei a[b-d]e ACE (0,3) Ei SAME ABC NOMATCH Ei SAME ABD NOMATCH Ei a[b-d] AAC (1,3) Ei a[-b] A- (0,2) Ei a[b-] A- (0,2) Ei a] A] (0,2) Ei a[]]b A]B (0,3) Ei a[^bc]d AED (0,3) Ei a[^-b]c ADC (0,3) Ei SAME ABD NOMATCH Ei SAME A-C NOMATCH Ei a[^]b]c ADC (0,3) Ei ab|cd ABC (0,2) Ei SAME ABCD (0,2) Ezi ()ef DEF (1,3)(1,1) Ei $b A]C NOMATCH Ei SAME B NOMATCH E$i a\\(b A(B (0,3) E$i a\\(*b AB (0,2) E$i SAME A((B (0,4) E$i a\\\\b A\\B (0,3) Ei ((a)) ABC (0,1)(0,1)(0,1) Ei (a)b(c) ABC (0,3)(0,1)(2,3) Ei a+b+c AABBABC (4,7) Ei a{1,}b{1,}c AABBABC (4,7) Ei a.+?c ABCABC (0,3) Ei a.*?c ABCABC (0,3) Ei a.{0,5}?c ABCABC (0,3) Ei (a+|b)* AB (0,2)(1,2) Ei (a+|b){0,} AB (0,2)(1,2) Ei (a+|b)+ AB (0,2)(1,2) Ei (a+|b){1,} AB (0,2)(1,2) Ei (a+|b)? AB (0,1)(0,1) Ei (a+|b){0,1} AB (0,1)(0,1) Ei (a+|b){0,1}? AB (0,0) Ei [^ab]* CDE (0,3) Ei ([abc])*d ABBBCD (0,6)(4,5) Ei ([abc])*bcd ABCD (0,4)(0,1) Ei a|b|c|d|e E (0,1) Ei (a|b|c|d|e)f EF (0,2)(0,1) Ei abcd*efg ABCDEFG (0,7) Ei ab* XABYABBBZ (1,3) Ei SAME XAYABBBZ (1,2) Ei (ab|cd)e ABCDE (2,5)(2,4) Ei [abhgefdc]ij HIJ (0,3) Ei ^(ab|cd)e ABCDE NOMATCH Ezi (abc|)ef ABCDEF (4,6)(4,4) Ei (a|b)c*d ABCD (1,4)(1,2) Ei (ab|ab*)bc ABC (0,3)(0,1) Ei a([bc]*)c* ABC (0,3)(1,3) Ei a([bc]*)(c*d) ABCD (0,4)(1,3)(3,4) Ei a([bc]+)(c*d) ABCD (0,4)(1,3)(3,4) Ei a([bc]*)(c+d) ABCD (0,4)(1,2)(2,4) Ei a[bcd]*dcdcde ADCDCDE (0,7) Ei (ab|a)b*c ABC (0,3)(0,2) Ei ((a)(b)c)(d) ABCD (0,4)(0,3)(0,1)(1,2)(3,4) Ei [a-zA-Z_][a-zA-Z0-9_]* ALPHA (0,5) Ei ^a(bc+|b[eh])g|.h$ ABH (1,3) Ei (bc+d$|ef*g.|h?i(j|k)) EFFGZ (0,5)(0,5) Ei SAME IJ (0,2)(0,2)(1,2) Ei SAME REFFGZ (1,6)(1,6) Ei SAME ADCDCDE NOMATCH Ei SAME EFFG NOMATCH Ei SAME BCDD NOMATCH Ei ((((((((((a)))))))))) A (0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1) E$i ((((((((((a))))))))))\\10 AA NOMATCH E$i ((((((((((a))))))))))\\10 AA0 (0,3)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1) E$i ((((((((((a))))))))))(?10) AA (0,2)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1) Ei (((((((((a))))))))) A (0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1) Ei (?:(?:(?:(?:(?:(?:(?:(?:(?:(a)))))))))) A (0,1)(0,1) Ei (?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c)))))))))) C (0,1)(0,1) Ei multiple words of text AA NOMATCH Ei SAME UH-UH NOMATCH Ei multiple words MULTIPLE WORDS, YEAH (0,14) Ei (.*)c(.*) ABCDE (0,5)(0,2)(3,5) E$i \\((.*), (.*)\\) (A, B) (0,6)(1,2)(4,5) Ei abcd ABCD (0,4) Ei a(bc)d ABCD (0,4)(1,3) Ei a[-]?c AC (0,2) E$i (abc)\\1 ABCABC (0,6)(0,3) E$i ([a-c]*)\\1 ABCABC (0,6)(0,3) E a(?!b). abad (2,4) E a(?=d). abad (2,4) E a(?=c|d). abad (2,4) E a(?:b|c|d)(.) ace (0,3)(2,3) E a(?:b|c|d)*(.) ace (0,3)(2,3) E a(?:b|c|d)+?(.) ace (0,3)(2,3) E SAME acdbcdbe (0,3)(2,3) E a(?:b|c|d)+(.) acdbcdbe (0,8)(7,8) E a(?:b|c|d){2}(.) acdbcdbe (0,4)(3,4) E a(?:b|c|d){4,5}(.) acdbcdbe (0,7)(6,7) E a(?:b|c|d){4,5}?(.) acdbcdbe (0,6)(5,6) E ((foo)|(bar))* foobar (0,6)(3,6)(?,?)(3,6) E a(?:b|c|d){6,7}(.) acdbcdbe (0,8)(7,8) E a(?:b|c|d){6,7}?(.) acdbcdbe (0,8)(7,8) E a(?:b|c|d){5,6}(.) acdbcdbe (0,8)(7,8) E a(?:b|c|d){5,6}?(.) acdbcdbe (0,7)(6,7) E a(?:b|c|d){5,7}(.) acdbcdbe (0,8)(7,8) E a(?:b|c|d){5,7}?(.) acdbcdbe (0,7)(6,7) E a(?:b|(c|e){1,2}?|d)+?(.) ace (0,3)(1,2)(2,3) E ^(.+)?B AB (0,2)(0,1) E$ ^([^a-z])|(\\^)$ . (0,1)(0,1) E ^[<>]& <&OUT (0,2) E$ ^(a\\1?){4}$ aaaaaaaaaa ESUBREG E$ SAME AB ESUBREG E$ SAME aaaaaaaaa ESUBREG E$ SAME aaaaaaaaaaa ESUBREG E$ ^(a(?(1)\\1)){4}$ aaaaaaaaaa ESUBREG E$ SAME aaaaaaaaa ESUBREG E$ SAME aaaaaaaaaaa ESUBREG E ((f)(o)(o)|(b)(a)(r))* foobar (0,6)(3,6)(?,?)(?,?)(?,?)(3,4)(4,5)(5,6) E (?:(f)(o)(o)|(b)(a)(r))* foobar (0,6)(?,?)(?,?)(?,?)(3,4)(4,5)(5,6) E ((f)(u)|(b)(a)(r))* fubar (0,5)(2,5)(?,?)(?,?)(2,3)(3,4)(4,5) E (?:(f)(u)|(b)(a)(r))* fubar (0,5)(?,?)(?,?)(2,3)(3,4)(4,5) E (?<=a)b ab (1,2) E SAME cb NOMATCH E SAME b NOMATCH E (?<!c)b ab (1,2) E SAME b (0,1) E SAME b (0,1) E (?:..)*a aba (0,3) E (?:..)*?a aba (0,1) E$ ^(?:b|a(?=(.)))*\\1 abc (0,2)(1,2) Ez ^(){3,5} abc (0,0)(0,0) E ^(a+)*ax aax (0,3)(0,1) E ^((a|b)+)*ax aax (0,3)(0,1)(0,1) E ^((a|bc)+)*ax aax (0,3)(0,1)(0,1) E (a|x)*ab cab (1,3) E (a)*ab cab (1,3) E (?:(?i)a)b ab (0,2) E ((?i)a)b ab (0,2)(0,1) E (?:(?i)a)b Ab (0,2) E ((?i)a)b Ab (0,2)(0,1) E (?:(?i)a)b cb NOMATCH E SAME aB NOMATCH E (?i:a)b ab (0,2) E ((?i:a))b ab (0,2)(0,1) E (?i:a)b Ab (0,2) E ((?i:a))b Ab (0,2)(0,1) E (?i:a)b aB NOMATCH E SAME aB NOMATCH Ei (?:(?-i)a)b ab (0,2) Ei ((?-i)a)b ab (0,2)(0,1) Ei (?:(?-i)a)b aB (0,2) Ei ((?-i)a)b aB (0,2)(0,1) Ei (?:(?-i)a)b aB (0,2) Ei SAME Ab NOMATCH Ei (?:(?-i)a)b aB (0,2) Ei ((?-i)a)b aB (0,2)(0,1) Ei (?:(?-i)a)b Ab NOMATCH Ei SAME AB NOMATCH Ei (?-i:a)b ab (0,2) Ei ((?-i:a))b ab (0,2)(0,1) Ei (?-i:a)b aB (0,2) Ei ((?-i:a))b aB (0,2)(0,1) Ei (?-i:a)b AB NOMATCH Ei SAME Ab NOMATCH Ei (?-i:a)b aB (0,2) Ei ((?-i:a))b aB (0,2)(0,1) Ei (?-i:a)b Ab NOMATCH Ei SAME AB NOMATCH Ei ((?-i:a.))b AB NOMATCH Ei$ SAME a\nB (0,3)(0,2) Ei$ ((?s-i:a.))b a\nB (0,3)(0,2) E (?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b))) cabbbb (0,6) E (?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb))) caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb (0,41) E$i (ab)\\d\\1 Ab4ab (0,5)(0,2) E$i SAME ab4Ab (0,5)(0,2) E$ foo\\w*\\d{4}baz foobar1234baz (0,13) E x(~~)*(?:(?:F)?)? x~~ (0,3)(1,3) E ^a{3}(?#xxx)c aaac (0,4) E ^a(?#xxx){3}c aaac (0,4) Ec ^a (?#xxx) (?#yyy) {3} c aaac (0,4) E$ (?<![cd])b B\nB NOMATCH E$ SAME dbcb NOMATCH E (?<![cd])[ab] dbaacb (2,3) E (?<!(c|d))[ab] dbaacb (2,3) E (?<!cd)[ab] cdaccb (5,6) E ^(?:a?b?)*$ dbcb NOMATCH E SAME a-- NOMATCH E$ (^a(.))(^b$) a\nb\nc\n NOMATCH E$n (^a(.))(^b$) a\nb\nc\n NOMATCH E$j (^a(.))(^b$) a\nb\nc\n NOMATCH E$nj (^a(.))(^b$) a\nb\nc\n (0,3)(0,2)(1,2)(2,3) E$ (?ms)(^a(.))(^b$) a\nb\nc\n (0,3)(0,2)(1,2)(2,3) E$ (?ms:(^a(.))(^b$)) a\nb\nc\n (0,3)(0,2)(1,2)(2,3) E$nj (?:(^a(.))(^b$)) a\nb\nc\n (0,3)(0,2)(1,2)(2,3) E$ (?ms)(?:(^a(.))(^b$)) a\nb\nc\n (0,3)(0,2)(1,2)(2,3) E$ ((?s)^a(.))((?m)^b$) a\nb\nc\n (0,3)(0,2)(1,2)(2,3) E$ ((?m)^b$) a\nb\nc\n (2,3)(2,3) E$ (?m)^b a\nb\n (2,3) E$ (?m)^(b) a\nb\n (2,3)(2,3) E$ ((?m)^b) a\nb\n (2,3)(2,3) E$ \\n((?m)^b) a\nb\n (1,3)(2,3) E$ .c a\nb\nc\n (3,5) E$n .c a\nb\nc\n NOMATCH E$j .c a\nb\nc\n (3,5) E$nj .c a\nb\nc\n (3,5) E$ (?:.c) a\nb\nc\n (3,5) E$ (?m:.c) a\nb\nc\n NOMATCH E$ (?s:.c) a\nb\nc\n (3,5) E$ (?ms:.c) a\nb\nc\n (3,5) E$ (?m).c a\nb\nc\n NOMATCH E$ (?s).c a\nb\nc\n (3,5) E$ (?ms).c a\nb\nc\n (3,5) E$ ((?s).c) a\nb\nc\n (3,5)(3,5) E$ ((?s).)c a\nb\nc\n (3,5)(3,4) E$ . \n (0,1) E$n . \n NOMATCH E$j . \n (0,1) E$nj . \n (0,1) E$ (?=.) \n (0,0) E$n (?=.) \n NOMATCH E$j (?=.) \n (0,0) E$nj (?=.) \n (0,0) E$ (?!.) \n (1,1) E$n (?!.) \n (0,0) E$j (?!.) \n (1,1) E$nj (?!.) \n (1,1) E$ (.)c(?!.) a\nb\nc\n NOMATCH E$ (?:(.)c)(?:(?!.)) a\nb\nc\n NOMATCH E$ (?:(.)c)(?m:(?!.)) a\nb\nc\n (3,5)(3,4) E$ ((?s).)c(?!.) a\nb\nc\n NOMATCH E$ SAME a\nb\nc\n NOMATCH E$ ((?s)b.)c(?!.) a\nb\nc\n NOMATCH E$ SAME a\nb\nc\n NOMATCH Ez$ ()^b a\nb\nc\n NOMATCH Ez$ SAME a\nb\nc\n NOMATCH Ez$ ((?m)^b) a\nb\nc\n (2,3)(2,3) Ez (?(1)b|a) a ESUBREG E (x)?(?(1)a|b) a NOMATCH E SAME a NOMATCH E (x)?(?(1)b|a) a (0,1) Ez ()?a a (0,1)(0,0) Ez ()?(?(1)a|b) a (0,1)(0,0) Ez SAME b (0,1) Ez ()?(?(1)b|a) a (0,1) Ez SAME b (0,1)(0,0) Ez ()?(?(1)b|a) a (0,1) E$ ^(<)?blah(>)?$ <blah> (0,6)(0,1)(5,6) E$ ^(<)?blah(?(1)>)$ <blah> (0,6)(0,1) E$ ^(<)?blah(?(1)(>))$ <blah> (0,6)(0,1)(5,6) E$ SAME blah (0,4) E$ SAME a NOMATCH E$ SAME blah> NOMATCH E$ SAME <blah NOMATCH Ez$ ^(<)?blah(?(1)(>)|)$ <blah> (0,6)(0,1)(5,6) Ez$ SAME blah (0,4) Ez$ SAME a NOMATCH Ez$ SAME blah> NOMATCH Ez$ SAME <blah NOMATCH E$ ^(\\()?blah(?(1)(\\)))$ (blah) (0,6)(0,1)(5,6) E$ SAME blah (0,4) E$ SAME a NOMATCH E$ SAME blah) NOMATCH E$ SAME (blah NOMATCH E$ ^(\\(+)?blah(?(1)(\\)))$ (blah) (0,6)(0,1)(5,6) E$ SAME blah (0,4) E$ SAME blah) NOMATCH E$ SAME (blah NOMATCH E (?(?!a)b|a) a (0,1) E (?(?=a)b|a) a NOMATCH E SAME a NOMATCH E (?(?=a)a|b) a (0,1) E$ (?=(a+))(\\1ab) aaab (0,4)(0,2)(0,4) Em$ SAME aaab (0,4)(0,2)(0,4) E$ (?=(a+?))(\\1ab) aaab (0,4)(0,2)(0,4) E$ (\\w+:)+ one: (0,4)(0,4) E $(?<=^(a)) a (1,1)(0,1) E$ (?=(a+?))(\\1ab) aaab (0,4)(0,2)(0,4) E$ ^(?=(a+?))\\1ab aaab (0,4)(0,2) E$ SAME aaab (0,4)(0,2) E$v ([\\w:]+::)?(\\w+)$ abcd (0,4)(?,?)(0,4) E$v SAME xy:z:::abcd (0,11)(0,7)(7,11) E ^[^bcd]*(c+) aexycd (0,5)(4,5) E (a*)b+ caab (1,4)(1,3) E$v ([\\w:]+::)?(\\w+)$ abcd (0,4)(?,?)(0,4) E$v SAME xy:z:::abcd (0,11)(0,7)(7,11) E$v SAME abcd: NOMATCH E$v SAME abcd: NOMATCH E ^[^bcd]*(c+) aexycd (0,5)(4,5) E (?>a+)b aaab (0,4) E ([[:]+) a:[b]: ECTYPE E ([[=]+) a=[b]= ECOLLATE E ([[.]+) a.[b]. ECOLLATE E ((?>a+)b) aaab (0,4)(0,4) E (?>(a+))b aaab (0,4)(0,3) E$ ((?>[^()]+)|\\([^()]*\\))+ ((abc(ade)ufh()()x (2,18)(17,18) E$ a\\Z aaab NOMATCH E$ SAME a\nb\n NOMATCH E$ b\\Z a\nb\n (2,3) E$ b\\Z a\nb (2,3) E$ b\\z a\nb (2,3) E$v ^(?>(?(1)\\.|())[^\\W_](?>[a-z0-9-]*[^\\W_])?)+$ a ESUBREG E$v SAME abc ESUBREG E$v SAME a-b ESUBREG E$v SAME 0-9 ESUBREG E$v SAME a.b ESUBREG E$v SAME 5.6.7 ESUBREG E$v SAME the.quick.brown.fox ESUBREG E$v SAME a100.b200.300c ESUBREG E$v SAME 12-ab.1245 ESUBREG E$v SAME NULL ESUBREG E$v SAME .a ESUBREG E$v SAME -a ESUBREG E$v SAME a- ESUBREG E$v SAME a. ESUBREG E$v SAME a_b ESUBREG E$v SAME a.- ESUBREG E$v SAME a.. ESUBREG E$v SAME ab..bc ESUBREG E$v SAME the.quick.brown.fox- ESUBREG E$v SAME the.quick.brown.fox. ESUBREG E$v SAME the.quick.brown.fox_ ESUBREG E$v SAME the.quick.brown.fox+ ESUBREG E (?>.*)(?<=(abcd|wxyz)) alphabetabcd (0,12)(8,12) E SAME endingwxyz (0,10)(6,10) E SAME a rather long string that doesn't end with one of them NOMATCH E word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword word cat dog elephant mussel cow horse canary baboon snake shark otherword (0,74) E SAME word cat dog elephant mussel cow horse canary baboon snake shark NOMATCH E word (?>[a-zA-Z0-9]+ ){0,30}otherword word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope NOMATCH E$ (?<=\\d{3}(?!999))foo 999foo (3,6) E$ SAME 123999foo (6,9) E$ SAME 123abcfoo NOMATCH E$ (?<=(?!...999)\\d{3})foo 999foo (3,6) E$ SAME 123999foo (6,9) E$ SAME 123abcfoo NOMATCH E$ (?<=\\d{3}(?!999)...)foo 123abcfoo (6,9) E$ SAME 123456foo (6,9) E$ SAME 123999foo NOMATCH E$ (?<=\\d{3}...)(?<!999)foo 123abcfoo (6,9) E$ SAME 123456foo (6,9) E$ SAME 123999foo NOMATCH Ei <a +href *= *(["'])? <a href=abcd xyz (0,8) Ei =(")?(?(1)(.*)"|([^ ]+)) =abcd xyz (0,5)(?,?)(?,?)(1,5) Ei =(")?(?(1)(.*)\1|([^ ]+)) ="abcd" xyz (0,7)(1,2)(2,6) Ei <a +href *= *((["'])(.*?)\2|[^ ]+) <a href=abcd xyz (0,12)(8,12) Ei <a +href *= *((["'])(.*?)\2|[^ ]+) <a href="abcd" xyz (0,14)(8,14)(8,9)(9,13) Ei <a +href *= *(["'])?(?(1)(.*?)\1|([^ ]+)) <a href=abcd xyz (0,12)(?,?)(?,?)(8,12) Ei <a +href *= *(["'])?(?(1)(.*?)\1|([^ ]+)) <a href='abcd' xyz (0,14)(8,9)(9,13) Eiv <a[\s]+href[\s]*=[\s]*(["'])?(?(1)(.*?)\1|([^\s]+)) <a href=abcd xyz (0,12)(?,?)(?,?)(8,12) E$ijcv <a[\\s]+href[\\s]*=[\\s]* # find <a href=\n (["\\'])? # find single or double quote\n (?(1) (.*?)\\1 | ([^\\s]+)) # if quote found, match up to\n # next matching quote,\n # otherwise match up to next\n # space\n <a href=abcd xyz (0,12)(?,?)(?,?)(8,12) E$ijcv SAME <a href="abcd xyz pqr" cats (0,22)(8,9)(9,21) E$ijcv SAME <a href='abcd xyz pqr' cats (0,22)(8,9)(9,21) E$ijc <a\\s+href\\s*=\\s* # find <a href=\n (["'])? # find single or double quote\n (?(1) (.*?)\\1 | (\\S+)) # if quote found, match to next matching\n # quote, otherwise match up to next space\n <a href=abcd xyz (0,12)(?,?)(?,?)(8,12) E$ijc SAME <a href="abcd xyz pqr" cats (0,22)(8,9)(9,21) E$ijc SAME <a href = 'abcd xyz pqr' cats (0,36)(22,23)(23,35) E$ijc <a\\s+href(?>\\s*)=(?>\\s*) # find <a href=\n (["'])? # find single or double quote\n (?(1) (.*?)\\1 | (\\S+)) # if quote found, match up to next matching\n # quote, otherwise match up to next space\n <a href=abcd xyz (0,12)(?,?)(?,?)(8,12) E$ijc SAME <a href="abcd xyz pqr" cats (0,22)(8,9)(9,21) E$ijc SAME <a href = 'abcd xyz pqr' cats (0,36)(22,23)(23,35) E ((Z)+|A)* ZABCDEFG (0,2)(1,2) E (Z()|A)* ZABCDEFG ENULL Ez (Z()|A)* ZABCDEFG (0,2)(1,2) E (Z(())|A)* ZABCDEFG ENULL Ez (Z(())|A)* ZABCDEFG (0,2)(1,2) E ((?>Z)+|A)* ZABCDEFG (0,2)(1,2) E ((?>)+|A)* ZABCDEFG (0,0)(0,0) E a* abbab (0,1) E$v ^[a-\\d]* abcde ERANGE E$v ^[a-\\d] abcde ERANGE E$v SAME -things ERANGE E$v SAME 0digit ERANGE E$v SAME bcdef ERANGE E$v ^[\\d-a] abcde ERANGE E$v SAME -things ERANGE E$v SAME 0digit ERANGE E$v SAME bcdef ERANGE