|  | # This set of tests is for features that are compatible with all versions of | 
|  | # Perl >= 5.10, in non-UTF mode. It should run clean for the 8-bit, 16-bit, and | 
|  | # 32-bit PCRE libraries, and also using the perltest.sh script. | 
|  |  | 
|  | # WARNING: Use only / as the pattern delimiter. Although pcre2test supports | 
|  | # a number of delimiters, all those other than / give problems with the | 
|  | # perltest.sh script. | 
|  |  | 
|  | #forbid_utf | 
|  | #newline_default lf any anycrlf | 
|  | #perltest | 
|  |  | 
|  | /the quick brown fox/ | 
|  | the quick brown fox | 
|  | What do you know about the quick brown fox? | 
|  | \= Expect no match | 
|  | The quick brown FOX | 
|  | What do you know about THE QUICK BROWN FOX? | 
|  |  | 
|  | /The quick brown fox/i | 
|  | the quick brown fox | 
|  | The quick brown FOX | 
|  | What do you know about the quick brown fox? | 
|  | What do you know about THE QUICK BROWN FOX? | 
|  |  | 
|  | #if !ebcdic | 
|  |  | 
|  | /abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/ | 
|  | abcd\t\n\r\f\a\e9;\$\\?caxyz | 
|  |  | 
|  | #endif | 
|  |  | 
|  | /a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/ | 
|  | abxyzpqrrrabbxyyyypqAzz | 
|  | abxyzpqrrrabbxyyyypqAzz | 
|  | aabxyzpqrrrabbxyyyypqAzz | 
|  | aaabxyzpqrrrabbxyyyypqAzz | 
|  | aaaabxyzpqrrrabbxyyyypqAzz | 
|  | abcxyzpqrrrabbxyyyypqAzz | 
|  | aabcxyzpqrrrabbxyyyypqAzz | 
|  | aaabcxyzpqrrrabbxyyyypAzz | 
|  | aaabcxyzpqrrrabbxyyyypqAzz | 
|  | aaabcxyzpqrrrabbxyyyypqqAzz | 
|  | aaabcxyzpqrrrabbxyyyypqqqAzz | 
|  | aaabcxyzpqrrrabbxyyyypqqqqAzz | 
|  | aaabcxyzpqrrrabbxyyyypqqqqqAzz | 
|  | aaabcxyzpqrrrabbxyyyypqqqqqqAzz | 
|  | aaaabcxyzpqrrrabbxyyyypqAzz | 
|  | abxyzzpqrrrabbxyyyypqAzz | 
|  | aabxyzzzpqrrrabbxyyyypqAzz | 
|  | aaabxyzzzzpqrrrabbxyyyypqAzz | 
|  | aaaabxyzzzzpqrrrabbxyyyypqAzz | 
|  | abcxyzzpqrrrabbxyyyypqAzz | 
|  | aabcxyzzzpqrrrabbxyyyypqAzz | 
|  | aaabcxyzzzzpqrrrabbxyyyypqAzz | 
|  | aaaabcxyzzzzpqrrrabbxyyyypqAzz | 
|  | aaaabcxyzzzzpqrrrabbbxyyyypqAzz | 
|  | aaaabcxyzzzzpqrrrabbbxyyyyypqAzz | 
|  | aaabcxyzpqrrrabbxyyyypABzz | 
|  | aaabcxyzpqrrrabbxyyyypABBzz | 
|  | >>>aaabxyzpqrrrabbxyyyypqAzz | 
|  | >aaaabxyzpqrrrabbxyyyypqAzz | 
|  | >>>>abcxyzpqrrrabbxyyyypqAzz | 
|  | \= Expect no match | 
|  | abxyzpqrrabbxyyyypqAzz | 
|  | abxyzpqrrrrabbxyyyypqAzz | 
|  | abxyzpqrrrabxyyyypqAzz | 
|  | aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz | 
|  | aaaabcxyzzzzpqrrrabbbxyyypqAzz | 
|  | aaabcxyzpqrrrabbxyyyypqqqqqqqAzz | 
|  |  | 
|  | /^(abc){1,2}zz/ | 
|  | abczz | 
|  | abcabczz | 
|  | \= Expect no match | 
|  | zz | 
|  | abcabcabczz | 
|  | >>abczz | 
|  |  | 
|  | /^(b+?|a){1,2}?c/ | 
|  | bc | 
|  | bbc | 
|  | bbbc | 
|  | bac | 
|  | bbac | 
|  | aac | 
|  | abbbbbbbbbbbc | 
|  | bbbbbbbbbbbac | 
|  | \= Expect no match | 
|  | aaac | 
|  | abbbbbbbbbbbac | 
|  |  | 
|  | /^(b+|a){1,2}c/ | 
|  | bc | 
|  | bbc | 
|  | bbbc | 
|  | bac | 
|  | bbac | 
|  | aac | 
|  | abbbbbbbbbbbc | 
|  | bbbbbbbbbbbac | 
|  | \= Expect no match | 
|  | aaac | 
|  | abbbbbbbbbbbac | 
|  |  | 
|  | /^(ba|b*){1,2}?bc/ | 
|  | babc | 
|  | bbabc | 
|  | bababc | 
|  | \= Expect no match | 
|  | bababbc | 
|  | babababc | 
|  |  | 
|  | #if !ebcdic | 
|  |  | 
|  | /^\ca\cA\c[;\c:/ | 
|  | \x01\x01\e;z | 
|  |  | 
|  | #endif | 
|  |  | 
|  | /^[ab\]cde]/ | 
|  | athing | 
|  | bthing | 
|  | ]thing | 
|  | cthing | 
|  | dthing | 
|  | ething | 
|  | \= Expect no match | 
|  | fthing | 
|  | [thing | 
|  | \\thing | 
|  |  | 
|  | /^[]cde]/ | 
|  | ]thing | 
|  | cthing | 
|  | dthing | 
|  | ething | 
|  | \= Expect no match | 
|  | athing | 
|  | fthing | 
|  |  | 
|  | /^[^ab\]cde]/ | 
|  | fthing | 
|  | [thing | 
|  | \\thing | 
|  | \= Expect no match | 
|  | athing | 
|  | bthing | 
|  | ]thing | 
|  | cthing | 
|  | dthing | 
|  | ething | 
|  |  | 
|  | /^[^]cde]/ | 
|  | athing | 
|  | fthing | 
|  | \= Expect no match | 
|  | ]thing | 
|  | cthing | 
|  | dthing | 
|  | ething | 
|  |  | 
|  | /^\/ | 
|  |  | 
|  |  | 
|  | /^ÿ/ | 
|  | ÿ | 
|  |  | 
|  | /^[0-9]+$/ | 
|  | 0 | 
|  | 1 | 
|  | 2 | 
|  | 3 | 
|  | 4 | 
|  | 5 | 
|  | 6 | 
|  | 7 | 
|  | 8 | 
|  | 9 | 
|  | 10 | 
|  | 100 | 
|  | \= Expect no match | 
|  | abc | 
|  |  | 
|  | /^.*nter/ | 
|  | enter | 
|  | inter | 
|  | uponter | 
|  |  | 
|  | /^xxx[0-9]+$/ | 
|  | xxx0 | 
|  | xxx1234 | 
|  | \= Expect no match | 
|  | xxx | 
|  |  | 
|  | /^.+[0-9][0-9][0-9]$/ | 
|  | x123 | 
|  | x1234 | 
|  | xx123 | 
|  | 123456 | 
|  | \= Expect no match | 
|  | 123 | 
|  |  | 
|  | /^.+?[0-9][0-9][0-9]$/ | 
|  | x123 | 
|  | x1234 | 
|  | xx123 | 
|  | 123456 | 
|  | \= Expect no match | 
|  | 123 | 
|  |  | 
|  | /^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/ | 
|  | abc!pqr=apquxz.ixr.zzz.ac.uk | 
|  | \= Expect no match | 
|  | !pqr=apquxz.ixr.zzz.ac.uk | 
|  | abc!=apquxz.ixr.zzz.ac.uk | 
|  | abc!pqr=apquxz:ixr.zzz.ac.uk | 
|  | abc!pqr=apquxz.ixr.zzz.ac.ukk | 
|  |  | 
|  | /:/ | 
|  | Well, we need a colon: somewhere | 
|  | \= Expect no match | 
|  | Fail without a colon | 
|  |  | 
|  | /([\da-f:]+)$/i | 
|  | 0abc | 
|  | abc | 
|  | fed | 
|  | E | 
|  | :: | 
|  | 5f03:12C0::932e | 
|  | fed def | 
|  | Any old stuff | 
|  | \= Expect no match | 
|  | 0zzz | 
|  | gzzz | 
|  | fed\x20 | 
|  | Any old rubbish | 
|  |  | 
|  | /^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ | 
|  | .1.2.3 | 
|  | A.12.123.0 | 
|  | \= Expect no match | 
|  | .1.2.3333 | 
|  | 1.2.3 | 
|  | 1234.2.3 | 
|  |  | 
|  | /^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/ | 
|  | 1 IN SOA non-sp1 non-sp2( | 
|  | 1    IN    SOA    non-sp1    non-sp2   ( | 
|  | \= Expect no match | 
|  | 1IN SOA non-sp1 non-sp2( | 
|  |  | 
|  | /^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-Z\d\-]*)*\.$/ | 
|  | a. | 
|  | Z. | 
|  | 2. | 
|  | ab-c.pq-r. | 
|  | sxk.zzz.ac.uk. | 
|  | x-.y-. | 
|  | \= Expect no match | 
|  | -abc.peq. | 
|  |  | 
|  | /^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/ | 
|  | *.a | 
|  | *.b0-a | 
|  | *.c3-b.c | 
|  | *.c-a.b-c | 
|  | \= Expect no match | 
|  | *.0 | 
|  | *.a- | 
|  | *.a-b.c- | 
|  | *.c-a.0-c | 
|  |  | 
|  | /^(?=ab(de))(abd)(e)/ | 
|  | abde | 
|  |  | 
|  | /^(?!(ab)de|x)(abd)(f)/ | 
|  | abdf | 
|  |  | 
|  | /^(?=(ab(cd)))(ab)/ | 
|  | abcd | 
|  |  | 
|  | /^[\da-f](\.[\da-f])*$/i | 
|  | a.b.c.d | 
|  | A.B.C.D | 
|  | a.b.c.1.2.3.C | 
|  |  | 
|  | /^\".*\"\s*(;.*)?$/ | 
|  | \"1234\" | 
|  | \"abcd\" ; | 
|  | \"\" ; rhubarb | 
|  | \= Expect no match | 
|  | \"1234\" : things | 
|  |  | 
|  | /^$/ | 
|  | \ | 
|  | \= Expect no match | 
|  | A non-empty line | 
|  |  | 
|  | /   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/x | 
|  | ab c | 
|  | \= Expect no match | 
|  | abc | 
|  | ab cde | 
|  |  | 
|  | /(?x)   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/ | 
|  | ab c | 
|  | \= Expect no match | 
|  | abc | 
|  | ab cde | 
|  |  | 
|  | /^   a\ b[c ]d       $/x | 
|  | a bcd | 
|  | a b d | 
|  | \= Expect no match | 
|  | abcd | 
|  | ab d | 
|  |  | 
|  | /^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/ | 
|  | abcdefhijklm | 
|  |  | 
|  | /^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/ | 
|  | abcdefhijklm | 
|  |  | 
|  | /^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/ | 
|  | a+ Z0+\x08\n\x1d\x12 | 
|  |  | 
|  | /^[.^$|()*+?{,}]+/ | 
|  | .^\$(*+)|{?,?} | 
|  |  | 
|  | /^a*\w/ | 
|  | z | 
|  | az | 
|  | aaaz | 
|  | a | 
|  | aa | 
|  | aaaa | 
|  | a+ | 
|  | aa+ | 
|  |  | 
|  | /^a*?\w/ | 
|  | z | 
|  | az | 
|  | aaaz | 
|  | a | 
|  | aa | 
|  | aaaa | 
|  | a+ | 
|  | aa+ | 
|  |  | 
|  | /^a+\w/ | 
|  | az | 
|  | aaaz | 
|  | aa | 
|  | aaaa | 
|  | aa+ | 
|  |  | 
|  | /^a+?\w/ | 
|  | az | 
|  | aaaz | 
|  | aa | 
|  | aaaa | 
|  | aa+ | 
|  |  | 
|  | /^\d{8}\w{2,}/ | 
|  | 1234567890 | 
|  | 12345678ab | 
|  | 12345678__ | 
|  | \= Expect no match | 
|  | 1234567 | 
|  |  | 
|  | /^[aeiou\d]{4,5}$/ | 
|  | uoie | 
|  | 1234 | 
|  | 12345 | 
|  | aaaaa | 
|  | \= Expect no match | 
|  | 123456 | 
|  |  | 
|  | /^[aeiou\d]{4,5}?/ | 
|  | uoie | 
|  | 1234 | 
|  | 12345 | 
|  | aaaaa | 
|  | 123456 | 
|  |  | 
|  | /\A(abc|def)=(\1){2,3}\Z/ | 
|  | abc=abcabc | 
|  | def=defdefdef | 
|  | \= Expect no match | 
|  | abc=defdef | 
|  |  | 
|  | /^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/ | 
|  | abcdefghijkcda2 | 
|  | abcdefghijkkkkcda2 | 
|  |  | 
|  | /(cat(a(ract|tonic)|erpillar)) \1()2(3)/ | 
|  | cataract cataract23 | 
|  | catatonic catatonic23 | 
|  | caterpillar caterpillar23 | 
|  |  | 
|  |  | 
|  | /^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/ | 
|  | From abcd  Mon Sep 01 12:33:02 1997 | 
|  |  | 
|  | /^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/ | 
|  | From abcd  Mon Sep 01 12:33:02 1997 | 
|  | From abcd  Mon Sep  1 12:33:02 1997 | 
|  | \= Expect no match | 
|  | From abcd  Sep 01 12:33:02 1997 | 
|  |  | 
|  | /^12.34/s | 
|  | 12\n34 | 
|  | 12\r34 | 
|  |  | 
|  | /\w+(?=\t)/ | 
|  | the quick brown\t fox | 
|  |  | 
|  | /foo(?!bar)(.*)/ | 
|  | foobar is foolish see? | 
|  |  | 
|  | /(?:(?!foo)...|^.{0,2})bar(.*)/ | 
|  | foobar crowbar etc | 
|  | barrel | 
|  | 2barrel | 
|  | A barrel | 
|  |  | 
|  | /^(\D*)(?=\d)(?!123)/ | 
|  | abc456 | 
|  | \= Expect no match | 
|  | abc123 | 
|  |  | 
|  | /^1234(?# test newlines | 
|  | inside)/ | 
|  | 1234 | 
|  |  | 
|  | /^1234 #comment in extended re | 
|  | /x | 
|  | 1234 | 
|  |  | 
|  | /#rhubarb | 
|  | abcd/x | 
|  | abcd | 
|  |  | 
|  | /^abcd#rhubarb/x | 
|  | abcd | 
|  |  | 
|  | /^(a)\1{2,3}(.)/ | 
|  | aaab | 
|  | aaaab | 
|  | aaaaab | 
|  | aaaaaab | 
|  |  | 
|  | /(?!^)abc/ | 
|  | the abc | 
|  | \= Expect no match | 
|  | abc | 
|  |  | 
|  | /(?=^)abc/ | 
|  | abc | 
|  | \= Expect no match | 
|  | the abc | 
|  |  | 
|  | /^[ab]{1,3}(ab*|b)/ | 
|  | aabbbbb | 
|  |  | 
|  | /^[ab]{1,3}?(ab*|b)/ | 
|  | aabbbbb | 
|  |  | 
|  | /^[ab]{1,3}?(ab*?|b)/ | 
|  | aabbbbb | 
|  |  | 
|  | /^[ab]{1,3}(ab*?|b)/ | 
|  | aabbbbb | 
|  |  | 
|  | #if !ebcdic | 
|  |  | 
|  | /  (?: [\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 | 
|  | /x | 
|  | Alan Other <user\@dom.ain> | 
|  | <user\@dom.ain> | 
|  | user\@dom.ain | 
|  | \"A. Other\" <user.1234\@dom.ain> (a comment) | 
|  | A. Other <user.1234\@dom.ain> (a comment) | 
|  | \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay | 
|  | A missing angle <user\@some.where | 
|  | \= Expect no match | 
|  | The quick brown fox | 
|  |  | 
|  | /[\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 | 
|  | ) | 
|  | /x | 
|  | Alan Other <user\@dom.ain> | 
|  | <user\@dom.ain> | 
|  | user\@dom.ain | 
|  | \"A. Other\" <user.1234\@dom.ain> (a comment) | 
|  | A. Other <user.1234\@dom.ain> (a comment) | 
|  | \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay | 
|  | A missing angle <user\@some.where | 
|  | \= Expect no match | 
|  | The quick brown fox | 
|  |  | 
|  | #endif | 
|  |  | 
|  | /abc\0def\00pqr\000xyz\0000AB/ | 
|  | abc\0def\00pqr\000xyz\0000AB | 
|  | abc456 abc\0def\00pqr\000xyz\0000ABCDE | 
|  |  | 
|  | /abc\x0def\x00pqr\x000xyz\x0000AB/ | 
|  | abc\x0def\x00pqr\x000xyz\x0000AB | 
|  | abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE | 
|  |  | 
|  | /^[\000-\037]/ | 
|  | \0A | 
|  | \01B | 
|  | \037C | 
|  |  | 
|  | /\0*/ | 
|  | \0\0\0\0 | 
|  |  | 
|  | /A\x0{2,3}Z/ | 
|  | The A\x0\x0Z | 
|  | An A\0\x0\0Z | 
|  | \= Expect no match | 
|  | A\0Z | 
|  | A\0\x0\0\x0Z | 
|  |  | 
|  | /^(cow|)\1(bell)/ | 
|  | cowcowbell | 
|  | bell | 
|  | \= Expect no match | 
|  | cowbell | 
|  |  | 
|  | /^\s/ | 
|  | \040abc | 
|  | \x0cabc | 
|  | \nabc | 
|  | \rabc | 
|  | \tabc | 
|  | \= Expect no match | 
|  | abc | 
|  |  | 
|  | /^a	b | 
|  | c/x | 
|  | abc | 
|  |  | 
|  | /^(a|)\1*b/ | 
|  | ab | 
|  | aaaab | 
|  | b | 
|  | \= Expect no match | 
|  | acb | 
|  |  | 
|  | /^(a|)\1+b/ | 
|  | aab | 
|  | aaaab | 
|  | b | 
|  | \= Expect no match | 
|  | ab | 
|  |  | 
|  | /^(a|)\1?b/ | 
|  | ab | 
|  | aab | 
|  | b | 
|  | \= Expect no match | 
|  | acb | 
|  |  | 
|  | /^(a|)\1{2}b/ | 
|  | aaab | 
|  | b | 
|  | \= Expect no match | 
|  | ab | 
|  | aab | 
|  | aaaab | 
|  |  | 
|  | /^(a|)\1{2,3}b/ | 
|  | aaab | 
|  | aaaab | 
|  | b | 
|  | \= Expect no match | 
|  | ab | 
|  | aab | 
|  | aaaaab | 
|  |  | 
|  | /ab{1,3}bc/ | 
|  | abbbbc | 
|  | abbbc | 
|  | abbc | 
|  | \= Expect no match | 
|  | abc | 
|  | abbbbbc | 
|  |  | 
|  | /([^.]*)\.([^:]*):[T ]+(.*)/ | 
|  | track1.title:TBlah blah blah | 
|  |  | 
|  | /([^.]*)\.([^:]*):[T ]+(.*)/i | 
|  | track1.title:TBlah blah blah | 
|  |  | 
|  | /([^.]*)\.([^:]*):[t ]+(.*)/i | 
|  | track1.title:TBlah blah blah | 
|  |  | 
|  | #if !ebcdic | 
|  |  | 
|  | /^[W-c]+$/ | 
|  | WXY_^abc | 
|  | \= Expect no match | 
|  | wxy | 
|  |  | 
|  | /^[W-c]+$/i | 
|  | WXY_^abc | 
|  | wxy_^ABC | 
|  |  | 
|  | /^[\x3f-\x5F]+$/i | 
|  | WXY_^abc | 
|  | wxy_^ABC | 
|  |  | 
|  | #endif | 
|  |  | 
|  | /^abc$/m | 
|  | abc | 
|  | qqq\nabc | 
|  | abc\nzzz | 
|  | qqq\nabc\nzzz | 
|  |  | 
|  | /^abc$/ | 
|  | abc | 
|  | \= Expect no match | 
|  | qqq\nabc | 
|  | abc\nzzz | 
|  | qqq\nabc\nzzz | 
|  |  | 
|  | /\Aabc\Z/m | 
|  | abc | 
|  | abc\n | 
|  | \= Expect no match | 
|  | qqq\nabc | 
|  | abc\nzzz | 
|  | qqq\nabc\nzzz | 
|  |  | 
|  | /\A(.)*\Z/s | 
|  | abc\ndef | 
|  |  | 
|  | /\A(.)*\Z/m | 
|  | \= Expect no match | 
|  | abc\ndef | 
|  |  | 
|  | /(?:b)|(?::+)/ | 
|  | b::c | 
|  | c::b | 
|  |  | 
|  | /[-az]+/ | 
|  | az- | 
|  | \= Expect no match | 
|  | b | 
|  |  | 
|  | /[az-]+/ | 
|  | za- | 
|  | \= Expect no match | 
|  | b | 
|  |  | 
|  | /[a\-z]+/ | 
|  | a-z | 
|  | \= Expect no match | 
|  | b | 
|  |  | 
|  | /[a-z]+/ | 
|  | abcdxyz | 
|  |  | 
|  | /[\d-]+/ | 
|  | 12-34 | 
|  | \= Expect no match | 
|  | aaa | 
|  |  | 
|  | #if !ebcdic | 
|  |  | 
|  | /\x5c/ | 
|  | \\ | 
|  |  | 
|  | /\x20Z/ | 
|  | the Zoo | 
|  | \= Expect no match | 
|  | Zulu | 
|  |  | 
|  | #endif | 
|  |  | 
|  | /(abc)\1/i | 
|  | abcabc | 
|  | ABCabc | 
|  | abcABC | 
|  |  | 
|  | /abc$/ | 
|  | abc | 
|  | abc\n | 
|  | \= Expect no match | 
|  | abc\ndef | 
|  |  | 
|  | #if !ebcdic | 
|  |  | 
|  | /(abc)\123/ | 
|  | abc\x53 | 
|  |  | 
|  | /(abc)\223/ | 
|  | abc\x93 | 
|  |  | 
|  | /(abc)\323/ | 
|  | abc\xd3 | 
|  |  | 
|  | /(abc)\100/ | 
|  | abc\x40 | 
|  | abc\100 | 
|  |  | 
|  | /(abc)\1000/ | 
|  | abc\x400 | 
|  | abc\x40\x30 | 
|  | abc\1000 | 
|  | abc\100\x30 | 
|  | abc\100\060 | 
|  | abc\100\60 | 
|  |  | 
|  | #endif | 
|  |  | 
|  | /^(A)(B)(C)(D)(E)(F)(G)(H)(I)\8\9$/ | 
|  | ABCDEFGHIHI | 
|  |  | 
|  | /^[A\8B\9C]+$/ | 
|  | A8B9C | 
|  | \= Expect no match | 
|  | A8B9C\x00 | 
|  |  | 
|  | #if !ebcdic | 
|  |  | 
|  | /(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/ | 
|  | abcdefghijkllS | 
|  |  | 
|  | /(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/ | 
|  | abcdefghijk\12S | 
|  |  | 
|  | #endif | 
|  |  | 
|  | /a{0}bc/ | 
|  | bc | 
|  |  | 
|  | /(a|(bc)){0,0}?xyz/ | 
|  | xyz | 
|  |  | 
|  | #if !ebcdic | 
|  |  | 
|  | /abc[\10]de/ | 
|  | abc\010de | 
|  |  | 
|  | #endif | 
|  |  | 
|  | /abc[\1]de/ | 
|  | abc\1de | 
|  |  | 
|  | /(abc)[\1]de/ | 
|  | abc\1de | 
|  |  | 
|  | /(?s)a.b/ | 
|  | a\nb | 
|  |  | 
|  | /^([^a])([^\b])([^c]*)([^d]{3,4})/ | 
|  | baNOTccccd | 
|  | baNOTcccd | 
|  | baNOTccd | 
|  | bacccd | 
|  | \= Expect no match | 
|  | anything | 
|  | b\bc | 
|  | baccd | 
|  |  | 
|  | /[^a]/ | 
|  | Abc | 
|  |  | 
|  | /[^a]/i | 
|  | Abc | 
|  |  | 
|  | /[^a]+/ | 
|  | AAAaAbc | 
|  |  | 
|  | /[^a]+/i | 
|  | AAAaAbc | 
|  |  | 
|  | /[^a]+/ | 
|  | bbb\nccc | 
|  |  | 
|  | /[^k]$/ | 
|  | abc | 
|  | \= Expect no match | 
|  | abk | 
|  |  | 
|  | /[^k]{2,3}$/ | 
|  | abc | 
|  | kbc | 
|  | kabc | 
|  | \= Expect no match | 
|  | abk | 
|  | akb | 
|  | akk | 
|  |  | 
|  | /^\d{8,}\@.+[^k]$/ | 
|  | 12345678\@a.b.c.d | 
|  | 123456789\@x.y.z | 
|  | \= Expect no match | 
|  | 12345678\@x.y.uk | 
|  | 1234567\@a.b.c.d | 
|  |  | 
|  | /(a)\1{8,}/ | 
|  | aaaaaaaaa | 
|  | aaaaaaaaaa | 
|  | \= Expect no match | 
|  | aaaaaaa | 
|  |  | 
|  | /[^a]/ | 
|  | aaaabcd | 
|  | aaAabcd | 
|  |  | 
|  | /[^a]/i | 
|  | aaaabcd | 
|  | aaAabcd | 
|  |  | 
|  | /[^az]/ | 
|  | aaaabcd | 
|  | aaAabcd | 
|  |  | 
|  | /[^az]/i | 
|  | aaaabcd | 
|  | aaAabcd | 
|  |  | 
|  | #if !ebcdic | 
|  |  | 
|  | /\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377/ | 
|  | \000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377 | 
|  |  | 
|  | #endif | 
|  |  | 
|  | /P[^*]TAIRE[^*]{1,6}?LL/ | 
|  | xxxxxxxxxxxPSTAIREISLLxxxxxxxxx | 
|  |  | 
|  | /P[^*]TAIRE[^*]{1,}?LL/ | 
|  | xxxxxxxxxxxPSTAIREISLLxxxxxxxxx | 
|  |  | 
|  | /(\.\d\d[1-9]?)\d+/ | 
|  | 1.230003938 | 
|  | 1.875000282 | 
|  | 1.235 | 
|  |  | 
|  | /(\.\d\d((?=0)|\d(?=\d)))/ | 
|  | 1.230003938 | 
|  | 1.875000282 | 
|  | \= Expect no match | 
|  | 1.235 | 
|  |  | 
|  | /a(?)b/ | 
|  | ab | 
|  |  | 
|  | /\b(foo)\s+(\w+)/i | 
|  | Food is on the foo table | 
|  |  | 
|  | /foo(.*)bar/ | 
|  | The food is under the bar in the barn. | 
|  |  | 
|  | /foo(.*?)bar/ | 
|  | The food is under the bar in the barn. | 
|  |  | 
|  | /(.*)(\d*)/ | 
|  | I have 2 numbers: 53147 | 
|  |  | 
|  | /(.*)(\d+)/ | 
|  | I have 2 numbers: 53147 | 
|  |  | 
|  | /(.*?)(\d*)/ | 
|  | I have 2 numbers: 53147 | 
|  |  | 
|  | /(.*?)(\d+)/ | 
|  | I have 2 numbers: 53147 | 
|  |  | 
|  | /(.*)(\d+)$/ | 
|  | I have 2 numbers: 53147 | 
|  |  | 
|  | /(.*?)(\d+)$/ | 
|  | I have 2 numbers: 53147 | 
|  |  | 
|  | /(.*)\b(\d+)$/ | 
|  | I have 2 numbers: 53147 | 
|  |  | 
|  | /(.*\D)(\d+)$/ | 
|  | I have 2 numbers: 53147 | 
|  |  | 
|  | /^\D*(?!123)/ | 
|  | ABC123 | 
|  |  | 
|  | /^(\D*)(?=\d)(?!123)/ | 
|  | ABC445 | 
|  | \= Expect no match | 
|  | ABC123 | 
|  |  | 
|  | /^[W-]46]/ | 
|  | W46]789 | 
|  | -46]789 | 
|  | \= Expect no match | 
|  | Wall | 
|  | Zebra | 
|  | 42 | 
|  | [abcd] | 
|  | ]abcd[ | 
|  |  | 
|  | #if !ebcdic | 
|  |  | 
|  | /^[W-\]46]/ | 
|  | W46]789 | 
|  | Wall | 
|  | Zebra | 
|  | Xylophone | 
|  | 42 | 
|  | [abcd] | 
|  | ]abcd[ | 
|  | \\backslash | 
|  | \= Expect no match | 
|  | -46]789 | 
|  | well | 
|  |  | 
|  | #endif | 
|  |  | 
|  | /\d\d\/\d\d\/\d\d\d\d/ | 
|  | 01/01/2000 | 
|  |  | 
|  | /word (?:[a-zA-Z0-9]+ ){0,10}otherword/ | 
|  | word cat dog elephant mussel cow horse canary baboon snake shark otherword | 
|  | \= Expect no match | 
|  | word cat dog elephant mussel cow horse canary baboon snake shark | 
|  |  | 
|  | /word (?:[a-zA-Z0-9]+ ){0,300}otherword/ | 
|  | \= Expect no match | 
|  | 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 | 
|  |  | 
|  | /^(a){0,0}/ | 
|  | bcd | 
|  | abc | 
|  | aab | 
|  |  | 
|  | /^(a){0,1}/ | 
|  | bcd | 
|  | abc | 
|  | aab | 
|  |  | 
|  | /^(a){0,2}/ | 
|  | bcd | 
|  | abc | 
|  | aab | 
|  |  | 
|  | /^(a){0,3}/ | 
|  | bcd | 
|  | abc | 
|  | aab | 
|  | aaa | 
|  |  | 
|  | /^(a){0,}/ | 
|  | bcd | 
|  | abc | 
|  | aab | 
|  | aaa | 
|  | aaaaaaaa | 
|  |  | 
|  | /^(a){1,1}/ | 
|  | abc | 
|  | aab | 
|  | \= Expect no match | 
|  | bcd | 
|  |  | 
|  | /^(a){1,2}/ | 
|  | abc | 
|  | aab | 
|  | \= Expect no match | 
|  | bcd | 
|  |  | 
|  | /^(a){1,3}/ | 
|  | abc | 
|  | aab | 
|  | aaa | 
|  | \= Expect no match | 
|  | bcd | 
|  |  | 
|  | /^(a){1,}/ | 
|  | abc | 
|  | aab | 
|  | aaa | 
|  | aaaaaaaa | 
|  | \= Expect no match | 
|  | bcd | 
|  |  | 
|  | /.*\.gif/ | 
|  | borfle\nbib.gif\nno | 
|  |  | 
|  | /.{0,}\.gif/ | 
|  | borfle\nbib.gif\nno | 
|  |  | 
|  | /.*\.gif/m | 
|  | borfle\nbib.gif\nno | 
|  |  | 
|  | /.*\.gif/s | 
|  | borfle\nbib.gif\nno | 
|  |  | 
|  | /.*\.gif/ms | 
|  | borfle\nbib.gif\nno | 
|  |  | 
|  | /.*$/ | 
|  | borfle\nbib.gif\nno | 
|  |  | 
|  | /.*$/m | 
|  | borfle\nbib.gif\nno | 
|  |  | 
|  | /.*$/s | 
|  | borfle\nbib.gif\nno | 
|  |  | 
|  | /.*$/ms | 
|  | borfle\nbib.gif\nno | 
|  |  | 
|  | /.*$/ | 
|  | borfle\nbib.gif\nno\n | 
|  |  | 
|  | /.*$/m | 
|  | borfle\nbib.gif\nno\n | 
|  |  | 
|  | /.*$/s | 
|  | borfle\nbib.gif\nno\n | 
|  |  | 
|  | /.*$/ms | 
|  | borfle\nbib.gif\nno\n | 
|  |  | 
|  | /(.*X|^B)/ | 
|  | abcde\n1234Xyz | 
|  | BarFoo | 
|  | \= Expect no match | 
|  | abcde\nBar | 
|  |  | 
|  | /(.*X|^B)/m | 
|  | abcde\n1234Xyz | 
|  | BarFoo | 
|  | abcde\nBar | 
|  |  | 
|  | /(.*X|^B)/s | 
|  | abcde\n1234Xyz | 
|  | BarFoo | 
|  | \= Expect no match | 
|  | abcde\nBar | 
|  |  | 
|  | /(.*X|^B)/ms | 
|  | abcde\n1234Xyz | 
|  | BarFoo | 
|  | abcde\nBar | 
|  |  | 
|  | /(?s)(.*X|^B)/ | 
|  | abcde\n1234Xyz | 
|  | BarFoo | 
|  | \= Expect no match | 
|  | abcde\nBar | 
|  |  | 
|  | /(?s:.*X|^B)/ | 
|  | abcde\n1234Xyz | 
|  | BarFoo | 
|  | \= Expect no match | 
|  | abcde\nBar | 
|  |  | 
|  | /^.*B/ | 
|  | \= Expect no match | 
|  | abc\nB | 
|  |  | 
|  | /(?s)^.*B/ | 
|  | abc\nB | 
|  |  | 
|  | /(?m)^.*B/ | 
|  | abc\nB | 
|  |  | 
|  | /(?ms)^.*B/ | 
|  | abc\nB | 
|  |  | 
|  | /(?ms)^B/ | 
|  | abc\nB | 
|  |  | 
|  | /(?s)B$/ | 
|  | B\n | 
|  |  | 
|  | /^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/ | 
|  | 123456654321 | 
|  |  | 
|  | /^\d\d\d\d\d\d\d\d\d\d\d\d/ | 
|  | 123456654321 | 
|  |  | 
|  | /^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/ | 
|  | 123456654321 | 
|  |  | 
|  | /^[abc]{12}/ | 
|  | abcabcabcabc | 
|  |  | 
|  | /^[a-c]{12}/ | 
|  | abcabcabcabc | 
|  |  | 
|  | /^(a|b|c){12}/ | 
|  | abcabcabcabc | 
|  |  | 
|  | /^[abcdefghijklmnopqrstuvwxy0123456789]/ | 
|  | n | 
|  | \= Expect no match | 
|  | z | 
|  |  | 
|  | /abcde{0,0}/ | 
|  | abcd | 
|  | \= Expect no match | 
|  | abce | 
|  |  | 
|  | /ab[cd]{0,0}e/ | 
|  | abe | 
|  | \= Expect no match | 
|  | abcde | 
|  |  | 
|  | /ab(c){0,0}d/ | 
|  | abd | 
|  | \= Expect no match | 
|  | abcd | 
|  |  | 
|  | /a(b*)/ | 
|  | a | 
|  | ab | 
|  | abbbb | 
|  | \= Expect no match | 
|  | bbbbb | 
|  |  | 
|  | /ab\d{0}e/ | 
|  | abe | 
|  | \= Expect no match | 
|  | ab1e | 
|  |  | 
|  | /"([^\\"]+|\\.)*"/ | 
|  | the \"quick\" brown fox | 
|  | \"the \\\"quick\\\" brown fox\" | 
|  |  | 
|  | /.*?/g,aftertext | 
|  | abc | 
|  |  | 
|  | /\b/g,aftertext | 
|  | abc | 
|  |  | 
|  | /\b/g,aftertext | 
|  | abc | 
|  |  | 
|  | //g | 
|  | abc | 
|  |  | 
|  | /<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>/is | 
|  | <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> | 
|  |  | 
|  | /a[^a]b/ | 
|  | acb | 
|  | a\nb | 
|  |  | 
|  | /a.b/ | 
|  | acb | 
|  | \= Expect no match | 
|  | a\nb | 
|  |  | 
|  | /a[^a]b/s | 
|  | acb | 
|  | a\nb | 
|  |  | 
|  | /a.b/s | 
|  | acb | 
|  | a\nb | 
|  |  | 
|  | /^(b+?|a){1,2}?c/ | 
|  | bac | 
|  | bbac | 
|  | bbbac | 
|  | bbbbac | 
|  | bbbbbac | 
|  |  | 
|  | /^(b+|a){1,2}?c/ | 
|  | bac | 
|  | bbac | 
|  | bbbac | 
|  | bbbbac | 
|  | bbbbbac | 
|  |  | 
|  | /(?!\A)x/m | 
|  | a\bx\n | 
|  | a\nx\n | 
|  | \= Expect no match | 
|  | x\nb\n | 
|  |  | 
|  | /(A|B)*?CD/ | 
|  | CD | 
|  |  | 
|  | /(A|B)*CD/ | 
|  | CD | 
|  |  | 
|  | /(AB)*?\1/ | 
|  | ABABAB | 
|  |  | 
|  | /(AB)*\1/ | 
|  | ABABAB | 
|  |  | 
|  | /(?<!bar)foo/ | 
|  | foo | 
|  | catfood | 
|  | arfootle | 
|  | rfoosh | 
|  | \= Expect no match | 
|  | barfoo | 
|  | towbarfoo | 
|  |  | 
|  | /\w{3}(?<!bar)foo/ | 
|  | catfood | 
|  | \= Expect no match | 
|  | foo | 
|  | barfoo | 
|  | towbarfoo | 
|  |  | 
|  | /(?<=(foo)a)bar/ | 
|  | fooabar | 
|  | \= Expect no match | 
|  | bar | 
|  | foobbar | 
|  |  | 
|  | /\Aabc\z/m | 
|  | abc | 
|  | \= Expect no match | 
|  | abc\n | 
|  | qqq\nabc | 
|  | abc\nzzz | 
|  | qqq\nabc\nzzz | 
|  |  | 
|  | /(?>.*\/)foo/ | 
|  | /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo | 
|  | \= Expect no match | 
|  | /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/ | 
|  |  | 
|  | /(?>(\.\d\d[1-9]?))\d+/ | 
|  | 1.230003938 | 
|  | 1.875000282 | 
|  | \= Expect no match | 
|  | 1.235 | 
|  |  | 
|  | /^((?>\w+)|(?>\s+))*$/ | 
|  | now is the time for all good men to come to the aid of the party | 
|  | \= Expect no match | 
|  | this is not a line with only words and spaces! | 
|  |  | 
|  | /(\d+)(\w)/ | 
|  | 12345a | 
|  | 12345+ | 
|  |  | 
|  | /((?>\d+))(\w)/ | 
|  | 12345a | 
|  | \= Expect no match | 
|  | 12345+ | 
|  |  | 
|  | /(?>a+)b/ | 
|  | aaab | 
|  |  | 
|  | /((?>a+)b)/ | 
|  | aaab | 
|  |  | 
|  | /(?>(a+))b/ | 
|  | aaab | 
|  |  | 
|  | /(?>b)+/ | 
|  | aaabbbccc | 
|  |  | 
|  | /(?>a+|b+|c+)*c/ | 
|  | aaabbbbccccd | 
|  |  | 
|  | /((?>[^()]+)|\([^()]*\))+/ | 
|  | ((abc(ade)ufh()()x | 
|  |  | 
|  | /\(((?>[^()]+)|\([^()]+\))+\)/ | 
|  | (abc) | 
|  | (abc(def)xyz) | 
|  | \= Expect no match | 
|  | ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 
|  |  | 
|  | /a(?-i)b/i | 
|  | ab | 
|  | Ab | 
|  | \= Expect no match | 
|  | aB | 
|  | AB | 
|  |  | 
|  | /(a (?x)b c)d e/ | 
|  | a bcd e | 
|  | \= Expect no match | 
|  | a b cd e | 
|  | abcd e | 
|  | a bcde | 
|  |  | 
|  | /(a b(?x)c d (?-x)e f)/ | 
|  | a bcde f | 
|  | \= Expect no match | 
|  | abcdef | 
|  |  | 
|  | /(a(?i)b)c/ | 
|  | abc | 
|  | aBc | 
|  | \= Expect no match | 
|  | abC | 
|  | aBC | 
|  | Abc | 
|  | ABc | 
|  | ABC | 
|  | AbC | 
|  |  | 
|  | /a(?i:b)c/ | 
|  | abc | 
|  | aBc | 
|  | \= Expect no match | 
|  | ABC | 
|  | abC | 
|  | aBC | 
|  |  | 
|  | /a(?i:b)*c/ | 
|  | aBc | 
|  | aBBc | 
|  | \= Expect no match | 
|  | aBC | 
|  | aBBC | 
|  |  | 
|  | /a(?=b(?i)c)\w\wd/ | 
|  | abcd | 
|  | abCd | 
|  | \= Expect no match | 
|  | aBCd | 
|  | abcD | 
|  |  | 
|  | /(?s-i:more.*than).*million/i | 
|  | more than million | 
|  | more than MILLION | 
|  | more \n than Million | 
|  | \= Expect no match | 
|  | MORE THAN MILLION | 
|  | more \n than \n million | 
|  |  | 
|  | /(?:(?s-i)more.*than).*million/i | 
|  | more than million | 
|  | more than MILLION | 
|  | more \n than Million | 
|  | \= Expect no match | 
|  | MORE THAN MILLION | 
|  | more \n than \n million | 
|  |  | 
|  | /(?>a(?i)b+)+c/ | 
|  | abc | 
|  | aBbc | 
|  | aBBc | 
|  | \= Expect no match | 
|  | Abc | 
|  | abAb | 
|  | abbC | 
|  |  | 
|  | /(?=a(?i)b)\w\wc/ | 
|  | abc | 
|  | aBc | 
|  | \= Expect no match | 
|  | Ab | 
|  | abC | 
|  | aBC | 
|  |  | 
|  | /(?<=a(?i)b)(\w\w)c/ | 
|  | abxxc | 
|  | aBxxc | 
|  | \= Expect no match | 
|  | Abxxc | 
|  | ABxxc | 
|  | abxxC | 
|  |  | 
|  | /(?:(a)|b)(?(1)A|B)/ | 
|  | aA | 
|  | bB | 
|  | \= Expect no match | 
|  | aB | 
|  | bA | 
|  |  | 
|  | /^(a)?(?(1)a|b)+$/ | 
|  | aa | 
|  | b | 
|  | bb | 
|  | \= Expect no match | 
|  | ab | 
|  |  | 
|  | # Perl gets this next one wrong if the pattern ends with $; in that case it | 
|  | # fails to match "12". | 
|  |  | 
|  | /^(?(?=abc)\w{3}:|\d\d)/ | 
|  | abc: | 
|  | 12 | 
|  | 123 | 
|  | \= Expect no match | 
|  | xyz | 
|  |  | 
|  | /^(?(?!abc)\d\d|\w{3}:)$/ | 
|  | abc: | 
|  | 12 | 
|  | \= Expect no match | 
|  | 123 | 
|  | xyz | 
|  |  | 
|  | /(?(?<=foo)bar|cat)/ | 
|  | foobar | 
|  | cat | 
|  | fcat | 
|  | focat | 
|  | \= Expect no match | 
|  | foocat | 
|  |  | 
|  | /(?(?<!foo)cat|bar)/ | 
|  | foobar | 
|  | cat | 
|  | fcat | 
|  | focat | 
|  | \= Expect no match | 
|  | foocat | 
|  |  | 
|  | /( \( )? [^()]+ (?(1) \) |) /x | 
|  | abcd | 
|  | (abcd) | 
|  | the quick (abcd) fox | 
|  | (abcd | 
|  |  | 
|  | /( \( )? [^()]+ (?(1) \) ) /x | 
|  | abcd | 
|  | (abcd) | 
|  | the quick (abcd) fox | 
|  | (abcd | 
|  |  | 
|  | /^(?(2)a|(1)(2))+$/ | 
|  | 12 | 
|  | 12a | 
|  | 12aa | 
|  | \= Expect no match | 
|  | 1234 | 
|  |  | 
|  | /((?i)blah)\s+\1/ | 
|  | blah blah | 
|  | BLAH BLAH | 
|  | Blah Blah | 
|  | blaH blaH | 
|  | \= Expect no match | 
|  | blah BLAH | 
|  | Blah blah | 
|  | blaH blah | 
|  |  | 
|  | /((?i)blah)\s+(?i:\1)/ | 
|  | blah blah | 
|  | BLAH BLAH | 
|  | Blah Blah | 
|  | blaH blaH | 
|  | blah BLAH | 
|  | Blah blah | 
|  | blaH blah | 
|  |  | 
|  | /((?i)blah)\s+(?m)A(?i:\1)/ | 
|  | blah ABLAH | 
|  | \= Expect no match | 
|  | blah aBLAH | 
|  |  | 
|  | /(?>a*)*/ | 
|  | a | 
|  | aa | 
|  | aaaa | 
|  |  | 
|  | /(abc|)+/ | 
|  | abc | 
|  | abcabc | 
|  | abcabcabc | 
|  | xyz | 
|  |  | 
|  | /([a]*)*/ | 
|  | a | 
|  | aaaaa | 
|  |  | 
|  | /([ab]*)*/ | 
|  | a | 
|  | b | 
|  | ababab | 
|  | aaaabcde | 
|  | bbbb | 
|  |  | 
|  | /([^a]*)*/ | 
|  | b | 
|  | bbbb | 
|  | aaa | 
|  |  | 
|  | /([^ab]*)*/ | 
|  | cccc | 
|  | abab | 
|  |  | 
|  | /([a]*?)*/ | 
|  | a | 
|  | aaaa | 
|  |  | 
|  | /([ab]*?)*/ | 
|  | a | 
|  | b | 
|  | abab | 
|  | baba | 
|  |  | 
|  | /([^a]*?)*/ | 
|  | b | 
|  | bbbb | 
|  | aaa | 
|  |  | 
|  | /([^ab]*?)*/ | 
|  | c | 
|  | cccc | 
|  | baba | 
|  |  | 
|  | /(?>a*)*/ | 
|  | a | 
|  | aaabcde | 
|  |  | 
|  | /((?>a*))*/ | 
|  | aaaaa | 
|  | aabbaa | 
|  |  | 
|  | /((?>a*?))*/ | 
|  | aaaaa | 
|  | aabbaa | 
|  |  | 
|  | /(?(?=[^a-z]+[a-z])  \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} ) /x | 
|  | 12-sep-98 | 
|  | 12-09-98 | 
|  | \= Expect no match | 
|  | sep-12-98 | 
|  |  | 
|  | /(?<=(foo))bar\1/ | 
|  | foobarfoo | 
|  | foobarfootling | 
|  | \= Expect no match | 
|  | foobar | 
|  | barfoo | 
|  |  | 
|  | /(?i:saturday|sunday)/ | 
|  | saturday | 
|  | sunday | 
|  | Saturday | 
|  | Sunday | 
|  | SATURDAY | 
|  | SUNDAY | 
|  | SunDay | 
|  |  | 
|  | /(a(?i)bc|BB)x/ | 
|  | abcx | 
|  | aBCx | 
|  | bbx | 
|  | BBx | 
|  | \= Expect no match | 
|  | abcX | 
|  | aBCX | 
|  | bbX | 
|  | BBX | 
|  |  | 
|  | /^([ab](?i)[cd]|[ef])/ | 
|  | ac | 
|  | aC | 
|  | bD | 
|  | elephant | 
|  | Europe | 
|  | frog | 
|  | France | 
|  | \= Expect no match | 
|  | Africa | 
|  |  | 
|  | /^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/ | 
|  | ab | 
|  | aBd | 
|  | xy | 
|  | xY | 
|  | zebra | 
|  | Zambesi | 
|  | \= Expect no match | 
|  | aCD | 
|  | XY | 
|  |  | 
|  | /(?<=foo\n)^bar/m | 
|  | foo\nbar | 
|  | \= Expect no match | 
|  | bar | 
|  | baz\nbar | 
|  |  | 
|  | /(?<=(?<!foo)bar)baz/ | 
|  | barbaz | 
|  | barbarbaz | 
|  | koobarbaz | 
|  | \= Expect no match | 
|  | baz | 
|  | foobarbaz | 
|  |  | 
|  | # The cases of aaaa and aaaaaa are missed out below because Perl does things | 
|  | # differently. We know that odd, and maybe incorrect, things happen with | 
|  | # recursive references in Perl, as far as 5.11.3 - see some stuff in test #2. | 
|  |  | 
|  | /^(a\1?){4}$/ | 
|  | aaaaa | 
|  | aaaaaaa | 
|  | aaaaaaaaaa | 
|  | \= Expect no match | 
|  | a | 
|  | aa | 
|  | aaa | 
|  | aaaaaaaa | 
|  | aaaaaaaaa | 
|  | aaaaaaaaaaa | 
|  | aaaaaaaaaaaa | 
|  | aaaaaaaaaaaaa | 
|  | aaaaaaaaaaaaaa | 
|  | aaaaaaaaaaaaaaa | 
|  | aaaaaaaaaaaaaaaa | 
|  |  | 
|  | /^(a\1?)(a\1?)(a\2?)(a\3?)$/ | 
|  | aaaa | 
|  | aaaaa | 
|  | aaaaaa | 
|  | aaaaaaa | 
|  | aaaaaaaaaa | 
|  | \= Expect no match | 
|  | a | 
|  | aa | 
|  | aaa | 
|  | aaaaaaaa | 
|  | aaaaaaaaa | 
|  | aaaaaaaaaaa | 
|  | aaaaaaaaaaaa | 
|  | aaaaaaaaaaaaa | 
|  | aaaaaaaaaaaaaa | 
|  | aaaaaaaaaaaaaaa | 
|  | aaaaaaaaaaaaaaaa | 
|  |  | 
|  | # 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. | 
|  |  | 
|  | /abc/ | 
|  | abc | 
|  | xabcy | 
|  | ababc | 
|  | \= Expect no match | 
|  | xbc | 
|  | axc | 
|  | abx | 
|  |  | 
|  | /ab*c/ | 
|  | abc | 
|  |  | 
|  | /ab*bc/ | 
|  | abc | 
|  | abbc | 
|  | abbbbc | 
|  |  | 
|  | /.{1}/ | 
|  | abbbbc | 
|  |  | 
|  | /.{3,4}/ | 
|  | abbbbc | 
|  |  | 
|  | /ab{0,}bc/ | 
|  | abbbbc | 
|  |  | 
|  | /ab+bc/ | 
|  | abbc | 
|  | \= Expect no match | 
|  | abc | 
|  | abq | 
|  |  | 
|  | /ab{1,}bc/ | 
|  |  | 
|  | /ab+bc/ | 
|  | abbbbc | 
|  |  | 
|  | /ab{1,}bc/ | 
|  | abbbbc | 
|  |  | 
|  | /ab{1,3}bc/ | 
|  | abbbbc | 
|  |  | 
|  | /ab{3,4}bc/ | 
|  | abbbbc | 
|  |  | 
|  | /ab{4,5}bc/ | 
|  | \= Expect no match | 
|  | abq | 
|  | abbbbc | 
|  |  | 
|  | /ab?bc/ | 
|  | abbc | 
|  | abc | 
|  |  | 
|  | /ab{0,1}bc/ | 
|  | abc | 
|  |  | 
|  | /ab?bc/ | 
|  |  | 
|  | /ab?c/ | 
|  | abc | 
|  |  | 
|  | /ab{0,1}c/ | 
|  | abc | 
|  |  | 
|  | /^abc$/ | 
|  | abc | 
|  | \= Expect no match | 
|  | abbbbc | 
|  | abcc | 
|  |  | 
|  | /^abc/ | 
|  | abcc | 
|  |  | 
|  | /^abc$/ | 
|  |  | 
|  | /abc$/ | 
|  | aabc | 
|  | \= Expect no match | 
|  | aabcd | 
|  |  | 
|  | /^/ | 
|  | abc | 
|  |  | 
|  | /$/ | 
|  | abc | 
|  |  | 
|  | /a.c/ | 
|  | abc | 
|  | axc | 
|  |  | 
|  | /a.*c/ | 
|  | axyzc | 
|  |  | 
|  | /a[bc]d/ | 
|  | abd | 
|  | \= Expect no match | 
|  | axyzd | 
|  | abc | 
|  |  | 
|  | /a[b-d]e/ | 
|  | ace | 
|  |  | 
|  | /a[b-d]/ | 
|  | aac | 
|  |  | 
|  | /a[-b]/ | 
|  | a- | 
|  |  | 
|  | /a[b-]/ | 
|  | a- | 
|  |  | 
|  | /a]/ | 
|  | a] | 
|  |  | 
|  | /a[]]b/ | 
|  | a]b | 
|  |  | 
|  | /a[^bc]d/ | 
|  | aed | 
|  | \= Expect no match | 
|  | abd | 
|  | abd | 
|  |  | 
|  | /a[^-b]c/ | 
|  | adc | 
|  |  | 
|  | /a[^]b]c/ | 
|  | adc | 
|  | a-c | 
|  | \= Expect no match | 
|  | a]c | 
|  |  | 
|  | /\ba\b/ | 
|  | a- | 
|  | -a | 
|  | -a- | 
|  |  | 
|  | /\by\b/ | 
|  | \= Expect no match | 
|  | xy | 
|  | yz | 
|  | xyz | 
|  |  | 
|  | /\Ba\B/ | 
|  | \= Expect no match | 
|  | a- | 
|  | -a | 
|  | -a- | 
|  |  | 
|  | /\By\b/ | 
|  | xy | 
|  |  | 
|  | /\by\B/ | 
|  | yz | 
|  |  | 
|  | /\By\B/ | 
|  | xyz | 
|  |  | 
|  | /\w/ | 
|  | a | 
|  |  | 
|  | /\W/ | 
|  | - | 
|  | \= Expect no match | 
|  | a | 
|  |  | 
|  | /a\sb/ | 
|  | a b | 
|  |  | 
|  | /a\Sb/ | 
|  | a-b | 
|  | \= Expect no match | 
|  | a b | 
|  |  | 
|  | /\d/ | 
|  | 1 | 
|  |  | 
|  | /\D/ | 
|  | - | 
|  | \= Expect no match | 
|  | 1 | 
|  |  | 
|  | /[\w]/ | 
|  | a | 
|  |  | 
|  | /[\W]/ | 
|  | - | 
|  | \= Expect no match | 
|  | a | 
|  |  | 
|  | /a[\s]b/ | 
|  | a b | 
|  |  | 
|  | /a[\S]b/ | 
|  | a-b | 
|  | \= Expect no match | 
|  | a b | 
|  |  | 
|  | /[\d]/ | 
|  | 1 | 
|  |  | 
|  | /[\D]/ | 
|  | - | 
|  | \= Expect no match | 
|  | 1 | 
|  |  | 
|  | /ab|cd/ | 
|  | abc | 
|  | abcd | 
|  |  | 
|  | /()ef/ | 
|  | def | 
|  |  | 
|  | /$b/ | 
|  |  | 
|  | /a\(b/ | 
|  | a(b | 
|  |  | 
|  | /a\(*b/ | 
|  | ab | 
|  | a((b | 
|  |  | 
|  | /a\\b/ | 
|  | a\\b | 
|  |  | 
|  | /((a))/ | 
|  | abc | 
|  |  | 
|  | /(a)b(c)/ | 
|  | abc | 
|  |  | 
|  | /a+b+c/ | 
|  | aabbabc | 
|  |  | 
|  | /a{1,}b{1,}c/ | 
|  | aabbabc | 
|  |  | 
|  | /a.+?c/ | 
|  | abcabc | 
|  |  | 
|  | /(a+|b)*/ | 
|  | ab | 
|  |  | 
|  | /(a+|b){0,}/ | 
|  | ab | 
|  |  | 
|  | /(a+|b)+/ | 
|  | ab | 
|  |  | 
|  | /(a+|b){1,}/ | 
|  | ab | 
|  |  | 
|  | /(a+|b)?/ | 
|  | ab | 
|  |  | 
|  | /(a+|b){0,1}/ | 
|  | ab | 
|  |  | 
|  | /[^ab]*/ | 
|  | cde | 
|  |  | 
|  | /abc/ | 
|  | \= Expect no match | 
|  | b | 
|  |  | 
|  | /a*/ | 
|  | \ | 
|  |  | 
|  | /([abc])*d/ | 
|  | abbbcd | 
|  |  | 
|  | /([abc])*bcd/ | 
|  | abcd | 
|  |  | 
|  | /a|b|c|d|e/ | 
|  | e | 
|  |  | 
|  | /(a|b|c|d|e)f/ | 
|  | ef | 
|  |  | 
|  | /abcd*efg/ | 
|  | abcdefg | 
|  |  | 
|  | /ab*/ | 
|  | xabyabbbz | 
|  | xayabbbz | 
|  |  | 
|  | /(ab|cd)e/ | 
|  | abcde | 
|  |  | 
|  | /[abhgefdc]ij/ | 
|  | hij | 
|  |  | 
|  | /^(ab|cd)e/ | 
|  |  | 
|  | /(abc|)ef/ | 
|  | abcdef | 
|  |  | 
|  | /(a|b)c*d/ | 
|  | abcd | 
|  |  | 
|  | /(ab|ab*)bc/ | 
|  | abc | 
|  |  | 
|  | /a([bc]*)c*/ | 
|  | abc | 
|  |  | 
|  | /a([bc]*)(c*d)/ | 
|  | abcd | 
|  |  | 
|  | /a([bc]+)(c*d)/ | 
|  | abcd | 
|  |  | 
|  | /a([bc]*)(c+d)/ | 
|  | abcd | 
|  |  | 
|  | /a[bcd]*dcdcde/ | 
|  | adcdcde | 
|  |  | 
|  | /a[bcd]+dcdcde/ | 
|  | \= Expect no match | 
|  | abcde | 
|  | adcdcde | 
|  |  | 
|  | /(ab|a)b*c/ | 
|  | abc | 
|  |  | 
|  | /((a)(b)c)(d)/ | 
|  | abcd | 
|  |  | 
|  | /[a-zA-Z_][a-zA-Z0-9_]*/ | 
|  | alpha | 
|  |  | 
|  | /^a(bc+|b[eh])g|.h$/ | 
|  | abh | 
|  |  | 
|  | /(bc+d$|ef*g.|h?i(j|k))/ | 
|  | effgz | 
|  | ij | 
|  | reffgz | 
|  | \= Expect no match | 
|  | effg | 
|  | bcdd | 
|  |  | 
|  | /((((((((((a))))))))))/ | 
|  | a | 
|  |  | 
|  | /((((((((((a))))))))))\10/ | 
|  | aa | 
|  |  | 
|  | /(((((((((a)))))))))/ | 
|  | a | 
|  |  | 
|  | /multiple words of text/ | 
|  | \= Expect no match | 
|  | aa | 
|  | uh-uh | 
|  |  | 
|  | /multiple words/ | 
|  | multiple words, yeah | 
|  |  | 
|  | /(.*)c(.*)/ | 
|  | abcde | 
|  |  | 
|  | /\((.*), (.*)\)/ | 
|  | (a, b) | 
|  |  | 
|  | /[k]/ | 
|  |  | 
|  | /abcd/ | 
|  | abcd | 
|  |  | 
|  | /a(bc)d/ | 
|  | abcd | 
|  |  | 
|  | /a[-]?c/ | 
|  | ac | 
|  |  | 
|  | /(abc)\1/ | 
|  | abcabc | 
|  |  | 
|  | /([a-c]*)\1/ | 
|  | abcabc | 
|  |  | 
|  | /(a)|\1/ | 
|  | a | 
|  | ab | 
|  | \= Expect no match | 
|  | x | 
|  |  | 
|  | /(([a-c])b*?\2)*/ | 
|  | ababbbcbc | 
|  |  | 
|  | /(([a-c])b*?\2){3}/ | 
|  | ababbbcbc | 
|  |  | 
|  | /((\3|b)\2(a)x)+/ | 
|  | aaaxabaxbaaxbbax | 
|  |  | 
|  | /((\3|b)\2(a)){2,}/ | 
|  | bbaababbabaaaaabbaaaabba | 
|  |  | 
|  | /abc/i | 
|  | ABC | 
|  | XABCY | 
|  | ABABC | 
|  | \= Expect no match | 
|  | aaxabxbaxbbx | 
|  | XBC | 
|  | AXC | 
|  | ABX | 
|  |  | 
|  | /ab*c/i | 
|  | ABC | 
|  |  | 
|  | /ab*bc/i | 
|  | ABC | 
|  | ABBC | 
|  |  | 
|  | /ab*?bc/i | 
|  | ABBBBC | 
|  |  | 
|  | /ab{0,}?bc/i | 
|  | ABBBBC | 
|  |  | 
|  | /ab+?bc/i | 
|  | ABBC | 
|  |  | 
|  | /ab+bc/i | 
|  | \= Expect no match | 
|  | ABC | 
|  | ABQ | 
|  |  | 
|  | /ab{1,}bc/i | 
|  |  | 
|  | /ab+bc/i | 
|  | ABBBBC | 
|  |  | 
|  | /ab{1,}?bc/i | 
|  | ABBBBC | 
|  |  | 
|  | /ab{1,3}?bc/i | 
|  | ABBBBC | 
|  |  | 
|  | /ab{3,4}?bc/i | 
|  | ABBBBC | 
|  |  | 
|  | /ab{4,5}?bc/i | 
|  | \= Expect no match | 
|  | ABQ | 
|  | ABBBBC | 
|  |  | 
|  | /ab??bc/i | 
|  | ABBC | 
|  | ABC | 
|  |  | 
|  | /ab{0,1}?bc/i | 
|  | ABC | 
|  |  | 
|  | /ab??bc/i | 
|  |  | 
|  | /ab??c/i | 
|  | ABC | 
|  |  | 
|  | /x?(x|b)/ | 
|  | xb | 
|  |  | 
|  | /x??(x|b)/ | 
|  | x | 
|  |  | 
|  | /x?(x|b)/i | 
|  | Xb | 
|  |  | 
|  | /x??(x|b)/i | 
|  | X | 
|  |  | 
|  | /x{,2}(x|b)/ | 
|  | xb | 
|  |  | 
|  | /x{,2}?(x|b)/ | 
|  | x | 
|  |  | 
|  | /x{,2}(x|b)/i | 
|  | Xb | 
|  |  | 
|  | /x{,2}?(x|b)/i | 
|  | X | 
|  |  | 
|  | /[^b]?([^b]|b)/ | 
|  | xb | 
|  |  | 
|  | /[^b]??([^b]|b)/ | 
|  | x | 
|  |  | 
|  | /[^b]?([^b]|b)/i | 
|  | Xb | 
|  |  | 
|  | /[^b]??([^b]|b)/i | 
|  | X | 
|  |  | 
|  | /[^b]{,2}([^b]|b)/ | 
|  | xb | 
|  |  | 
|  | /[^b]{,2}?([^b]|b)/ | 
|  | x | 
|  |  | 
|  | /[^b]{,2}([^b]|b)/i | 
|  | Xb | 
|  |  | 
|  | /[^b]{,2}?([^b]|b)/i | 
|  | X | 
|  |  | 
|  | /ab{0,1}?c/i | 
|  | ABC | 
|  |  | 
|  | /^abc$/i | 
|  | ABC | 
|  | \= Expect no match | 
|  | ABBBBC | 
|  | ABCC | 
|  |  | 
|  | /^abc/i | 
|  | ABCC | 
|  |  | 
|  | /^abc$/i | 
|  |  | 
|  | /abc$/i | 
|  | AABC | 
|  |  | 
|  | /^/i | 
|  | ABC | 
|  |  | 
|  | /$/i | 
|  | ABC | 
|  |  | 
|  | /a.c/i | 
|  | ABC | 
|  | AXC | 
|  |  | 
|  | /a.*?c/i | 
|  | AXYZC | 
|  |  | 
|  | /a.*c/i | 
|  | AABC | 
|  | \= Expect no match | 
|  | AXYZD | 
|  |  | 
|  | /a[bc]d/i | 
|  | ABD | 
|  |  | 
|  | /a[b-d]e/i | 
|  | ACE | 
|  | \= Expect no match | 
|  | ABC | 
|  | ABD | 
|  |  | 
|  | /a[b-d]/i | 
|  | AAC | 
|  |  | 
|  | /a[-b]/i | 
|  | A- | 
|  |  | 
|  | /a[b-]/i | 
|  | A- | 
|  |  | 
|  | /a]/i | 
|  | A] | 
|  |  | 
|  | /a[]]b/i | 
|  | A]B | 
|  |  | 
|  | /a[^bc]d/i | 
|  | AED | 
|  |  | 
|  | /a[^-b]c/i | 
|  | ADC | 
|  | \= Expect no match | 
|  | ABD | 
|  | A-C | 
|  |  | 
|  | /a[^]b]c/i | 
|  | ADC | 
|  |  | 
|  | /ab|cd/i | 
|  | ABC | 
|  | ABCD | 
|  |  | 
|  | /()ef/i | 
|  | DEF | 
|  |  | 
|  | /$b/i | 
|  | \= Expect no match | 
|  | A]C | 
|  | B | 
|  |  | 
|  | /a\(b/i | 
|  | A(B | 
|  |  | 
|  | /a\(*b/i | 
|  | AB | 
|  | A((B | 
|  |  | 
|  | /a\\b/i | 
|  | A\\b | 
|  | a\\B | 
|  |  | 
|  | /((a))/i | 
|  | ABC | 
|  |  | 
|  | /(a)b(c)/i | 
|  | ABC | 
|  |  | 
|  | /a+b+c/i | 
|  | AABBABC | 
|  |  | 
|  | /a{1,}b{1,}c/i | 
|  | AABBABC | 
|  |  | 
|  | /a.+?c/i | 
|  | ABCABC | 
|  |  | 
|  | /a.*?c/i | 
|  | ABCABC | 
|  |  | 
|  | /a.{0,5}?c/i | 
|  | ABCABC | 
|  |  | 
|  | /(a+|b)*/i | 
|  | AB | 
|  |  | 
|  | /(a+|b){0,}/i | 
|  | AB | 
|  |  | 
|  | /(a+|b)+/i | 
|  | AB | 
|  |  | 
|  | /(a+|b){1,}/i | 
|  | AB | 
|  |  | 
|  | /(a+|b)?/i | 
|  | AB | 
|  |  | 
|  | /(a+|b){0,1}/i | 
|  | AB | 
|  |  | 
|  | /(a+|b){0,1}?/i | 
|  | AB | 
|  |  | 
|  | /[^ab]*/i | 
|  | CDE | 
|  |  | 
|  | /([abc])*d/i | 
|  | ABBBCD | 
|  |  | 
|  | /([abc])*bcd/i | 
|  | ABCD | 
|  |  | 
|  | /a|b|c|d|e/i | 
|  | E | 
|  |  | 
|  | /(a|b|c|d|e)f/i | 
|  | EF | 
|  |  | 
|  | /abcd*efg/i | 
|  | ABCDEFG | 
|  |  | 
|  | /ab*/i | 
|  | XABYABBBZ | 
|  | XAYABBBZ | 
|  |  | 
|  | /(ab|cd)e/i | 
|  | ABCDE | 
|  |  | 
|  | /[abhgefdc]ij/i | 
|  | HIJ | 
|  |  | 
|  | /^(ab|cd)e/i | 
|  | \= Expect no match | 
|  | ABCDE | 
|  |  | 
|  | /(abc|)ef/i | 
|  | ABCDEF | 
|  |  | 
|  | /(a|b)c*d/i | 
|  | ABCD | 
|  |  | 
|  | /(ab|ab*)bc/i | 
|  | ABC | 
|  |  | 
|  | /a([bc]*)c*/i | 
|  | ABC | 
|  |  | 
|  | /a([bc]*)(c*d)/i | 
|  | ABCD | 
|  |  | 
|  | /a([bc]+)(c*d)/i | 
|  | ABCD | 
|  |  | 
|  | /a([bc]*)(c+d)/i | 
|  | ABCD | 
|  |  | 
|  | /a[bcd]*dcdcde/i | 
|  | ADCDCDE | 
|  |  | 
|  | /a[bcd]+dcdcde/i | 
|  |  | 
|  | /(ab|a)b*c/i | 
|  | ABC | 
|  |  | 
|  | /((a)(b)c)(d)/i | 
|  | ABCD | 
|  |  | 
|  | /[a-zA-Z_][a-zA-Z0-9_]*/i | 
|  | ALPHA | 
|  |  | 
|  | /^a(bc+|b[eh])g|.h$/i | 
|  | ABH | 
|  |  | 
|  | /(bc+d$|ef*g.|h?i(j|k))/i | 
|  | EFFGZ | 
|  | IJ | 
|  | REFFGZ | 
|  | \= Expect no match | 
|  | ADCDCDE | 
|  | EFFG | 
|  | BCDD | 
|  |  | 
|  | /((((((((((a))))))))))/i | 
|  | A | 
|  |  | 
|  | /((((((((((a))))))))))\10/i | 
|  | AA | 
|  |  | 
|  | /(((((((((a)))))))))/i | 
|  | A | 
|  |  | 
|  | /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i | 
|  | A | 
|  |  | 
|  | /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i | 
|  | C | 
|  |  | 
|  | /multiple words of text/i | 
|  | \= Expect no match | 
|  | AA | 
|  | UH-UH | 
|  |  | 
|  | /multiple words/i | 
|  | MULTIPLE WORDS, YEAH | 
|  |  | 
|  | /(.*)c(.*)/i | 
|  | ABCDE | 
|  |  | 
|  | /\((.*), (.*)\)/i | 
|  | (A, B) | 
|  |  | 
|  | /[k]/i | 
|  |  | 
|  | /abcd/i | 
|  | ABCD | 
|  |  | 
|  | /a(bc)d/i | 
|  | ABCD | 
|  |  | 
|  | /a[-]?c/i | 
|  | AC | 
|  |  | 
|  | /(abc)\1/i | 
|  | ABCABC | 
|  |  | 
|  | /([a-c]*)\1/i | 
|  | ABCABC | 
|  |  | 
|  | /a(?!b)./ | 
|  | abad | 
|  |  | 
|  | /a(?=d)./ | 
|  | abad | 
|  |  | 
|  | /a(?=c|d)./ | 
|  | abad | 
|  |  | 
|  | /a(?:b|c|d)(.)/ | 
|  | ace | 
|  |  | 
|  | /a(?:b|c|d)*(.)/ | 
|  | ace | 
|  |  | 
|  | /a(?:b|c|d)+?(.)/ | 
|  | ace | 
|  | acdbcdbe | 
|  |  | 
|  | /a(?:b|c|d)+(.)/ | 
|  | acdbcdbe | 
|  |  | 
|  | /a(?:b|c|d){2}(.)/ | 
|  | acdbcdbe | 
|  |  | 
|  | /a(?:b|c|d){4,5}(.)/ | 
|  | acdbcdbe | 
|  |  | 
|  | /a(?:b|c|d){4,5}?(.)/ | 
|  | acdbcdbe | 
|  |  | 
|  | /a(?:b|c|d){6,7}(.)/ | 
|  | acdbcdbe | 
|  |  | 
|  | /a(?:b|c|d){6,7}?(.)/ | 
|  | acdbcdbe | 
|  |  | 
|  | /a(?:b|c|d){5,6}(.)/ | 
|  | acdbcdbe | 
|  |  | 
|  | /a(?:b|c|d){5,6}?(.)/ | 
|  | acdbcdbe | 
|  |  | 
|  | /a(?:b|c|d){5,7}(.)/ | 
|  | acdbcdbe | 
|  |  | 
|  | /a(?:b|c|d){5,7}?(.)/ | 
|  | acdbcdbe | 
|  |  | 
|  | /a(?:b|(c|e){1,2}?|d)+?(.)/ | 
|  | ace | 
|  |  | 
|  | /^(.+)?B/ | 
|  | AB | 
|  |  | 
|  | /^([^a-z])|(\^)$/ | 
|  | . | 
|  |  | 
|  | /^[<>]&/ | 
|  | <&OUT | 
|  |  | 
|  | /^(a\1?){4}$/ | 
|  | aaaaaaaaaa | 
|  | \= Expect no match | 
|  | AB | 
|  | aaaaaaaaa | 
|  | aaaaaaaaaaa | 
|  |  | 
|  | /^(a(?(1)\1)){4}$/ | 
|  | aaaaaaaaaa | 
|  | \= Expect no match | 
|  | aaaaaaaaa | 
|  | aaaaaaaaaaa | 
|  |  | 
|  | /(?<=a)b/ | 
|  | ab | 
|  | \= Expect no match | 
|  | cb | 
|  | b | 
|  |  | 
|  | /(?<!c)b/ | 
|  | ab | 
|  | b | 
|  | b | 
|  |  | 
|  | /(?:..)*a/ | 
|  | aba | 
|  |  | 
|  | /(?:..)*?a/ | 
|  | aba | 
|  |  | 
|  | /^(?:b|a(?=(.)))*\1/ | 
|  | abc | 
|  |  | 
|  | /^(){3,5}/ | 
|  | abc | 
|  |  | 
|  | /^(a+)*ax/ | 
|  | aax | 
|  |  | 
|  | /^((a|b)+)*ax/ | 
|  | aax | 
|  |  | 
|  | /^((a|bc)+)*ax/ | 
|  | aax | 
|  |  | 
|  | /(a|x)*ab/ | 
|  | cab | 
|  |  | 
|  | /(a)*ab/ | 
|  | cab | 
|  |  | 
|  | /(?:(?i)a)b/ | 
|  | ab | 
|  |  | 
|  | /((?i)a)b/ | 
|  | ab | 
|  |  | 
|  | /(?:(?i)a)b/ | 
|  | Ab | 
|  |  | 
|  | /((?i)a)b/ | 
|  | Ab | 
|  |  | 
|  | /(?:(?i)a)b/ | 
|  | \= Expect no match | 
|  | cb | 
|  | aB | 
|  |  | 
|  | /((?i)a)b/ | 
|  |  | 
|  | /(?i:a)b/ | 
|  | ab | 
|  |  | 
|  | /((?i:a))b/ | 
|  | ab | 
|  |  | 
|  | /(?i:a)b/ | 
|  | Ab | 
|  |  | 
|  | /((?i:a))b/ | 
|  | Ab | 
|  |  | 
|  | /(?i:a)b/ | 
|  | \= Expect no match | 
|  | aB | 
|  | aB | 
|  |  | 
|  | /((?i:a))b/ | 
|  |  | 
|  | /(?:(?-i)a)b/i | 
|  | ab | 
|  |  | 
|  | /((?-i)a)b/i | 
|  | ab | 
|  |  | 
|  | /(?:(?-i)a)b/i | 
|  | aB | 
|  |  | 
|  | /((?-i)a)b/i | 
|  | aB | 
|  |  | 
|  | /(?:(?-i)a)b/i | 
|  | aB | 
|  | \= Expect no match | 
|  | Ab | 
|  | AB | 
|  |  | 
|  | /(?-i:a)b/i | 
|  | ab | 
|  |  | 
|  | /((?-i:a))b/i | 
|  | ab | 
|  |  | 
|  | /(?-i:a)b/i | 
|  | aB | 
|  |  | 
|  | /((?-i:a))b/i | 
|  | aB | 
|  |  | 
|  | /(?-i:a)b/i | 
|  | \= Expect no match | 
|  | AB | 
|  | Ab | 
|  |  | 
|  | /((?-i:a))b/i | 
|  |  | 
|  | /(?-i:a)b/i | 
|  | aB | 
|  |  | 
|  | /((?-i:a))b/i | 
|  | aB | 
|  |  | 
|  | /(?-i:a)b/i | 
|  | \= Expect no match | 
|  | Ab | 
|  | AB | 
|  |  | 
|  | /((?-i:a))b/i | 
|  |  | 
|  | /((?-i:a.))b/i | 
|  | \= Expect no match | 
|  | AB | 
|  | a\nB | 
|  |  | 
|  | /((?s-i:a.))b/i | 
|  | a\nB | 
|  |  | 
|  | /(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/ | 
|  | cabbbb | 
|  |  | 
|  | /(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/ | 
|  | caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb | 
|  |  | 
|  | /(ab)\d\1/i | 
|  | Ab4ab | 
|  | ab4Ab | 
|  |  | 
|  | /foo\w*\d{4}baz/ | 
|  | foobar1234baz | 
|  |  | 
|  | /x(~~)*(?:(?:F)?)?/ | 
|  | x~~ | 
|  |  | 
|  | /^a(?#xxx){3}c/ | 
|  | aaac | 
|  |  | 
|  | /^a (?#xxx) (?#yyy) {3}c/x | 
|  | aaac | 
|  |  | 
|  | /(?<![cd])b/ | 
|  | \= Expect no match | 
|  | B\nB | 
|  | dbcb | 
|  |  | 
|  | /(?<![cd])[ab]/ | 
|  | dbaacb | 
|  |  | 
|  | /(?<!(c|d))b/ | 
|  |  | 
|  | /(?<!(c|d))[ab]/ | 
|  | dbaacb | 
|  |  | 
|  | /(?<!cd)[ab]/ | 
|  | cdaccb | 
|  |  | 
|  | /^(?:a?b?)*$/ | 
|  | \ | 
|  | a | 
|  | ab | 
|  | aaa | 
|  | \= Expect no match | 
|  | dbcb | 
|  | a-- | 
|  | aa-- | 
|  |  | 
|  | /((?s)^a(.))((?m)^b$)/ | 
|  | a\nb\nc\n | 
|  |  | 
|  | /((?m)^b$)/ | 
|  | a\nb\nc\n | 
|  |  | 
|  | /(?m)^b/ | 
|  | a\nb\n | 
|  |  | 
|  | /(?m)^(b)/ | 
|  | a\nb\n | 
|  |  | 
|  | /((?m)^b)/ | 
|  | a\nb\n | 
|  |  | 
|  | /\n((?m)^b)/ | 
|  | a\nb\n | 
|  |  | 
|  | /((?s).)c(?!.)/ | 
|  | a\nb\nc\n | 
|  | a\nb\nc\n | 
|  |  | 
|  | /((?s)b.)c(?!.)/ | 
|  | a\nb\nc\n | 
|  | a\nb\nc\n | 
|  |  | 
|  | /^b/ | 
|  |  | 
|  | /()^b/ | 
|  | \= Expect no match | 
|  | a\nb\nc\n | 
|  | a\nb\nc\n | 
|  |  | 
|  | /((?m)^b)/ | 
|  | a\nb\nc\n | 
|  |  | 
|  | /(x)?(?(1)a|b)/ | 
|  | \= Expect no match | 
|  | a | 
|  | a | 
|  |  | 
|  | /(x)?(?(1)b|a)/ | 
|  | a | 
|  |  | 
|  | /()?(?(1)b|a)/ | 
|  | a | 
|  |  | 
|  | /()(?(1)b|a)/ | 
|  |  | 
|  | /()?(?(1)a|b)/ | 
|  | a | 
|  |  | 
|  | /^(\()?blah(?(1)(\)))$/ | 
|  | (blah) | 
|  | blah | 
|  | \= Expect no match | 
|  | a | 
|  | blah) | 
|  | (blah | 
|  |  | 
|  | /^(\(+)?blah(?(1)(\)))$/ | 
|  | (blah) | 
|  | blah | 
|  | \= Expect no match | 
|  | blah) | 
|  | (blah | 
|  |  | 
|  | /(?(?!a)a|b)/ | 
|  |  | 
|  | /(?(?!a)b|a)/ | 
|  | a | 
|  |  | 
|  | /(?(?=a)b|a)/ | 
|  | \= Expect no match | 
|  | a | 
|  | a | 
|  |  | 
|  | /(?(?=a)a|b)/ | 
|  | a | 
|  |  | 
|  | /(?=(a+?))(\1ab)/ | 
|  | aaab | 
|  |  | 
|  | /^(?=(a+?))\1ab/ | 
|  |  | 
|  | /(\w+:)+/ | 
|  | one: | 
|  |  | 
|  | /$(?<=^(a))/ | 
|  | a | 
|  |  | 
|  | /(?=(a+?))(\1ab)/ | 
|  | aaab | 
|  |  | 
|  | /^(?=(a+?))\1ab/ | 
|  | \= Expect no match | 
|  | aaab | 
|  | aaab | 
|  |  | 
|  | /([\w:]+::)?(\w+)$/ | 
|  | abcd | 
|  | xy:z:::abcd | 
|  |  | 
|  | /^[^bcd]*(c+)/ | 
|  | aexycd | 
|  |  | 
|  | /(a*)b+/ | 
|  | caab | 
|  |  | 
|  | /([\w:]+::)?(\w+)$/ | 
|  | abcd | 
|  | xy:z:::abcd | 
|  | \= Expect no match | 
|  | abcd: | 
|  | abcd: | 
|  |  | 
|  | /^[^bcd]*(c+)/ | 
|  | aexycd | 
|  |  | 
|  | /(>a+)ab/ | 
|  |  | 
|  | /(?>a+)b/ | 
|  | aaab | 
|  |  | 
|  | /([[:]+)/ | 
|  | a:[b]: | 
|  |  | 
|  | /([[=]+)/ | 
|  | a=[b]= | 
|  |  | 
|  | /([[.]+)/ | 
|  | a.[b]. | 
|  |  | 
|  | /((?>a+)b)/ | 
|  | aaab | 
|  |  | 
|  | /(?>(a+))b/ | 
|  | aaab | 
|  |  | 
|  | /((?>[^()]+)|\([^()]*\))+/ | 
|  | ((abc(ade)ufh()()x | 
|  |  | 
|  | /a\Z/ | 
|  | \= Expect no match | 
|  | aaab | 
|  | a\nb\n | 
|  |  | 
|  | /b\Z/ | 
|  | a\nb\n | 
|  |  | 
|  | /b\z/ | 
|  |  | 
|  | /b\Z/ | 
|  | a\nb | 
|  |  | 
|  | /b\z/ | 
|  | a\nb | 
|  |  | 
|  | /^(?>(?(1)\.|())[^\W_](?>[a-z0-9-]*[^\W_])?)+$/ | 
|  | a | 
|  | abc | 
|  | a-b | 
|  | 0-9 | 
|  | a.b | 
|  | 5.6.7 | 
|  | the.quick.brown.fox | 
|  | a100.b200.300c | 
|  | 12-ab.1245 | 
|  | \= Expect no match | 
|  | \ | 
|  | .a | 
|  | -a | 
|  | a- | 
|  | a. | 
|  | a_b | 
|  | a.- | 
|  | a.. | 
|  | ab..bc | 
|  | the.quick.brown.fox- | 
|  | the.quick.brown.fox. | 
|  | the.quick.brown.fox_ | 
|  | the.quick.brown.fox+ | 
|  |  | 
|  | /(?>.*)(?<=(abcd|wxyz))/ | 
|  | alphabetabcd | 
|  | endingwxyz | 
|  | \= Expect no match | 
|  | a rather long string that doesn't end with one of them | 
|  |  | 
|  | /word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/ | 
|  | word cat dog elephant mussel cow horse canary baboon snake shark otherword | 
|  | \= Expect no match | 
|  | word cat dog elephant mussel cow horse canary baboon snake shark | 
|  |  | 
|  | /word (?>[a-zA-Z0-9]+ ){0,30}otherword/ | 
|  | \= Expect no match | 
|  | 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 | 
|  |  | 
|  | /(?<=\d{3}(?!999))foo/ | 
|  | 999foo | 
|  | 123999foo | 
|  | \= Expect no match | 
|  | 123abcfoo | 
|  |  | 
|  | /(?<=(?!...999)\d{3})foo/ | 
|  | 999foo | 
|  | 123999foo | 
|  | \= Expect no match | 
|  | 123abcfoo | 
|  |  | 
|  | /(?<=\d{3}(?!999)...)foo/ | 
|  | 123abcfoo | 
|  | 123456foo | 
|  | \= Expect no match | 
|  | 123999foo | 
|  |  | 
|  | /(?<=\d{3}...)(?<!999)foo/ | 
|  | 123abcfoo | 
|  | 123456foo | 
|  | \= Expect no match | 
|  | 123999foo | 
|  |  | 
|  | /<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 | 
|  | /isx | 
|  | <a href=abcd xyz | 
|  | <a href=\"abcd xyz pqr\" cats | 
|  | <a href=\'abcd xyz pqr\' cats | 
|  |  | 
|  | /<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 | 
|  | /isx | 
|  | <a href=abcd xyz | 
|  | <a href=\"abcd xyz pqr\" cats | 
|  | <a href       =       \'abcd xyz pqr\' cats | 
|  |  | 
|  | /<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 | 
|  | /isx | 
|  | <a href=abcd xyz | 
|  | <a href=\"abcd xyz pqr\" cats | 
|  | <a href       =       \'abcd xyz pqr\' cats | 
|  |  | 
|  | /(Z()|A)*/ | 
|  | ZABCDEFG | 
|  |  | 
|  | /(Z(())|A)*/ | 
|  | ZABCDEFG | 
|  |  | 
|  | /((?>Z)+|A)*/ | 
|  | ZABCDEFG | 
|  |  | 
|  | /((?>)+|A)*/ | 
|  | ZABCDEFG | 
|  |  | 
|  | /a*/g | 
|  | abbab | 
|  |  | 
|  | /[[:space:]]+/ | 
|  | > \x09\x0a\x0c\x0d\x0b< | 
|  |  | 
|  | /[[:blank:]]+/ | 
|  | > \x09\x0a\x0c\x0d\x0b< | 
|  |  | 
|  | /[\s]+/ | 
|  | > \x09\x0a\x0c\x0d\x0b< | 
|  |  | 
|  | /\s+/ | 
|  | > \x09\x0a\x0c\x0d\x0b< | 
|  |  | 
|  | /ab/x | 
|  | ab | 
|  |  | 
|  | /(?!\A)x/m | 
|  | a\nxb\n | 
|  |  | 
|  | /(?!^)x/m | 
|  | \= Expect no match | 
|  | a\nxb\n | 
|  |  | 
|  | /abc\Qabc\Eabc/ | 
|  | abcabcabc | 
|  |  | 
|  | /abc\Q(*+|\Eabc/ | 
|  | abc(*+|abc | 
|  |  | 
|  | /   abc\Q abc\Eabc/x | 
|  | abc abcabc | 
|  | \= Expect no match | 
|  | abcabcabc | 
|  |  | 
|  | /abc#comment | 
|  | \Q#not comment | 
|  | literal\E/x | 
|  | abc#not comment\n    literal | 
|  |  | 
|  | /abc#comment | 
|  | \Q#not comment | 
|  | literal/x | 
|  | abc#not comment\n    literal | 
|  |  | 
|  | /abc#comment | 
|  | \Q#not comment | 
|  | literal\E #more comment | 
|  | /x | 
|  | abc#not comment\n    literal | 
|  |  | 
|  | /abc#comment | 
|  | \Q#not comment | 
|  | literal\E #more comment/x | 
|  | abc#not comment\n    literal | 
|  |  | 
|  | /\Qabc\$xyz\E/ | 
|  | abc\\\$xyz | 
|  |  | 
|  | /\Qabc\E\$\Qxyz\E/ | 
|  | abc\$xyz | 
|  |  | 
|  | /\Gabc/ | 
|  | abc | 
|  | \= Expect no match | 
|  | xyzabc | 
|  |  | 
|  | /\Gabc./g | 
|  | abc1abc2xyzabc3 | 
|  |  | 
|  | /abc./g | 
|  | abc1abc2xyzabc3 | 
|  |  | 
|  | /a(?x: b c )d/ | 
|  | XabcdY | 
|  | \= Expect no match | 
|  | Xa b c d Y | 
|  |  | 
|  | /((?x)x y z | a b c)/ | 
|  | XabcY | 
|  | AxyzB | 
|  |  | 
|  | /(?i)AB(?-i)C/ | 
|  | XabCY | 
|  | \= Expect no match | 
|  | XabcY | 
|  |  | 
|  | /((?i)AB(?-i)C|D)E/ | 
|  | abCE | 
|  | DE | 
|  | \= Expect no match | 
|  | abcE | 
|  | abCe | 
|  | dE | 
|  | De | 
|  |  | 
|  | /(.*)\d+\1/ | 
|  | abc123abc | 
|  | abc123bc | 
|  |  | 
|  | /(.*)\d+\1/s | 
|  | abc123abc | 
|  | abc123bc | 
|  |  | 
|  | /((.*))\d+\1/ | 
|  | abc123abc | 
|  | abc123bc | 
|  |  | 
|  | # This tests for an IPv6 address in the form where it can have up to | 
|  | # eight components, one and only one of which is empty. This must be | 
|  | # an internal component. | 
|  |  | 
|  | /^(?!:)                       # 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 | 
|  | /ix | 
|  | a123::a123 | 
|  | a123:b342::abcd | 
|  | a123:b342::324e:abcd | 
|  | a123:ddde:b342::324e:abcd | 
|  | a123:ddde:b342::324e:dcba:abcd | 
|  | a123:ddde:9999:b342::324e:dcba:abcd | 
|  | \= Expect no match | 
|  | 1:2:3:4:5:6:7:8 | 
|  | a123:bce:ddde:9999:b342::324e:dcba:abcd | 
|  | a123::9999:b342::324e:dcba:abcd | 
|  | abcde:2:3:4:5:6:7:8 | 
|  | ::1 | 
|  | abcd:fee0:123:: | 
|  | :1 | 
|  | 1: | 
|  |  | 
|  | /[z\Qa-d]\E]/ | 
|  | z | 
|  | a | 
|  | - | 
|  | d | 
|  | ] | 
|  | \= Expect no match | 
|  | b | 
|  |  | 
|  | /(a+)*b/ | 
|  | \= Expect no match | 
|  | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 
|  |  | 
|  | /(?i)reg(?:ul(?:[aä]|ae)r|ex)/ | 
|  | REGular | 
|  | regulaer | 
|  | Regex | 
|  | regulär | 
|  |  | 
|  | #if !ebcdic | 
|  |  | 
|  | /Åæåä[à-ÿÀ-ß]+/ | 
|  | Åæåäà | 
|  | Åæåäÿ | 
|  | ÅæåäÀ | 
|  | Åæåäß | 
|  |  | 
|  | #endif | 
|  |  | 
|  | /(?<=Z)X./ | 
|  | \x84XAZXB | 
|  |  | 
|  | /ab cd (?x) de fg/ | 
|  | ab cd defg | 
|  |  | 
|  | /ab cd(?x) de fg/ | 
|  | ab cddefg | 
|  | \= Expect no match | 
|  | abcddefg | 
|  |  | 
|  | /(?<![^f]oo)(bar)/ | 
|  | foobarX | 
|  | \= Expect no match | 
|  | boobarX | 
|  |  | 
|  | /(?<![^f])X/ | 
|  | offX | 
|  | \= Expect no match | 
|  | onyX | 
|  |  | 
|  | /(?<=[^f])X/ | 
|  | onyX | 
|  | \= Expect no match | 
|  | offX | 
|  |  | 
|  | /^/gm | 
|  | a\nb\nc\n | 
|  | \ | 
|  |  | 
|  | /(?<=C\n)^/gm | 
|  | A\nC\nC\n | 
|  |  | 
|  | /(?:(?(1)a|b)(X))+/ | 
|  | bXaX | 
|  |  | 
|  | /(?:(?(1)\1a|b)(X|Y))+/ | 
|  | bXXaYYaY | 
|  | bXYaXXaX | 
|  |  | 
|  | /()()()()()()()()()(?:(?(10)\10a|b)(X|Y))+/ | 
|  | bXXaYYaY | 
|  |  | 
|  | /[[,abc,]+]/ | 
|  | abc] | 
|  | a,b] | 
|  | [a,b,c] | 
|  |  | 
|  | /(?-x: )/x | 
|  | A\x20B | 
|  |  | 
|  | /(?x)(?-x: \s*#\s*)/ | 
|  | A # B | 
|  | \= Expect no match | 
|  | # | 
|  | A s#s B | 
|  |  | 
|  | /(?x-is)(?:(?-ixs) \s*#\s*) include/ | 
|  | A #include | 
|  | \= Expect no match | 
|  | A#include | 
|  | A #Include | 
|  |  | 
|  | /a*b*\w/ | 
|  | aaabbbb | 
|  | aaaa | 
|  | a | 
|  |  | 
|  | /a*b?\w/ | 
|  | aaabbbb | 
|  | aaaa | 
|  | a | 
|  |  | 
|  | /a*b{0,4}\w/ | 
|  | aaabbbb | 
|  | aaaa | 
|  | a | 
|  |  | 
|  | /a*b{0,}\w/ | 
|  | aaabbbb | 
|  | aaaa | 
|  | a | 
|  |  | 
|  | /a*\d*\w/ | 
|  | 0a | 
|  | a | 
|  |  | 
|  | /a*b *\w/x | 
|  | a | 
|  |  | 
|  | /a*b#comment | 
|  | *\w/x | 
|  | a | 
|  |  | 
|  | /a* b *\w/x | 
|  | a | 
|  |  | 
|  | /^\w+=.*(\\\n.*)*/ | 
|  | abc=xyz\\\npqr | 
|  |  | 
|  | /(?=(\w+))\1:/ | 
|  | abcd: | 
|  |  | 
|  | /^(?=(\w+))\1:/ | 
|  | abcd: | 
|  |  | 
|  | /^\Eabc/ | 
|  | abc | 
|  |  | 
|  | /^[\Eabc]/ | 
|  | a | 
|  | \= Expect no match | 
|  | E | 
|  |  | 
|  | /^[a-\Ec]/ | 
|  | b | 
|  | \= Expect no match | 
|  | - | 
|  | E | 
|  |  | 
|  | /^[a\E\E-\Ec]/ | 
|  | b | 
|  | \= Expect no match | 
|  | - | 
|  | E | 
|  |  | 
|  | /^[\E\Qa\E-\Qz\E]+/ | 
|  | b | 
|  | \= Expect no match | 
|  | - | 
|  |  | 
|  | /^[a\Q]bc\E]/ | 
|  | a | 
|  | ] | 
|  | c | 
|  |  | 
|  | /^[a-\Q\E]/ | 
|  | a | 
|  | - | 
|  |  | 
|  | /^(a()*)*/ | 
|  | aaaa | 
|  |  | 
|  | /^(?:a(?:(?:))*)*/ | 
|  | aaaa | 
|  |  | 
|  | /^(a()+)+/ | 
|  | aaaa | 
|  |  | 
|  | /^(?:a(?:(?:))+)+/ | 
|  | aaaa | 
|  |  | 
|  | /(a){0,3}(?(1)b|(c|))*D/ | 
|  | abbD | 
|  | ccccD | 
|  | D | 
|  |  | 
|  | /(a|)*\d/ | 
|  | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4 | 
|  | \= Expect no match | 
|  | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 
|  |  | 
|  | /(?>a|)*\d/ | 
|  | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4 | 
|  | \= Expect no match | 
|  | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 
|  |  | 
|  | /(?:a|)*\d/ | 
|  | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4 | 
|  | \= Expect no match | 
|  | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 
|  |  | 
|  | /\Z/g | 
|  | abc\n | 
|  |  | 
|  | /^(?s)(?>.*)(?<!\n)/ | 
|  | abc | 
|  | \= Expect no match | 
|  | abc\n | 
|  |  | 
|  | /^(?![^\n]*\n\z)/ | 
|  | abc | 
|  | \= Expect no match | 
|  | abc\n | 
|  |  | 
|  | /\z(?<!\n)/ | 
|  | abc | 
|  | \= Expect no match | 
|  | abc\n | 
|  |  | 
|  | /(.*(.)?)*/ | 
|  | abcd | 
|  |  | 
|  | /( (A | (?(1)0|) )*   )/x | 
|  | abcd | 
|  |  | 
|  | /( ( (?(1)0|) )*   )/x | 
|  | abcd | 
|  |  | 
|  | /(  (?(1)0|)*   )/x | 
|  | abcd | 
|  |  | 
|  | /[[:abcd:xyz]]/ | 
|  | a] | 
|  | :] | 
|  |  | 
|  | /[abc[:x\]pqr]/ | 
|  | a | 
|  | [ | 
|  | : | 
|  | ] | 
|  | p | 
|  |  | 
|  | /.*[op][xyz]/ | 
|  | \= Expect no match | 
|  | fooabcfoo | 
|  |  | 
|  | /(?(?=.*b)b|^)/ | 
|  | adc | 
|  | abc | 
|  |  | 
|  | /(?(?=^.*b)b|^)/ | 
|  | adc | 
|  | \= Expect no match | 
|  | abc | 
|  |  | 
|  | /(?(?=.*b)b|^)*/ | 
|  | adc | 
|  | abc | 
|  |  | 
|  | /(?(?=.*b)b|^)+/ | 
|  | adc | 
|  | abc | 
|  |  | 
|  | /(?(?=b).*b|^d)/ | 
|  | abc | 
|  |  | 
|  | /(?(?=.*b).*b|^d)/ | 
|  | abc | 
|  |  | 
|  | /^%((?(?=[a])[^%])|b)*%$/ | 
|  | %ab% | 
|  |  | 
|  | /(?i)a(?-i)b|c/ | 
|  | XabX | 
|  | XAbX | 
|  | CcC | 
|  | \= Expect no match | 
|  | XABX | 
|  |  | 
|  | /[\x00-\xff\s]+/ | 
|  | \x0a\x0b\x0c\x0d | 
|  |  | 
|  | /(abc)\1/i | 
|  | \= Expect no match | 
|  | abc | 
|  |  | 
|  | /(abc)\1/ | 
|  | \= Expect no match | 
|  | abc | 
|  |  | 
|  | /[^a]*/i | 
|  | 12abc | 
|  | 12ABC | 
|  |  | 
|  | /[^a]*+/i | 
|  | 12abc | 
|  | 12ABC | 
|  |  | 
|  | /[^a]*?X/i | 
|  | \= Expect no match | 
|  | 12abc | 
|  | 12ABC | 
|  |  | 
|  | /[^a]+?X/i | 
|  | \= Expect no match | 
|  | 12abc | 
|  | 12ABC | 
|  |  | 
|  | /[^a]?X/i | 
|  | 12aXbcX | 
|  | 12AXBCX | 
|  | BCX | 
|  |  | 
|  | /[^a]??X/i | 
|  | 12aXbcX | 
|  | 12AXBCX | 
|  | BCX | 
|  |  | 
|  | /[^a]?+X/i | 
|  | 12aXbcX | 
|  | 12AXBCX | 
|  | BCX | 
|  |  | 
|  | /[^a]{2,3}/i | 
|  | abcdef | 
|  | ABCDEF | 
|  |  | 
|  | /[^a]{2,3}?/i | 
|  | abcdef | 
|  | ABCDEF | 
|  |  | 
|  | /[^a]{2,3}+/i | 
|  | abcdef | 
|  | ABCDEF | 
|  |  | 
|  | /((a|)+)+Z/ | 
|  | Z | 
|  |  | 
|  | /(a)b|(a)c/ | 
|  | ac | 
|  |  | 
|  | /(?>(a))b|(a)c/ | 
|  | ac | 
|  |  | 
|  | /(?=(a))ab|(a)c/ | 
|  | ac | 
|  |  | 
|  | /((?>(a))b|(a)c)/ | 
|  | ac | 
|  |  | 
|  | /((?>(a))b|(a)c)++/ | 
|  | ac | 
|  |  | 
|  | /(?:(?>(a))b|(a)c)++/ | 
|  | ac | 
|  |  | 
|  | /(?=(?>(a))b|(a)c)(..)/ | 
|  | ac | 
|  |  | 
|  | /(?>(?>(a))b|(a)c)/ | 
|  | ac | 
|  |  | 
|  | /(?:(?>([ab])))+a=/aftertext | 
|  | =ba= | 
|  |  | 
|  | /(?>([ab]))+a=/aftertext | 
|  | =ba= | 
|  |  | 
|  | /((?>(a+)b)+(aabab))/ | 
|  | aaaabaaabaabab | 
|  |  | 
|  | /(?>a+|ab)+?c/ | 
|  | \= Expect no match | 
|  | aabc | 
|  |  | 
|  | /(?>a+|ab)+c/ | 
|  | \= Expect no match | 
|  | aabc | 
|  |  | 
|  | /(?:a+|ab)+c/ | 
|  | aabc | 
|  |  | 
|  | /(?(?=(a))a)/ | 
|  | a | 
|  |  | 
|  | /(?(?=(a))a)(b)/ | 
|  | ab | 
|  |  | 
|  | /^(?:a|ab)++c/ | 
|  | \= Expect no match | 
|  | aaaabc | 
|  |  | 
|  | /^(?>a|ab)++c/ | 
|  | \= Expect no match | 
|  | aaaabc | 
|  |  | 
|  | /^(?:a|ab)+c/ | 
|  | aaaabc | 
|  |  | 
|  | /(?=abc){3}abc/aftertext | 
|  | abcabcabc | 
|  | \= Expect no match | 
|  | xyz | 
|  |  | 
|  | /(?=abc)+abc/aftertext | 
|  | abcabcabc | 
|  | \= Expect no match | 
|  | xyz | 
|  |  | 
|  | /(?=abc)++abc/aftertext | 
|  | abcabcabc | 
|  | \= Expect no match | 
|  | xyz | 
|  |  | 
|  | /(?=abc){0}xyz/ | 
|  | xyz | 
|  |  | 
|  | /(?=abc){1}xyz/ | 
|  | \= Expect no match | 
|  | xyz | 
|  |  | 
|  | /(?=(a))?./ | 
|  | ab | 
|  | bc | 
|  |  | 
|  | /(?=(a))??./ | 
|  | ab | 
|  | bc | 
|  |  | 
|  | /^(?=(?1))?[az]([abc])d/ | 
|  | abd | 
|  | zcdxx | 
|  |  | 
|  | /^(?!a){0}\w+/ | 
|  | aaaaa | 
|  |  | 
|  | /(?<=(abc))?xyz/ | 
|  | abcxyz | 
|  | pqrxyz | 
|  |  | 
|  | /^[\g<a>]+/ | 
|  | ggg<<<aaa>>> | 
|  | \= Expect no match | 
|  | \\ga | 
|  |  | 
|  | /^[\ga]+/ | 
|  | gggagagaxyz | 
|  |  | 
|  | /^[:a[:digit:]]+/ | 
|  | aaaa444:::Z | 
|  |  | 
|  | /^[:a[:digit:]:b]+/ | 
|  | aaaa444:::bbbZ | 
|  |  | 
|  | /[:a]xxx[b:]/ | 
|  | :xxx: | 
|  |  | 
|  | /(?<=a{2})b/i | 
|  | xaabc | 
|  | \= Expect no match | 
|  | xabc | 
|  |  | 
|  | /(?<!a{2})b/i | 
|  | xabc | 
|  | \= Expect no match | 
|  | xaabc | 
|  |  | 
|  | /(?<=a\h)c/ | 
|  | xa c | 
|  |  | 
|  | /(?<=[^a]{2})b/ | 
|  | axxbc | 
|  | aAAbc | 
|  | \= Expect no match | 
|  | xaabc | 
|  |  | 
|  | /(?<=[^a]{2})b/i | 
|  | axxbc | 
|  | \= Expect no match | 
|  | aAAbc | 
|  | xaabc | 
|  |  | 
|  | /(?<=a\H)c/ | 
|  | abc | 
|  |  | 
|  | /(?<=a\V)c/ | 
|  | abc | 
|  |  | 
|  | /(?<=a\v)c/ | 
|  | a\nc | 
|  |  | 
|  | /(?(?=c)c|d)++Y/ | 
|  | XcccddYX | 
|  |  | 
|  | /(?(?=c)c|d)*+Y/ | 
|  | XcccddYX | 
|  |  | 
|  | /^(a{2,3}){2,}+a/ | 
|  | aaaaaaa | 
|  | \= Expect no match | 
|  | aaaaaa | 
|  | aaaaaaaaa | 
|  |  | 
|  | /^(a{2,3})++a/ | 
|  | \= Expect no match | 
|  | aaaaaa | 
|  |  | 
|  | /^(a{2,3})*+a/ | 
|  | \= Expect no match | 
|  | aaaaaa | 
|  |  | 
|  | /\H\h\V\v/ | 
|  | X X\x0a | 
|  | X\x09X\x0b | 
|  | \= Expect no match | 
|  | \xa0 X\x0a | 
|  |  | 
|  | /\H*\h+\V?\v{3,4}/ | 
|  | \x09\x20\xa0X\x0a\x0b\x0c\x0d\x0a | 
|  | \x09\x20\xa0\x0a\x0b\x0c\x0d\x0a | 
|  | \x09\x20\xa0\x0a\x0b\x0c | 
|  | \= Expect no match | 
|  | \x09\x20\xa0\x0a\x0b | 
|  |  | 
|  | /\H{3,4}/ | 
|  | XY  ABCDE | 
|  | XY  PQR ST | 
|  |  | 
|  | /.\h{3,4}./ | 
|  | XY  AB    PQRS | 
|  |  | 
|  | /\h*X\h?\H+Y\H?Z/ | 
|  | >XNNNYZ | 
|  | >  X NYQZ | 
|  | \= Expect no match | 
|  | >XYZ | 
|  | >  X NY Z | 
|  |  | 
|  | #if !ebcdic | 
|  |  | 
|  | /\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c/ | 
|  | >XY\x0aZ\x0aA\x0bNN\x0c | 
|  | >\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c | 
|  |  | 
|  | #endif | 
|  |  | 
|  | /(foo)\Kbar/ | 
|  | foobar | 
|  |  | 
|  | /(foo)(\Kbar|baz)/ | 
|  | foobar | 
|  | foobaz | 
|  |  | 
|  | /(foo\Kbar)baz/ | 
|  | foobarbaz | 
|  |  | 
|  | /abc\K|def\K/g,aftertext | 
|  | Xabcdefghi | 
|  |  | 
|  | /ab\Kc|de\Kf/g,aftertext | 
|  | Xabcdefghi | 
|  |  | 
|  | /(?=C)/g,aftertext | 
|  | ABCDECBA | 
|  |  | 
|  | /^abc\K/aftertext | 
|  | abcdef | 
|  | \= Expect no match | 
|  | defabcxyz | 
|  |  | 
|  | /^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-2}Z/ | 
|  | ababababbbabZXXXX | 
|  |  | 
|  | /(?<A>tom|bon)-\g{A}/ | 
|  | tom-tom | 
|  | bon-bon | 
|  |  | 
|  | /(^(a|b\g{-1}))/ | 
|  | \= Expect no match | 
|  | bacxxx | 
|  |  | 
|  | /(?|(abc)|(xyz))\1/ | 
|  | abcabc | 
|  | xyzxyz | 
|  | \= Expect no match | 
|  | abcxyz | 
|  | xyzabc | 
|  |  | 
|  | /(?|(abc)|(xyz))(?1)/ | 
|  | abcabc | 
|  | xyzabc | 
|  | \= Expect no match | 
|  | xyzxyz | 
|  |  | 
|  | /^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/ | 
|  | XYabcdY | 
|  |  | 
|  | /^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/ | 
|  | XYabcdY | 
|  |  | 
|  | /^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/ | 
|  | XYabcdY | 
|  |  | 
|  | /(?'abc'\w+):\k<abc>{2}/ | 
|  | a:aaxyz | 
|  | ab:ababxyz | 
|  | \= Expect no match | 
|  | a:axyz | 
|  | ab:abxyz | 
|  |  | 
|  | /(?'abc'\w+):\g{abc}{2}/ | 
|  | a:aaxyz | 
|  | ab:ababxyz | 
|  | \= Expect no match | 
|  | a:axyz | 
|  | ab:abxyz | 
|  |  | 
|  | /^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)/x | 
|  | abd | 
|  | ce | 
|  |  | 
|  | /^(a.)\g-1Z/ | 
|  | aXaXZ | 
|  |  | 
|  | /^(a.)\g{-1}Z/ | 
|  | aXaXZ | 
|  |  | 
|  | /^(?(DEFINE) (?<A> a) (?<B> b) )  (?&A) (?&B) /x | 
|  | abcd | 
|  |  | 
|  | /(?<all>(?:(?:a(?&all))|(b))(c?))/ | 
|  | aabc | 
|  |  | 
|  | /(a(b)|(c))(?1)/ | 
|  | abc | 
|  | cab | 
|  |  | 
|  | /(?1)(a(b)|(c))/ | 
|  | abc | 
|  | cab | 
|  |  | 
|  | /(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT)) | 
|  | (?(DEFINE) | 
|  | (?<NAME_PAT>[a-z]+) | 
|  | (?<ADDRESS_PAT>\d+) | 
|  | )/x | 
|  | metcalfe 33 | 
|  |  | 
|  | /(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}/ | 
|  | 1.2.3.4 | 
|  | 131.111.10.206 | 
|  | 10.0.0.0 | 
|  | \= Expect no match | 
|  | 10.6 | 
|  | 455.3.4.5 | 
|  |  | 
|  | /\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))/ | 
|  | 1.2.3.4 | 
|  | 131.111.10.206 | 
|  | 10.0.0.0 | 
|  | \= Expect no match | 
|  | 10.6 | 
|  | 455.3.4.5 | 
|  |  | 
|  | /^(\w++|\s++)*$/ | 
|  | now is the time for all good men to come to the aid of the party | 
|  | \= Expect no match | 
|  | this is not a line with only words and spaces! | 
|  |  | 
|  | /(\d++)(\w)/ | 
|  | 12345a | 
|  | \= Expect no match | 
|  | 12345+ | 
|  |  | 
|  | /a++b/ | 
|  | aaab | 
|  |  | 
|  | /(a++b)/ | 
|  | aaab | 
|  |  | 
|  | /(a++)b/ | 
|  | aaab | 
|  |  | 
|  | /([^()]++|\([^()]*\))+/ | 
|  | ((abc(ade)ufh()()x | 
|  |  | 
|  | /\(([^()]++|\([^()]+\))+\)/ | 
|  | (abc) | 
|  | (abc(def)xyz) | 
|  | \= Expect no match | 
|  | ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 
|  |  | 
|  | /^([^()]|\((?1)*\))*$/ | 
|  | abc | 
|  | a(b)c | 
|  | a(b(c))d | 
|  | \= Expect no match) | 
|  | a(b(c)d | 
|  |  | 
|  | /^>abc>([^()]|\((?1)*\))*<xyz<$/ | 
|  | >abc>123<xyz< | 
|  | >abc>1(2)3<xyz< | 
|  | >abc>(1(2)3)<xyz< | 
|  |  | 
|  | /^(?:((.)(?1)\2|)|((.)(?3)\4|.))$/i | 
|  | 1221 | 
|  | Satanoscillatemymetallicsonatas | 
|  | AmanaplanacanalPanama | 
|  | AblewasIereIsawElba | 
|  | \= Expect no match | 
|  | Thequickbrownfox | 
|  |  | 
|  | /^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/ | 
|  | 12 | 
|  | (((2+2)*-3)-7) | 
|  | -12 | 
|  | \= Expect no match | 
|  | ((2+2)*-3)-7) | 
|  |  | 
|  | /^(x(y|(?1){2})z)/ | 
|  | xyz | 
|  | xxyzxyzz | 
|  | \= Expect no match | 
|  | xxyzz | 
|  | xxyzxyzxyzz | 
|  |  | 
|  | /((< (?: (?(R) \d++  | [^<>]*+) | (?2)) * >))/x | 
|  | <> | 
|  | <abcd> | 
|  | <abc <123> hij> | 
|  | <abc <def> hij> | 
|  | <abc<>def> | 
|  | <abc<> | 
|  | \= Expect no match | 
|  | <abc | 
|  |  | 
|  | /^a+(*FAIL)/ | 
|  | \= Expect no match | 
|  | aaaaaa | 
|  |  | 
|  | /a+b?c+(*FAIL)/ | 
|  | \= Expect no match | 
|  | aaabccc | 
|  |  | 
|  | /a+b?(*PRUNE)c+(*FAIL)/ | 
|  | \= Expect no match | 
|  | aaabccc | 
|  |  | 
|  | /a+b?(*COMMIT)c+(*FAIL)/ | 
|  | \= Expect no match | 
|  | aaabccc | 
|  |  | 
|  | /a+b?(*SKIP)c+(*FAIL)/ | 
|  | \= Expect no match | 
|  | aaabcccaaabccc | 
|  |  | 
|  | /^(?:aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/ | 
|  | aaaxxxxxx | 
|  | aaa++++++ | 
|  | bbbxxxxx | 
|  | bbb+++++ | 
|  | cccxxxx | 
|  | ccc++++ | 
|  | dddddddd | 
|  |  | 
|  | /^(aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/ | 
|  | aaaxxxxxx | 
|  | aaa++++++ | 
|  | bbbxxxxx | 
|  | bbb+++++ | 
|  | cccxxxx | 
|  | ccc++++ | 
|  | dddddddd | 
|  |  | 
|  | /a+b?(*THEN)c+(*FAIL)/ | 
|  | \= Expect no match | 
|  | aaabccc | 
|  |  | 
|  | /(A (A|B(*ACCEPT)|C) D)(E)/x | 
|  | AB | 
|  | ABX | 
|  | AADE | 
|  | ACDE | 
|  | \= Expect no match | 
|  | AD | 
|  |  | 
|  | /^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$/i | 
|  | 1221 | 
|  | Satan, oscillate my metallic sonatas! | 
|  | A man, a plan, a canal: Panama! | 
|  | Able was I ere I saw Elba. | 
|  | \= Expect no match | 
|  | The quick brown fox | 
|  |  | 
|  | /^((.)(?1)\2|.)$/ | 
|  | a | 
|  | aba | 
|  | aabaa | 
|  | abcdcba | 
|  | pqaabaaqp | 
|  | ablewasiereisawelba | 
|  | \= Expect no match | 
|  | rhubarb | 
|  | the quick brown fox | 
|  |  | 
|  | /(a)(?<=b(?1))/ | 
|  | baz | 
|  | \= Expect no match | 
|  | caz | 
|  |  | 
|  | /(?<=b(?1))(a)/ | 
|  | zbaaz | 
|  | \= Expect no match | 
|  | aaa | 
|  |  | 
|  | /(?<X>a)(?<=b(?&X))/ | 
|  | baz | 
|  |  | 
|  | /^(?|(abc)|(def))\1/ | 
|  | abcabc | 
|  | defdef | 
|  | \= Expect no match | 
|  | abcdef | 
|  | defabc | 
|  |  | 
|  | /^(?|(abc)|(def))(?1)/ | 
|  | abcabc | 
|  | defabc | 
|  | \= Expect no match | 
|  | defdef | 
|  | abcdef | 
|  |  | 
|  | /(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |b(?<quote> (?<apostrophe>')|(?<realquote>")) ) (?('quote')[a-z]+|[0-9]+)/x,dupnames | 
|  | a\"aaaaa | 
|  | b\"aaaaa | 
|  | \= Expect no match | 
|  | b\"11111 | 
|  |  | 
|  | /(?:(?1)|B)(A(*F)|C)/ | 
|  | ABCD | 
|  | CCD | 
|  | \= Expect no match | 
|  | CAD | 
|  |  | 
|  | /^(?:(?1)|B)(A(*F)|C)/ | 
|  | CCD | 
|  | BCD | 
|  | \= Expect no match | 
|  | ABCD | 
|  | CAD | 
|  | BAD | 
|  |  | 
|  | /(?:(?1)|B)(A(*ACCEPT)XX|C)D/ | 
|  | AAD | 
|  | ACD | 
|  | BAD | 
|  | BCD | 
|  | BAX | 
|  | \= Expect no match | 
|  | ACX | 
|  | ABC | 
|  |  | 
|  | /(?(DEFINE)(A))B(?1)C/ | 
|  | BAC | 
|  |  | 
|  | /(?(DEFINE)((A)\2))B(?1)C/ | 
|  | BAAC | 
|  |  | 
|  | /(?<pn> \( ( [^()]++ | (?&pn) )* \) )/x | 
|  | (ab(cd)ef) | 
|  |  | 
|  | /^(?=a(*SKIP)b|ac)/ | 
|  | \= Expect no match | 
|  | ac | 
|  |  | 
|  | /^(?=a(*PRUNE)b)/ | 
|  | ab | 
|  | \= Expect no match | 
|  | ac | 
|  |  | 
|  | /^(?=a(*ACCEPT)b)/ | 
|  | ac | 
|  |  | 
|  | /(?>a\Kb)/ | 
|  | ab | 
|  |  | 
|  | /((?>a\Kb))/ | 
|  | ab | 
|  |  | 
|  | /(a\Kb)/ | 
|  | ab | 
|  |  | 
|  | /^a\Kcz|ac/ | 
|  | ac | 
|  |  | 
|  | /(?>a\Kbz|ab)/ | 
|  | ab | 
|  |  | 
|  | /^(?&t)(?(DEFINE)(?<t>a\Kb))$/ | 
|  | ab | 
|  |  | 
|  | /^([^()]|\((?1)*\))*$/ | 
|  | a(b)c | 
|  | a(b(c)d)e | 
|  |  | 
|  | /(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))/ | 
|  | 0 | 
|  | 00 | 
|  | 0000 | 
|  |  | 
|  | /(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))/ | 
|  | 0 | 
|  | 00 | 
|  | 0000 | 
|  |  | 
|  | # This one does fail, as expected, in Perl. It needs the complex item at the | 
|  | # end of the pattern. A single letter instead of (B|D) makes it not fail, which | 
|  | # I think is a Perl bug. | 
|  |  | 
|  | /A(*COMMIT)(B|D)/ | 
|  | \= Expect no match | 
|  | ACABX | 
|  |  | 
|  | # Check the use of names for failure | 
|  |  | 
|  | /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/mark | 
|  | \= Expect no match | 
|  | AC | 
|  | CB | 
|  |  | 
|  | /(*MARK:A)(*SKIP:B)(C|X)/mark | 
|  | C | 
|  | \= Expect no match | 
|  | D | 
|  |  | 
|  | /^(A(*THEN:A)B|C(*THEN:B)D)/mark | 
|  | \= Expect no match | 
|  | CB | 
|  |  | 
|  | /^(?:A(*THEN:A)B|C(*THEN:B)D)/mark | 
|  | \= Expect no match | 
|  | CB | 
|  |  | 
|  | /^(?>A(*THEN:A)B|C(*THEN:B)D)/mark | 
|  | \= Expect no match | 
|  | CB | 
|  |  | 
|  | # This should succeed, as the skip causes bump to offset 1 (the mark). Note | 
|  | # that we have to have something complicated such as (B|Z) at the end because, | 
|  | # for Perl, a simple character somehow causes an unwanted optimization to mess | 
|  | # with the handling of backtracking verbs. | 
|  |  | 
|  | /A(*MARK:A)A+(*SKIP:A)(B|Z) | AC/x,mark | 
|  | AAAC | 
|  |  | 
|  | # Test skipping over a non-matching mark. | 
|  |  | 
|  | /A(*MARK:A)A+(*MARK:B)(*SKIP:A)(B|Z) | AC/x,mark | 
|  | AAAC | 
|  |  | 
|  | # Check shorthand for MARK. | 
|  |  | 
|  | /A(*:A)A+(*SKIP:A)(B|Z) | AC/x,mark | 
|  | AAAC | 
|  |  | 
|  | /(*:A)A+(*SKIP:A)(B|Z)/mark | 
|  | \= Expect no match | 
|  | AAAC | 
|  |  | 
|  | # This should succeed, as a non-existent skip name disables the skip. | 
|  |  | 
|  | /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/x,mark | 
|  | AAAC | 
|  |  | 
|  | /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC(*:B)/x,mark | 
|  | AAAC | 
|  |  | 
|  | # COMMIT at the start of a pattern should act like an anchor. Again, however, | 
|  | # we need the complication for Perl. | 
|  |  | 
|  | /(*COMMIT)(A|P)(B|P)(C|P)/ | 
|  | ABCDEFG | 
|  | \= Expect no match | 
|  | DEFGABC | 
|  |  | 
|  | # COMMIT inside an atomic group can't stop backtracking over the group. | 
|  |  | 
|  | /(\w+)(?>b(*COMMIT))\w{2}/ | 
|  | abbb | 
|  |  | 
|  | /(\w+)b(*COMMIT)\w{2}/ | 
|  | \= Expect no match | 
|  | abbb | 
|  |  | 
|  | # Check opening parens in comment when seeking forward reference. | 
|  |  | 
|  | /(?&t)(?#()(?(DEFINE)(?<t>a))/ | 
|  | bac | 
|  |  | 
|  | # COMMIT should override THEN. | 
|  |  | 
|  | /(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?/ | 
|  | \= Expect no match | 
|  | yes | 
|  |  | 
|  | /(?>(*COMMIT)(yes|no)(*THEN)(*F))?/ | 
|  | \= Expect no match | 
|  | yes | 
|  |  | 
|  | /b?(*SKIP)c/ | 
|  | bc | 
|  | abc | 
|  |  | 
|  | /(*SKIP)bc/ | 
|  | \= Expect no match | 
|  | a | 
|  |  | 
|  | /(*SKIP)b/ | 
|  | \= Expect no match | 
|  | a | 
|  |  | 
|  | /(?P<abn>(?P=abn)xxx|)+/ | 
|  | xxx | 
|  |  | 
|  | /(?i:([^b]))(?1)/ | 
|  | aa | 
|  | aA | 
|  | \= Expect no match | 
|  | ab | 
|  | aB | 
|  | Ba | 
|  | ba | 
|  |  | 
|  | /^(?&t)*+(?(DEFINE)(?<t>a))\w$/ | 
|  | aaaaaaX | 
|  | \= Expect no match | 
|  | aaaaaa | 
|  |  | 
|  | /^(?&t)*(?(DEFINE)(?<t>a))\w$/ | 
|  | aaaaaaX | 
|  | aaaaaa | 
|  |  | 
|  | /^(a)*+(\w)/ | 
|  | aaaaX | 
|  | YZ | 
|  | \= Expect no match | 
|  | aaaa | 
|  |  | 
|  | /^(?:a)*+(\w)/ | 
|  | aaaaX | 
|  | YZ | 
|  | \= Expect no match | 
|  | aaaa | 
|  |  | 
|  | /^(a)++(\w)/ | 
|  | aaaaX | 
|  | \= Expect no match | 
|  | aaaa | 
|  | YZ | 
|  |  | 
|  | /^(?:a)++(\w)/ | 
|  | aaaaX | 
|  | \= Expect no match | 
|  | aaaa | 
|  | YZ | 
|  |  | 
|  | /^(a)?+(\w)/ | 
|  | aaaaX | 
|  | YZ | 
|  |  | 
|  | /^(?:a)?+(\w)/ | 
|  | aaaaX | 
|  | YZ | 
|  |  | 
|  | /^(a){2,}+(\w)/ | 
|  | aaaaX | 
|  | \= Expect no match | 
|  | aaa | 
|  | YZ | 
|  |  | 
|  | /^(?:a){2,}+(\w)/ | 
|  | aaaaX | 
|  | \= Expect no match | 
|  | aaa | 
|  | YZ | 
|  |  | 
|  | /(a|)*(?1)b/ | 
|  | b | 
|  | ab | 
|  | aab | 
|  |  | 
|  | /(a)++(?1)b/ | 
|  | \= Expect no match | 
|  | ab | 
|  | aab | 
|  |  | 
|  | /(a)*+(?1)b/ | 
|  | \= Expect no match | 
|  | ab | 
|  | aab | 
|  |  | 
|  | /(?1)(?:(b)){0}/ | 
|  | b | 
|  |  | 
|  | /(foo ( \( ((?:(?> [^()]+ )|(?2))*) \) ) )/x | 
|  | foo(bar(baz)+baz(bop)) | 
|  |  | 
|  | /(A (A|B(*ACCEPT)|C) D)(E)/x | 
|  | AB | 
|  |  | 
|  | /\A.*?(a|bc)/ | 
|  | ba | 
|  |  | 
|  | /\A.*?(?:a|bc)++/ | 
|  | ba | 
|  |  | 
|  | /\A.*?(a|bc)++/ | 
|  | ba | 
|  |  | 
|  | /\A.*?(?:a|bc|d)/ | 
|  | ba | 
|  |  | 
|  | /(?:(b))++/ | 
|  | beetle | 
|  |  | 
|  | /(?(?=(a(*ACCEPT)z))a)/ | 
|  | a | 
|  |  | 
|  | /^(a)(?1)+ab/ | 
|  | aaaab | 
|  |  | 
|  | /^(a)(?1)++ab/ | 
|  | \= Expect no match | 
|  | aaaab | 
|  |  | 
|  | /^(?=a(*:M))aZ/mark | 
|  | aZbc | 
|  |  | 
|  | /^(?!(*:M)b)aZ/mark | 
|  | aZbc | 
|  |  | 
|  | /(?(DEFINE)(a))?b(?1)/ | 
|  | backgammon | 
|  |  | 
|  | /^\N+/ | 
|  | abc\ndef | 
|  |  | 
|  | /^\N{1,}/ | 
|  | abc\ndef | 
|  |  | 
|  | /(?(R)a+|(?R)b)/ | 
|  | aaaabcde | 
|  |  | 
|  | /(?(R)a+|((?R))b)/ | 
|  | aaaabcde | 
|  |  | 
|  | /((?(R)a+|(?1)b))/ | 
|  | aaaabcde | 
|  |  | 
|  | /((?(R1)a+|(?1)b))/ | 
|  | aaaabcde | 
|  |  | 
|  | /((?(R)a|(?1)))*/ | 
|  | aaa | 
|  |  | 
|  | /((?(R)a|(?1)))+/ | 
|  | aaa | 
|  |  | 
|  | /a(*:any | 
|  | name)/mark | 
|  | abc | 
|  |  | 
|  | /(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))/ | 
|  | a | 
|  | ba | 
|  | bba | 
|  |  | 
|  | # Checking revised (*THEN) handling. | 
|  |  | 
|  | # Capture | 
|  |  | 
|  | /^.*? (a(*THEN)b) c/x | 
|  | \= Expect no match | 
|  | aabc | 
|  |  | 
|  | /^.*? (a(*THEN)b|(*F)) c/x | 
|  | aabc | 
|  |  | 
|  | /^.*? ( (a(*THEN)b) | (*F) ) c/x | 
|  | aabc | 
|  |  | 
|  | /^.*? ( (a(*THEN)b) ) c/x | 
|  | \= Expect no match | 
|  | aabc | 
|  |  | 
|  | # Non-capture | 
|  |  | 
|  | /^.*? (?:a(*THEN)b) c/x | 
|  | \= Expect no match | 
|  | aabc | 
|  |  | 
|  | /^.*? (?:a(*THEN)b|(*F)) c/x | 
|  | aabc | 
|  |  | 
|  | /^.*? (?: (?:a(*THEN)b) | (*F) ) c/x | 
|  | aabc | 
|  |  | 
|  | /^.*? (?: (?:a(*THEN)b) ) c/x | 
|  | \= Expect no match | 
|  | aabc | 
|  |  | 
|  | # Atomic | 
|  |  | 
|  | /^.*? (?>a(*THEN)b) c/x | 
|  | \= Expect no match | 
|  | aabc | 
|  |  | 
|  | /^.*? (?>a(*THEN)b|(*F)) c/x | 
|  | aabc | 
|  |  | 
|  | /^.*? (?> (?>a(*THEN)b) | (*F) ) c/x | 
|  | aabc | 
|  |  | 
|  | /^.*? (?> (?>a(*THEN)b) ) c/x | 
|  | \= Expect no match | 
|  | aabc | 
|  |  | 
|  | # Possessive capture | 
|  |  | 
|  | /^.*? (a(*THEN)b)++ c/x | 
|  | \= Expect no match | 
|  | aabc | 
|  |  | 
|  | /^.*? (a(*THEN)b|(*F))++ c/x | 
|  | aabc | 
|  |  | 
|  | /^.*? ( (a(*THEN)b)++ | (*F) )++ c/x | 
|  | aabc | 
|  |  | 
|  | /^.*? ( (a(*THEN)b)++ )++ c/x | 
|  | \= Expect no match | 
|  | aabc | 
|  |  | 
|  | # Possessive non-capture | 
|  |  | 
|  | /^.*? (?:a(*THEN)b)++ c/x | 
|  | \= Expect no match | 
|  | aabc | 
|  |  | 
|  | /^.*? (?:a(*THEN)b|(*F))++ c/x | 
|  | aabc | 
|  |  | 
|  | /^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c/x | 
|  | aabc | 
|  |  | 
|  | /^.*? (?: (?:a(*THEN)b)++ )++ c/x | 
|  | \= Expect no match | 
|  | aabc | 
|  |  | 
|  | # Condition assertion | 
|  |  | 
|  | /^(?(?=a(*THEN)b)ab|ac)/ | 
|  | ac | 
|  |  | 
|  | # Condition | 
|  |  | 
|  | /^.*?(?(?=a)a|b(*THEN)c)/ | 
|  | \= Expect no match | 
|  | ba | 
|  |  | 
|  | /^.*?(?:(?(?=a)a|b(*THEN)c)|d)/ | 
|  | ba | 
|  |  | 
|  | /^.*?(?(?=a)a(*THEN)b|c)/ | 
|  | \= Expect no match | 
|  | ac | 
|  |  | 
|  | # Assertion | 
|  |  | 
|  | /^.*(?=a(*THEN)b)/ | 
|  | aabc | 
|  |  | 
|  | # -------------------------- | 
|  |  | 
|  | /(?>a(*:m))/imsx,mark | 
|  | a | 
|  |  | 
|  | /(?>(a)(*:m))/imsx,mark | 
|  | a | 
|  |  | 
|  | /(?<=a(*ACCEPT)b)c/ | 
|  | xacd | 
|  |  | 
|  | /(?<=(a(*ACCEPT)b))c/ | 
|  | xacd | 
|  |  | 
|  | /(?<=(a(*COMMIT)b))c/ | 
|  | xabcd | 
|  | \= Expect no match | 
|  | xacd | 
|  |  | 
|  | /(?<!a(*FAIL)b)c/ | 
|  | xcd | 
|  | acd | 
|  |  | 
|  | /(?<=a(*:N)b)c/mark | 
|  | xabcd | 
|  |  | 
|  | /(?<=a(*PRUNE)b)c/ | 
|  | xabcd | 
|  |  | 
|  | /(?<=a(*SKIP)b)c/ | 
|  | xabcd | 
|  |  | 
|  | /(?<=a(*THEN)b)c/ | 
|  | xabcd | 
|  |  | 
|  | /(a)(?2){2}(.)/ | 
|  | abcd | 
|  |  | 
|  | /(*MARK:A)(*PRUNE:B)(C|X)/mark | 
|  | C | 
|  | \= Expect no match | 
|  | D | 
|  |  | 
|  | /(*MARK:A)(*PRUNE:B)(C|X)/mark | 
|  | C | 
|  | \= Expect no match | 
|  | D | 
|  |  | 
|  | /(*MARK:A)(*THEN:B)(C|X)/mark | 
|  | C | 
|  | \= Expect no match | 
|  | D | 
|  |  | 
|  | /(*MARK:A)(*THEN:B)(C|X)/mark,no_start_optimize | 
|  | C | 
|  | \= Expect no match | 
|  | D | 
|  |  | 
|  | /(*MARK:A)(*THEN:B)(C|X)/mark | 
|  | C | 
|  | \= Expect no match | 
|  | D | 
|  |  | 
|  | /(*COMMIT)ABC/no_start_optimize | 
|  | ABC | 
|  | \= Expect no match | 
|  | DEFABC | 
|  |  | 
|  | /(*COMMIT)ABC/ | 
|  | ABC | 
|  | DEFABC | 
|  |  | 
|  | # This should fail, as the skip causes a bump to offset 3 (the skip). | 
|  |  | 
|  | /A(*MARK:A)A+(*SKIP)(B|Z) | AC/x,mark | 
|  | \= Expect no match | 
|  | AAAC | 
|  |  | 
|  | # Same | 
|  |  | 
|  | /A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/x,mark | 
|  | \= Expect no match | 
|  | AAAC | 
|  |  | 
|  | /A(*:A)A+(*SKIP)(B|Z) | AC/x,mark | 
|  | \= Expect no match | 
|  | AAAC | 
|  |  | 
|  | # This should fail, as a null name is the same as no name. | 
|  |  | 
|  | /A(*MARK:A)A+(*SKIP:)(B|Z) | AC/x,mark | 
|  | \= Expect no match | 
|  | AAAC | 
|  |  | 
|  | # A check on what happens after hitting a mark and them bumping along to | 
|  | # something that does not even start. Perl reports tags after the failures | 
|  | # here, though it does not when the individual letters are made into something | 
|  | # more complicated. | 
|  |  | 
|  | /A(*:A)B|XX(*:B)Y/mark | 
|  | AABC | 
|  | XXYZ | 
|  | \= Expect no match | 
|  | XAQQ | 
|  | XAQQXZZ | 
|  | AXQQQ | 
|  | AXXQQQ | 
|  |  | 
|  | /^(A(*THEN:A)B|C(*THEN:B)D)/mark | 
|  | AB | 
|  | CD | 
|  | \= Expect no match | 
|  | AC | 
|  | CB | 
|  |  | 
|  | /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/mark | 
|  | AB | 
|  | CD | 
|  | \= Expect no match | 
|  | AC | 
|  | CB | 
|  |  | 
|  | # An empty name does not pass back an empty string. It is the same as if no | 
|  | # name were given. | 
|  |  | 
|  | /^(A(*PRUNE:)B|C(*PRUNE:B)D)/mark | 
|  | AB | 
|  | CD | 
|  |  | 
|  | # PRUNE goes to next bumpalong; COMMIT does not. | 
|  |  | 
|  | /A(*PRUNE:A)B/mark | 
|  | ACAB | 
|  |  | 
|  | # Mark names can be duplicated. | 
|  |  | 
|  | /A(*:A)B|X(*:A)Y/mark | 
|  | AABC | 
|  | XXYZ | 
|  |  | 
|  | /b(*:m)f|a(*:n)w/mark | 
|  | aw | 
|  | \= Expect no match | 
|  | abc | 
|  |  | 
|  | /b(*:m)f|aw/mark | 
|  | abaw | 
|  | \= Expect no match | 
|  | abc | 
|  | abax | 
|  |  | 
|  | /A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC/x,mark | 
|  | AAAC | 
|  |  | 
|  | /(?=a(*MARK:A)b)..x/mark | 
|  | abxy | 
|  | \= Expect no match | 
|  | abpq | 
|  |  | 
|  | /(?=a(*MARK:A)b)..(*:Y)x/mark | 
|  | abxy | 
|  | \= Expect no match | 
|  | abpq | 
|  |  | 
|  | /(?=a(*PRUNE:A)b)..x/mark | 
|  | abxy | 
|  | \= Expect no match | 
|  | abpq | 
|  |  | 
|  | /(?=a(*PRUNE:A)b)..(*:Y)x/mark | 
|  | abxy | 
|  | \= Expect no match | 
|  | abpq | 
|  |  | 
|  | /(?=a(*THEN:A)b)..x/mark | 
|  | abxy | 
|  | \= Expect no match | 
|  | abpq | 
|  |  | 
|  | /(?=a(*THEN:A)b)..(*:Y)x/mark | 
|  | abxy | 
|  | \= Expect no match | 
|  | abpq | 
|  |  | 
|  | /(another)?(\1?)test/ | 
|  | hello world test | 
|  |  | 
|  | /(another)?(\1+)test/ | 
|  | \= Expect no match | 
|  | hello world test | 
|  |  | 
|  | /(a(*COMMIT)b){0}a(?1)|aac/ | 
|  | aac | 
|  |  | 
|  | /((?:a?)*)*c/ | 
|  | aac | 
|  |  | 
|  | /((?>a?)*)*c/ | 
|  | aac | 
|  |  | 
|  | /(?>.*?a)(?<=ba)/ | 
|  | aba | 
|  |  | 
|  | /(?:.*?a)(?<=ba)/ | 
|  | aba | 
|  |  | 
|  | /(?>.*?a)b/s | 
|  | aab | 
|  |  | 
|  | /(?>.*?a)b/ | 
|  | aab | 
|  |  | 
|  | /(?>^a)b/s | 
|  | \= Expect no match | 
|  | aab | 
|  |  | 
|  | /(?>.*?)(?<=(abcd)|(wxyz))/ | 
|  | alphabetabcd | 
|  | endingwxyz | 
|  |  | 
|  | /(?>.*)(?<=(abcd)|(wxyz))/ | 
|  | alphabetabcd | 
|  | endingwxyz | 
|  |  | 
|  | /(?>.*)foo/ | 
|  | \= Expect no match | 
|  | abcdfooxyz | 
|  |  | 
|  | /(?>.*?)foo/ | 
|  | abcdfooxyz | 
|  |  | 
|  | /(?:(a(*PRUNE)b)){0}(?:(?1)|ac)/ | 
|  | ac | 
|  |  | 
|  | /(?:(a(*SKIP)b)){0}(?:(?1)|ac)/ | 
|  | ac | 
|  |  | 
|  | /(?<=(*SKIP)ac)a/ | 
|  | \= Expect no match | 
|  | aa | 
|  |  | 
|  | /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/x,mark | 
|  | AAAC | 
|  |  | 
|  | /a(*SKIP:m)x|ac(*:n)(*SKIP:n)d|ac/mark | 
|  | acacd | 
|  |  | 
|  | /A(*SKIP:m)x|A(*SKIP:n)x|AB/mark | 
|  | AB | 
|  |  | 
|  | /((*SKIP:r)d){0}a(*SKIP:m)x|ac(*:n)|ac/mark | 
|  | acacd | 
|  |  | 
|  | # Tests that try to figure out how Perl works. My hypothesis is that the first | 
|  | # verb that is backtracked onto is the one that acts. This seems to be the case | 
|  | # almost all the time, but there is one exception that is perhaps a bug. | 
|  |  | 
|  | # This matches "aaaac"; each PRUNE advances one character until the subject no | 
|  | # longer starts with 5 'a's. | 
|  |  | 
|  | /aaaaa(*PRUNE)b|a+c/ | 
|  | aaaaaac | 
|  |  | 
|  | # Putting SKIP in front of PRUNE makes no difference, as it is never | 
|  | # backtracked onto, whether or not it has a label. | 
|  |  | 
|  | /aaaaa(*SKIP)(*PRUNE)b|a+c/ | 
|  | aaaaaac | 
|  |  | 
|  | /aaaaa(*SKIP:N)(*PRUNE)b|a+c/ | 
|  | aaaaaac | 
|  |  | 
|  | /aaaa(*:N)a(*SKIP:N)(*PRUNE)b|a+c/ | 
|  | aaaaaac | 
|  |  | 
|  | # Putting THEN in front makes no difference. | 
|  |  | 
|  | /aaaaa(*THEN)(*PRUNE)b|a+c/ | 
|  | aaaaaac | 
|  |  | 
|  | # However, putting COMMIT in front of the prune changes it to "no match". I | 
|  | # think this is inconsistent and possibly a bug. For the moment, running this | 
|  | # test is moved out of the Perl-compatible file. | 
|  |  | 
|  | /aaaaa(*COMMIT)(*PRUNE)b|a+c/ | 
|  |  | 
|  | # OK, lets play the same game again using SKIP instead of PRUNE. | 
|  |  | 
|  | # This matches "ac" because SKIP forces the next match to start on the | 
|  | # sixth "a". | 
|  |  | 
|  | /aaaaa(*SKIP)b|a+c/ | 
|  | aaaaaac | 
|  |  | 
|  | # Putting PRUNE in front makes no difference. | 
|  |  | 
|  | /aaaaa(*PRUNE)(*SKIP)b|a+c/ | 
|  | aaaaaac | 
|  |  | 
|  | # Putting THEN in front makes no difference. | 
|  |  | 
|  | /aaaaa(*THEN)(*SKIP)b|a+c/ | 
|  | aaaaaac | 
|  |  | 
|  | # In this case, neither does COMMIT. This still matches "ac". | 
|  |  | 
|  | /aaaaa(*COMMIT)(*SKIP)b|a+c/ | 
|  | aaaaaac | 
|  |  | 
|  | # This gives "no match", as expected. | 
|  |  | 
|  | /aaaaa(*COMMIT)b|a+c/ | 
|  | \= Expect no match | 
|  | aaaaaac | 
|  |  | 
|  | # ---- Tests using THEN ---- | 
|  |  | 
|  | # This matches "aaaaaac", as expected. | 
|  |  | 
|  | /aaaaa(*THEN)b|a+c/ | 
|  | aaaaaac | 
|  |  | 
|  | # Putting SKIP in front makes no difference. | 
|  |  | 
|  | /aaaaa(*SKIP)(*THEN)b|a+c/ | 
|  | aaaaaac | 
|  |  | 
|  | # Putting PRUNE in front makes no difference. | 
|  |  | 
|  | /aaaaa(*PRUNE)(*THEN)b|a+c/ | 
|  | aaaaaac | 
|  |  | 
|  | # Putting COMMIT in front makes no difference. | 
|  |  | 
|  | /aaaaa(*COMMIT)(*THEN)b|a+c/ | 
|  | aaaaaac | 
|  |  | 
|  | # End of "priority" tests | 
|  |  | 
|  | /aaaaa(*:m)(*PRUNE:m)(*SKIP:m)m|a+/ | 
|  | aaaaaa | 
|  |  | 
|  | /aaaaa(*:m)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/ | 
|  | aaaaaa | 
|  |  | 
|  | /aaaaa(*:n)(*PRUNE:m)(*SKIP:m)m|a+/ | 
|  | aaaaaa | 
|  |  | 
|  | /aaaaa(*:n)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/ | 
|  | aaaaaa | 
|  |  | 
|  | /a(*MARK:A)aa(*PRUNE:A)a(*SKIP:A)b|a+c/ | 
|  | aaaac | 
|  |  | 
|  | /a(*MARK:A)aa(*MARK:A)a(*SKIP:A)b|a+c/ | 
|  | aaaac | 
|  |  | 
|  | /aaa(*PRUNE:A)a(*SKIP:A)b|a+c/ | 
|  | aaaac | 
|  |  | 
|  | /aaa(*MARK:A)a(*SKIP:A)b|a+c/ | 
|  | aaaac | 
|  |  | 
|  | /a(*:m)a(*COMMIT)(*SKIP:m)b|a+c/mark | 
|  | aaaaaac | 
|  |  | 
|  | /.?(a|b(*THEN)c)/ | 
|  | ba | 
|  |  | 
|  | /(a(*COMMIT)b)c|abd/ | 
|  | abc | 
|  | \= Expect no match | 
|  | abd | 
|  |  | 
|  | /(?=a(*COMMIT)b)abc|abd/ | 
|  | abc | 
|  | abd | 
|  |  | 
|  | /(?>a(*COMMIT)b)c|abd/ | 
|  | abc | 
|  | abd | 
|  |  | 
|  | /a(?=b(*COMMIT)c)[^d]|abd/ | 
|  | abc | 
|  | \= Expect no match | 
|  | abd | 
|  |  | 
|  | /a(?=bc).|abd/ | 
|  | abd | 
|  | abc | 
|  |  | 
|  | /a(?>b(*COMMIT)c)d|abd/ | 
|  | \= Expect no match | 
|  | abceabd | 
|  |  | 
|  | /a(?>bc)d|abd/ | 
|  | abceabd | 
|  |  | 
|  | /(?>a(*COMMIT)b)c|abd/ | 
|  | abd | 
|  |  | 
|  | /(?>a(*COMMIT)c)d|abd/ | 
|  | \= Expect no match | 
|  | abd | 
|  |  | 
|  | /((?=a(*COMMIT)b)ab|ac){0}(?:(?1)|a(c))/ | 
|  | ac | 
|  |  | 
|  | # These tests were formerly in test 2, but changes in PCRE and Perl have | 
|  | # made them compatible. | 
|  |  | 
|  | /^(a)?(?(1)a|b)+$/ | 
|  | \= Expect no match | 
|  | a | 
|  |  | 
|  | /A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC/x,mark | 
|  | \= Expect no match | 
|  | AAAC | 
|  |  | 
|  | /^((abc|abcx)(*THEN)y|abcd)/ | 
|  | abcd | 
|  | \= Expect no match | 
|  | abcxy | 
|  |  | 
|  | /^((yes|no)(*THEN)(*F))?/ | 
|  | \= Expect no match | 
|  | yes | 
|  |  | 
|  | /(A (.*)   C? (*THEN)  | A D) (*FAIL)/x | 
|  | \= Expect no match | 
|  | AbcdCBefgBhiBqz | 
|  |  | 
|  | /(A (.*)   C? (*THEN)  | A D) z/x | 
|  | \= Expect no match | 
|  | AbcdCBefgBhiBqz | 
|  |  | 
|  | /(A (.*)   C? (*THEN)  | A D) \s* (*FAIL)/x | 
|  | \= Expect no match | 
|  | AbcdCBefgBhiBqz | 
|  |  | 
|  | /(A (.*)   C? (*THEN)  | A D) \s* z/x | 
|  | \= Expect no match | 
|  | AbcdCBefgBhiBqz | 
|  |  | 
|  | /(A (.*)   (?:C|) (*THEN)  | A D) (*FAIL)/x | 
|  | \= Expect no match | 
|  | AbcdCBefgBhiBqz | 
|  |  | 
|  | /(A (.*)   (?:C|) (*THEN)  | A D) z/x | 
|  | \= Expect no match | 
|  | AbcdCBefgBhiBqz | 
|  |  | 
|  | /(A (.*)   C{0,6} (*THEN)  | A D) (*FAIL)/x | 
|  | \= Expect no match | 
|  | AbcdCBefgBhiBqz | 
|  |  | 
|  | /(A (.*)   C{0,6} (*THEN)  | A D) z/x | 
|  | \= Expect no match | 
|  | AbcdCBefgBhiBqz | 
|  |  | 
|  | /(A (.*)   (CE){0,6} (*THEN)  | A D) (*FAIL)/x | 
|  | \= Expect no match | 
|  | AbcdCEBefgBhiBqz | 
|  |  | 
|  | /(A (.*)   (CE){0,6} (*THEN)  | A D) z/x | 
|  | \= Expect no match | 
|  | AbcdCEBefgBhiBqz | 
|  |  | 
|  | /(A (.*)   (CE*){0,6} (*THEN)  | A D) (*FAIL)/x | 
|  | \= Expect no match | 
|  | AbcdCBefgBhiBqz | 
|  |  | 
|  | /(A (.*)   (CE*){0,6} (*THEN)  | A D) z/x | 
|  | \= Expect no match | 
|  | AbcdCBefgBhiBqz | 
|  |  | 
|  | /(?=a(*COMMIT)b|ac)ac|ac/ | 
|  | \= Expect no match | 
|  | ac | 
|  |  | 
|  | /(?=a(*COMMIT)b|(ac)) ac | (a)c/x | 
|  | \= Expect no match | 
|  | ac | 
|  |  | 
|  | # ---- | 
|  |  | 
|  | /(?(?!b(*THEN)a)bn|bnn)/ | 
|  | bnn | 
|  |  | 
|  | /(?!b(*SKIP)a)bn|bnn/ | 
|  | bnn | 
|  |  | 
|  | /(?(?!b(*SKIP)a)bn|bnn)/ | 
|  | bnn | 
|  |  | 
|  | /(?!b(*PRUNE)a)bn|bnn/ | 
|  | bnn | 
|  |  | 
|  | /(?(?!b(*PRUNE)a)bn|bnn)/ | 
|  | bnn | 
|  |  | 
|  | /(?!b(*COMMIT)a)bn|bnn/ | 
|  | bnn | 
|  |  | 
|  | /(?(?!b(*COMMIT)a)bn|bnn)/ | 
|  | bnn | 
|  |  | 
|  | /(?=b(*SKIP)a)bn|bnn/ | 
|  | \= Expect no match | 
|  | bnn | 
|  |  | 
|  | /(?=b(*THEN)a)bn|bnn/ | 
|  | bnn | 
|  |  | 
|  | /^(?!a(*SKIP)b)/ | 
|  | ac | 
|  |  | 
|  | /^(?!a(*SKIP)b)../ | 
|  | acd | 
|  |  | 
|  | /(?!a(*SKIP)b)../ | 
|  | acd | 
|  |  | 
|  | /^(?(?!a(*SKIP)b))/ | 
|  | ac | 
|  |  | 
|  | /^(?!a(*PRUNE)b)../ | 
|  | acd | 
|  |  | 
|  | /(?!a(*PRUNE)b)../ | 
|  | acd | 
|  |  | 
|  | /(?!a(*COMMIT)b)ac|cd/ | 
|  | ac | 
|  |  | 
|  | /\A.*?(?:a|bc)/ | 
|  | ba | 
|  |  | 
|  | /^(A(*THEN)B|C(*THEN)D)/ | 
|  | CD | 
|  |  | 
|  | /(*:m(m)(?&y)(?(DEFINE)(?<y>b))/mark | 
|  | abc | 
|  |  | 
|  | /(*PRUNE:m(m)(?&y)(?(DEFINE)(?<y>b))/mark | 
|  | abc | 
|  |  | 
|  | /(*SKIP:m(m)(?&y)(?(DEFINE)(?<y>b))/mark | 
|  | abc | 
|  |  | 
|  | /(*THEN:m(m)(?&y)(?(DEFINE)(?<y>b))/mark | 
|  | abc | 
|  |  | 
|  | /^\d*\w{4}/ | 
|  | 1234 | 
|  | \= Expect no match | 
|  | 123 | 
|  |  | 
|  | /^[^b]*\w{4}/ | 
|  | aaaa | 
|  | \= Expect no match | 
|  | aaa | 
|  |  | 
|  | /^[^b]*\w{4}/i | 
|  | aaaa | 
|  | \= Expect no match | 
|  | aaa | 
|  |  | 
|  | /^a*\w{4}/ | 
|  | aaaa | 
|  | \= Expect no match | 
|  | aaa | 
|  |  | 
|  | /^a*\w{4}/i | 
|  | aaaa | 
|  | \= Expect no match | 
|  | aaa | 
|  |  | 
|  | /(?:(?<n>foo)|(?<n>bar))\k<n>/dupnames | 
|  | foofoo | 
|  | barbar | 
|  |  | 
|  | /(?<n>A)(?:(?<n>foo)|(?<n>bar))\k<n>/dupnames | 
|  | AfooA | 
|  | AbarA | 
|  | \= Expect no match | 
|  | Afoofoo | 
|  | Abarbar | 
|  |  | 
|  | /^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/ | 
|  | 1 IN SOA non-sp1 non-sp2( | 
|  |  | 
|  | /^ (?:(?<A>A)|(?'B'B)(?<A>A)) (?('A')x) (?(<B>)y)$/x,dupnames | 
|  | Ax | 
|  | BAxy | 
|  |  | 
|  | #if !ebcdic | 
|  |  | 
|  | /^A\xBz/ | 
|  | A\x{0B}z | 
|  |  | 
|  | /^A\xABz/ | 
|  | A\x{AB}z | 
|  |  | 
|  | /^A\xABCz/ | 
|  | A\x{AB}Cz | 
|  |  | 
|  | /^A\o{123}B/ | 
|  | A\123B | 
|  |  | 
|  | #endif | 
|  |  | 
|  | / ^ a + + b $ /x | 
|  | aaaab | 
|  |  | 
|  | / ^ a + #comment | 
|  | + b $ /x | 
|  | aaaab | 
|  |  | 
|  | / ^ a + #comment | 
|  | #comment | 
|  | + b $ /x | 
|  | aaaab | 
|  |  | 
|  | / ^ (?> a + ) b $ /x | 
|  | aaaab | 
|  |  | 
|  | / ^ ( a + ) + + \w $ /x | 
|  | aaaab | 
|  |  | 
|  | /(?:a\Kb)*+/aftertext | 
|  | ababc | 
|  |  | 
|  | /(?>a\Kb)*/aftertext | 
|  | ababc | 
|  |  | 
|  | /(?:a\Kb)*/aftertext | 
|  | ababc | 
|  |  | 
|  | /(a\Kb)*+/aftertext | 
|  | ababc | 
|  |  | 
|  | /(a\Kb)*/aftertext | 
|  | ababc | 
|  |  | 
|  | /(?:x|(?:(xx|yy)+|x|x|x|x|x)|a|a|a)bc/ | 
|  | \= Expect no match | 
|  | acb | 
|  |  | 
|  | /\A(?:[^\"]++|\"(?:[^\"]*+|\"\")*+\")++/ | 
|  | NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED | 
|  |  | 
|  | /\A(?:[^\"]++|\"(?:[^\"]++|\"\")*+\")++/ | 
|  | NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED | 
|  |  | 
|  | /\A(?:[^\"]++|\"(?:[^\"]++|\"\")++\")++/ | 
|  | NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED | 
|  |  | 
|  | /\A([^\"1]++|[\"2]([^\"3]*+|[\"4][\"5])*+[\"6])++/ | 
|  | NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED | 
|  |  | 
|  | /^\w+(?>\s*)(?<=\w)/ | 
|  | test test | 
|  |  | 
|  | /(?P<same>a)(?P<same>b)/g,dupnames | 
|  | abbaba | 
|  |  | 
|  | /(?P<same>a)(?P<same>b)(?P=same)/g,dupnames | 
|  | abbaba | 
|  |  | 
|  | /(?P=same)?(?P<same>a)(?P<same>b)/g,dupnames | 
|  | abbaba | 
|  |  | 
|  | /(?:(?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)?/g,dupnames | 
|  | \= Expect no match | 
|  | bbbaaaccccaaabbbcc | 
|  |  | 
|  | /(?P<Name>a)?(?P<Name2>b)?(?(<Name>)c|d)*l/ | 
|  | acl | 
|  | bdl | 
|  | adl | 
|  | bcl | 
|  |  | 
|  | /\sabc/ | 
|  | \x{0b}abc | 
|  |  | 
|  | /[\Qa]\E]+/ | 
|  | aa]] | 
|  |  | 
|  | /[\Q]a\E]+/ | 
|  | aa]] | 
|  |  | 
|  | /A((((((((a))))))))\8B/ | 
|  | AaaB | 
|  |  | 
|  | /A(((((((((a)))))))))\9B/ | 
|  | AaaB | 
|  |  | 
|  | /A[\8\9]B/ | 
|  | A8B | 
|  | A9B | 
|  |  | 
|  | /(|ab)*?d/ | 
|  | abd | 
|  | xyd | 
|  |  | 
|  | /(?:((abcd))|(((?:(?:(?:(?:abc|(?:abcdef))))b)abcdefghi)abc)|((*ACCEPT)))/ | 
|  | 1234abcd | 
|  |  | 
|  | /(\2|a)(\1)/ | 
|  | aaa | 
|  |  | 
|  | /(\2)(\1)/ | 
|  |  | 
|  | /Z*(|d*){216}/ | 
|  |  | 
|  | /(?1)(?#?'){8}(a)/ | 
|  | baaaaaaaaac | 
|  |  | 
|  | /((((((((((((x))))))))))))\12/ | 
|  | xx | 
|  |  | 
|  | /A[\8]B[\9]C/ | 
|  | A8B9C | 
|  |  | 
|  | #if !ebcdic | 
|  |  | 
|  | /(?1)()((((((\1++))\x85)+)|))/ | 
|  | \x85\x85 | 
|  |  | 
|  | #endif | 
|  |  | 
|  | /(?|(\k'Pm')|(?'Pm'))/ | 
|  | abcd | 
|  |  | 
|  | /(?|(aaa)|(b))\g{1}/ | 
|  | aaaaaa | 
|  | bb | 
|  |  | 
|  | /(?|(aaa)|(b))(?1)/ | 
|  | aaaaaa | 
|  | baaa | 
|  | \= Expect no match | 
|  | bb | 
|  |  | 
|  | /(?|(aaa)|(b))/ | 
|  | xaaa | 
|  | xbc | 
|  |  | 
|  | /(?|(?'a'aaa)|(?'a'b))\k'a'/ | 
|  | aaaaaa | 
|  | bb | 
|  |  | 
|  | /(?|(?'a'aaa)|(?'a'b))(?'a'cccc)\k'a'/dupnames | 
|  | aaaccccaaa | 
|  | bccccb | 
|  |  | 
|  | # /x does not apply to MARK labels | 
|  |  | 
|  | /x (*MARK:ab cd # comment | 
|  | ef) x/x,mark | 
|  | axxz | 
|  |  | 
|  | /(?<=a(B){0}c)X/ | 
|  | acX | 
|  |  | 
|  | /(?<DEFINE>b)(?(DEFINE)(a+))(?&DEFINE)/ | 
|  | bbbb | 
|  | \= Expect no match | 
|  | baaab | 
|  |  | 
|  | /(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[,;:])(?=.{8,16})(?!.*[\s])/ | 
|  | \   Fred:099 | 
|  |  | 
|  | /(?=.*X)X$/ | 
|  | \  X | 
|  |  | 
|  | /(?s)(?=.*?)b/ | 
|  | aabc | 
|  |  | 
|  | /(Z)(a)\2{1,2}?(?-i)\1X/i | 
|  | ZaAAZX | 
|  |  | 
|  | /(?'c')XX(?'YYYYYYYYYYYYYYYYYYYYYYYCl')/ | 
|  |  | 
|  | /a+(?:|b)a/ | 
|  | aaaa | 
|  |  | 
|  | /X?(R||){3335}/ | 
|  |  | 
|  | /(?1)(A(*COMMIT)|B)D/ | 
|  | ABD | 
|  | XABD | 
|  | BAD | 
|  | ABXABD | 
|  | \= Expect no match | 
|  | ABX | 
|  |  | 
|  | /(?(DEFINE)(?<m> 1? (?=(?<cond>2)?) 1 2 (?('cond')|3))) | 
|  | \A | 
|  | () | 
|  | (?&m) | 
|  | \Z/x | 
|  | 123 | 
|  |  | 
|  | /^(?: | 
|  | (?: A| (1? (?=(?<cond>2)?) (1) 2 (?('cond')|3)) ) | 
|  | (Z) | 
|  | )+$/x | 
|  | AZ123Z | 
|  | \= Expect no match | 
|  | AZ12Z | 
|  |  | 
|  | /^ (?(DEFINE) ( (?!(a)\2b)..) )   ()(?1)  /x | 
|  | acb | 
|  | \= Expect no match | 
|  | aab | 
|  |  | 
|  | /(?>ab|abab){1,5}?M/ | 
|  | abababababababababababM | 
|  |  | 
|  | /(?>ab|abab){2}?M/ | 
|  | abababM | 
|  |  | 
|  | /((?(?=(a))a)+k)/ | 
|  | bbak | 
|  |  | 
|  | /((?(?=(a))a|)+k)/ | 
|  | bbak | 
|  |  | 
|  | /(?(?!(b))a|b)+k/ | 
|  | ababbalbbadabak | 
|  |  | 
|  | /(?!(b))c|b/ | 
|  | Ab | 
|  | Ac | 
|  |  | 
|  | /(?=(b))b|c/ | 
|  | Ab | 
|  | Ac | 
|  |  | 
|  | /^(.|(.)(?1)\2)$/ | 
|  | a | 
|  | aba | 
|  | abcba | 
|  | ababa | 
|  | abcdcba | 
|  |  | 
|  | /^((.)(?1)\2|.?)$/ | 
|  | a | 
|  | aba | 
|  | abba | 
|  | abcba | 
|  | ababa | 
|  | abccba | 
|  | abcdcba | 
|  | abcddcba | 
|  |  | 
|  | /^(.)(\1|a(?2))/ | 
|  | bab | 
|  |  | 
|  | /^(.|(.)(?1)?\2)$/ | 
|  | abcba | 
|  |  | 
|  | /^(?(?=(a))abc|def)/ | 
|  | abc | 
|  |  | 
|  | /^(?(?!(a))def|abc)/ | 
|  | abc | 
|  |  | 
|  | /^(?(?=(a)(*ACCEPT))abc|def)/ | 
|  | abc | 
|  |  | 
|  | /^(?(?!(a)(*ACCEPT))def|abc)/ | 
|  | abc | 
|  |  | 
|  | /^(?1)\d{3}(a)/ | 
|  | a123a | 
|  |  | 
|  | #if !ebcdic | 
|  |  | 
|  | # This pattern uses a lot of named subpatterns in order to match email | 
|  | # addresses in various formats. It's a heavy test for named subpatterns. In the | 
|  | # <atext> group, slash is coded as \x{2f} so that this pattern can also be | 
|  | # processed by perltest.sh, which does not cater for an escaped delimiter | 
|  | # within the pattern. $ within the pattern must also be escaped. All $ and @ | 
|  | # characters in subject strings are escaped so that Perl doesn't interpret them | 
|  | # as variable insertions and " characters must also be escaped for Perl. | 
|  |  | 
|  | # This set of subpatterns is more or less a direct transliteration of the BNF | 
|  | # definitions in RFC2822, without any of the obsolete features. The addition of | 
|  | # a possessive + to the definition of <phrase> reduced the match limit in PCRE2 | 
|  | # from over 5 million to just under 400, and eliminated a very noticeable delay | 
|  | # when this file was passed to perltest.sh. | 
|  |  | 
|  | /(?ix)(?(DEFINE) | 
|  | (?<addr_spec>       (?&local_part) \@ (?&domain) ) | 
|  | (?<angle_addr>      (?&CFWS)?+ < (?&addr_spec) > (?&CFWS)?+ ) | 
|  | (?<atext>           [a-z\d!#\$%&'*+-\x{2f}=?^_`{|}~] ) | 
|  | (?<atom>            (?&CFWS)?+ (?&atext)+ (?&CFWS)?+ ) | 
|  | (?<ccontent>        (?&ctext) | (?"ed_pair) | (?&comment) ) | 
|  | (?<ctext>           [^\x{9}\x{10}\x{13}\x{7f}-\x{ff}\ ()\\] ) | 
|  | (?<comment>         \( (?: (?&FWS)?+ (?&ccontent) )*+ (?&FWS)?+ \) ) | 
|  | (?<CFWS>            (?: (?&FWS)?+ (?&comment) )* (?# NOT possessive) | 
|  | (?: (?&FWS)?+ (?&comment) | (?&FWS) ) ) | 
|  | (?<dcontent>        (?&dtext) | (?"ed_pair) ) | 
|  | (?<display_name>    (?&phrase) ) | 
|  | (?<domain>          (?&dot_atom) | (?&domain_literal) ) | 
|  | (?<domain_literal>  (?&CFWS)?+ \[ (?: (?&FWS)?+ (?&dcontent) )* (?&FWS)?+ \] | 
|  | (?&CFWS)?+ ) | 
|  | (?<dot_atom>        (?&CFWS)?+ (?&dot_atom_text) (?&CFWS)?+ ) | 
|  | (?<dot_atom_text>   (?&atext)++ (?: \. (?&atext)++)*+ ) | 
|  | (?<dtext>           [^\x{9}\x{10}\x{13}\x{7f}-\x{ff}\ \[\]\\] ) | 
|  | (?<FWS>             (?: [\t\ ]*+ \n)?+ [\t\ ]++ ) | 
|  | (?<local_part>      (?&dot_atom) | (?"ed_string)  ) | 
|  | (?<mailbox>         (?&name_addr) | (?&addr_spec) ) | 
|  | (?<name_addr>       (?&display_name)? (?&angle_addr) ) | 
|  | (?<phrase>          (?&word)++ ) | 
|  | (?<qcontent>        (?&qtext) | (?"ed_pair) ) | 
|  | (?<quoted_pair>     " (?&text) ) | 
|  | (?<quoted_string>   (?&CFWS)?+ " (?: (?&FWS)?+ (?&qcontent))* (?&FWS)?+ " | 
|  | (?&CFWS)?+ ) | 
|  | (?<qtext>           [^\x{9}\x{10}\x{13}\x{7f}-\x{ff}\ "\\] ) | 
|  | (?<text>            [^\r\n] ) | 
|  | (?<word>            (?&atom) | (?"ed_string) ) | 
|  | ) # End DEFINE | 
|  | ^(?&mailbox)$/ | 
|  | Alan Other <user\@dom.ain> | 
|  | <user\@dom.ain> | 
|  | user\@dom.ain | 
|  | user\@[] | 
|  | user\@[domain literal] | 
|  | user\@[domain literal with \"[square brackets\"] inside] | 
|  | \"A. Other\" <user.1234\@dom.ain> (a comment) | 
|  | A. Other <user.1234\@dom.ain> (a comment) | 
|  | \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay | 
|  | \= Expect no match | 
|  | A missing angle <user\@some.where | 
|  | The quick brown fox | 
|  |  | 
|  | #endif | 
|  |  | 
|  | # -------------------------------------------------------------------------- | 
|  |  | 
|  | #if !ebcdic | 
|  |  | 
|  | # This pattern uses named groups to match default PCRE2 patterns. It's another | 
|  | # heavy test for named subpatterns. Once again, code slash as \x{2f} and escape | 
|  | # $ even in classes so that this works with pcre2test. | 
|  |  | 
|  | /(?sx)(?(DEFINE) | 
|  |  | 
|  | (?<assertion>         (?&simple_assertion) | (?&lookaround) ) | 
|  |  | 
|  | (?<atomic_group>      \( \? > (?®ex) \) ) | 
|  |  | 
|  | (?<back_reference>    \\ \d+ | | 
|  | \\g (?: [+-]?\d+ | \{ (?: [+-]?\d+ | (?&groupname) ) \} ) | | 
|  | \\k <(?&groupname)> | | 
|  | \\k '(?&groupname)' | | 
|  | \\k \{ (?&groupname) \} | | 
|  | \( \? P= (?&groupname) \) ) | 
|  |  | 
|  | (?<branch>            (?:(?&assertion) | | 
|  | (?&callout) | | 
|  | (?&comment) | | 
|  | (?&option_setting) | | 
|  | (?&qualified_item) | | 
|  | (?"ed_string) | | 
|  | (?"ed_string_empty) | | 
|  | (?&special_escape) | | 
|  | (?&verb) | 
|  | )* ) | 
|  |  | 
|  | (?<callout>           \(\?C (?: \d+ | | 
|  | (?: (?<D>["'`^%\#\$]) | 
|  | (?: \k'D'\k'D' | (?!\k'D') . )* \k'D' | | 
|  | \{ (?: \}\} | [^}]*+ )* \} ) | 
|  | )? \) ) | 
|  |  | 
|  | (?<capturing_group>   \( (?: \? P? < (?&groupname) > | \? ' (?&groupname) ' )? | 
|  | (?®ex) \) ) | 
|  |  | 
|  | (?<character_class>   \[ \^?+ (?: \] (?&class_item)* | (?&class_item)+ ) \] ) | 
|  |  | 
|  | (?<character_type>    (?! \\N\{\w+\} ) \\ [dDsSwWhHvVRN] ) | 
|  |  | 
|  | (?<class_item>        (?: \[ : (?: | 
|  | alnum|alpha|ascii|blank|cntrl|digit|graph|lower|print| | 
|  | punct|space|upper|word|xdigit | 
|  | ) : \] | | 
|  | (?"ed_string) | | 
|  | (?"ed_string_empty) | | 
|  | (?&escaped_character) | | 
|  | (?&character_type) | | 
|  | [^]] ) ) | 
|  |  | 
|  | (?<comment>           \(\?\# [^)]* \) | (?"ed_string_empty) | \\E ) | 
|  |  | 
|  | (?<condition>         (?: \( [+-]? \d+ \) | | 
|  | \( < (?&groupname) > \) | | 
|  | \( ' (?&groupname) ' \) | | 
|  | \( R \d* \) | | 
|  | \( R & (?&groupname) \) | | 
|  | \( (?&groupname) \) | | 
|  | \( DEFINE \) | | 
|  | \( VERSION >?=\d+(?:\.\d\d?)? \) | | 
|  | (?&callout)?+ (?&comment)* (?&lookaround) ) ) | 
|  |  | 
|  | (?<conditional_group> \(\? (?&condition) (?&branch) (?: \| (?&branch) )? \) ) | 
|  |  | 
|  | (?<delimited_regex>   (?<delimiter> [-\x{2f}!"'`=_:;,%&@~]) (?®ex) | 
|  | \k'delimiter' .* ) | 
|  |  | 
|  | (?<escaped_character> \\ (?: 0[0-7]{1,2} | [0-7]{1,3} | o\{ [0-7]+ \} | | 
|  | x \{ (*COMMIT) [[:xdigit:]]* \} | x [[:xdigit:]]{0,2} | | 
|  | [aefnrt] | c[[:print:]] | | 
|  | [^[:alnum:]] ) ) | 
|  |  | 
|  | (?<group>             (?&capturing_group) | (?&non_capturing_group) | | 
|  | (?&resetting_group) | (?&atomic_group) | | 
|  | (?&conditional_group) ) | 
|  |  | 
|  | (?<groupname>         [a-zA-Z_]\w* ) | 
|  |  | 
|  | (?<literal_character> (?! (?&range_qualifier) ) [^[()|*+?.\$\\] ) | 
|  |  | 
|  | (?<lookaround>        \(\? (?: = | ! | <= | <! ) (?®ex) \) ) | 
|  |  | 
|  | (?<non_capturing_group> \(\? [iJmnsUx-]* : (?®ex) \) ) | 
|  |  | 
|  | (?<option_setting>    \(\? [iJmnsUx-]* \) ) | 
|  |  | 
|  | (?<qualified_item>    (?:\. | | 
|  | (?&lookaround) | | 
|  | (?&back_reference) | | 
|  | (?&character_class) | | 
|  | (?&character_type) | | 
|  | (?&escaped_character) | | 
|  | (?&group) | | 
|  | (?&subroutine_call) | | 
|  | (?&literal_character) | | 
|  | (?"ed_string) | 
|  | ) (?&comment)? (?&qualifier)? ) | 
|  |  | 
|  | (?<qualifier>         (?: [?*+] | (?&range_qualifier) ) [+?]? ) | 
|  |  | 
|  | (?<quoted_string>     (?: \\Q (?: (?!\\E | \k'delimiter') . )++ (?: \\E | ) ) ) | 
|  |  | 
|  | (?<quoted_string_empty>  \\Q\\E ) | 
|  |  | 
|  | (?<range_qualifier>   \{ (?: \d+ (?: , \d* )? | , \d+ ) \} ) | 
|  |  | 
|  | (?<regex>             (?&start_item)* (?&branch) (?: \| (?&branch) )* ) | 
|  |  | 
|  | (?<resetting_group>   \( \? \| (?®ex) \) ) | 
|  |  | 
|  | (?<simple_assertion>  \^ | \$ | \\A | \\b | \\B | \\G | \\z | \\Z ) | 
|  |  | 
|  | (?<special_escape>    \\K ) | 
|  |  | 
|  | (?<start_item>        \( \* (?: | 
|  | ANY | | 
|  | ANYCRLF | | 
|  | BSR_ANYCRLF | | 
|  | BSR_UNICODE | | 
|  | CR | | 
|  | CRLF | | 
|  | LF | | 
|  | LIMIT_MATCH=\d+ | | 
|  | LIMIT_DEPTH=\d+ | | 
|  | LIMIT_HEAP=\d+ | | 
|  | NOTEMPTY | | 
|  | NOTEMPTY_ATSTART | | 
|  | NO_AUTO_POSSESS | | 
|  | NO_DOTSTAR_ANCHOR | | 
|  | NO_JIT | | 
|  | NO_START_OPT | | 
|  | NUL | | 
|  | UTF | | 
|  | UCP ) \) ) | 
|  |  | 
|  | (?<subroutine_call>   (?: \(\?R\) | \(\?[+-]?\d+\) | | 
|  | \(\? (?: & | P> ) (?&groupname) \) | | 
|  | \\g < (?&groupname) > | | 
|  | \\g ' (?&groupname) ' | | 
|  | \\g < [+-]? \d+ > | | 
|  | \\g ' [+-]? \d+ ) ) | 
|  |  | 
|  | (?<verb>              \(\* (?: ACCEPT | FAIL | F | COMMIT | | 
|  | (?:MARK)?:(?&verbname) | | 
|  | (?:PRUNE|SKIP|THEN) (?: : (?&verbname)? )? ) \) ) | 
|  |  | 
|  | (?<verbname>          [^)]+ ) | 
|  |  | 
|  | ) # End DEFINE | 
|  | # Kick it all off... | 
|  | ^(?&delimited_regex)$/subject_literal,jitstack=256 | 
|  | /^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/ | 
|  | /(cat(a(ract|tonic)|erpillar)) \1()2(3)/ | 
|  | /^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/ | 
|  | /^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/ | 
|  | /<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>/is | 
|  | /^(?(DEFINE) (?<A> a) (?<B> b) )  (?&A) (?&B) / | 
|  | /(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}/ | 
|  | /\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))/ | 
|  | /^(\w++|\s++)*$/ | 
|  | /a+b?(*THEN)c+(*FAIL)/ | 
|  | /(A (A|B(*ACCEPT)|C) D)(E)/x | 
|  | /^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$/i | 
|  | /A(*PRUNE)B(*SKIP)C(*THEN)D(*COMMIT)E(*F)F(*FAIL)G(?!)H(*ACCEPT)I/B | 
|  | /(?C`a``b`)(?C'a''b')(?C"a""b")(?C^a^^b^)(?C%a%%b%)(?C#a##b#)(?C$a$$b$)(?C{a}}b})/B,callout_info | 
|  | /(?sx)(?(DEFINE)(?<assertion> (?&simple_assertion) | (?&lookaround) )(?<atomic_group> \( \? > (?®ex) \) )(?<back_reference> \\ \d+ | \\g (?: [+-]?\d+ | \{ (?: [+-]?\d+ | (?&groupname) ) \} ) | \\k <(?&groupname)> | \\k '(?&groupname)' | \\k \{ (?&groupname) \} | \( \? P= (?&groupname) \) )(?<branch> (?:(?&assertion) | (?&callout) | (?&comment) | (?&option_setting) | (?&qualified_item) | (?"ed_string) | (?"ed_string_empty) | (?&special_escape) | (?&verb) )* )(?<callout> \(\?C (?: \d+ | (?: (?<D>["'`^%\#\$]) (?: \k'D'\k'D' | (?!\k'D') . )* \k'D' | \{ (?: \}\} | [^}]*+ )* \} ) )? \) )(?<capturing_group> \( (?: \? P? < (?&groupname) > | \? ' (?&groupname) ' )? (?®ex) \) )(?<character_class> \[ \^?+ (?: \] (?&class_item)* | (?&class_item)+ ) \] )(?<character_type> (?! \\N\{\w+\} ) \\ [dDsSwWhHvVRN] )(?<class_item> (?: \[ : (?: alnum|alpha|ascii|blank|cntrl|digit|graph|lower|print| punct|space|upper|word|xdigit ) : \] | (?"ed_string) | (?"ed_string_empty) | (?&escaped_character) | (?&character_type) | [^]] ) )(?<comment> \(\?\# [^)]* \) | (?"ed_string_empty) | \\E )(?<condition> (?: \( [+-]? \d+ \) | \( < (?&groupname) > \) | \( ' (?&groupname) ' \) | \( R \d* \) | \( R & (?&groupname) \) | \( (?&groupname) \) | \( DEFINE \) | \( VERSION >?=\d+(?:\.\d\d?)? \) | (?&callout)?+ (?&comment)* (?&lookaround) ) )(?<conditional_group> \(\? (?&condition) (?&branch) (?: \| (?&branch) )? \) )(?<delimited_regex> (?<delimiter> [-\x{2f}!"'`=_:;,%&@~]) (?®ex) \k'delimiter' .* )(?<escaped_character> \\ (?: 0[0-7]{1,2} | [0-7]{1,3} | o\{ [0-7]+ \} | x \{ (*COMMIT) [[:xdigit:]]* \} | x [[:xdigit:]]{0,2} | [aefnrt] | c[[:print:]] | [^[:alnum:]] ) )(?<group> (?&capturing_group) | (?&non_capturing_group) | (?&resetting_group) | (?&atomic_group) | (?&conditional_group) )(?<groupname> [a-zA-Z_]\w* )(?<literal_character> (?! (?&range_qualifier) ) [^[()|*+?.\$\\] )(?<lookaround> \(\? (?: = | ! | <= | <! ) (?®ex) \) )(?<non_capturing_group> \(\? [iJmnsUx-]* : (?®ex) \) )(?<option_setting> \(\? [iJmnsUx-]* \) )(?<qualified_item> (?:\. | (?&lookaround) | (?&back_reference) | (?&character_class) | (?&character_type) | (?&escaped_character) | (?&group) | (?&subroutine_call) | (?&literal_character) | (?"ed_string) ) (?&comment)? (?&qualifier)? )(?<qualifier> (?: [?*+] | (?&range_qualifier) ) [+?]? )(?<quoted_string> (?: \\Q (?: (?!\\E | \k'delimiter') . )++ (?: \\E | ) ) ) (?<quoted_string_empty> \\Q\\E ) (?<range_qualifier> \{ (?: \d+ (?: , \d* )? | , \d+ ) \} )(?<regex> (?&start_item)* (?&branch) (?: \| (?&branch) )* )(?<resetting_group> \( \? \| (?®ex) \) )(?<simple_assertion> \^ | \$ | \\A | \\b | \\B | \\G | \\z | \\Z )(?<special_escape> \\K )(?<start_item> \( \* (?: ANY | ANYCRLF | BSR_ANYCRLF | BSR_UNICODE | CR | CRLF | LF | LIMIT_MATCH=\d+ | LIMIT_DEPTH=\d+ | LIMIT_HEAP=\d+ | NOTEMPTY | NOTEMPTY_ATSTART | NO_AUTO_POSSESS | NO_DOTSTAR_ANCHOR | NO_JIT | NO_START_OPT | NUL | UTF | UCP ) \) )(?<subroutine_call> (?: \(\?R\) | \(\?[+-]?\d+\) | \(\? (?: & | P> ) (?&groupname) \) | \\g < (?&groupname) > | \\g ' (?&groupname) ' | \\g < [+-]? \d+ > | \\g ' [+-]? \d+ ) )(?<verb> \(\* (?: ACCEPT | FAIL | F | COMMIT | (?:MARK)?:(?&verbname) | (?:PRUNE|SKIP|THEN) (?: : (?&verbname)? )? ) \) )(?<verbname> [^)]+ ))^(?&delimited_regex)$/ | 
|  | \= Expect no match | 
|  | /((?(?C'')\QX\E(?!((?(?C'')(?!X=X));=)r*X=X));=)/ | 
|  | /(?:(?(2y)a|b)(X))+/ | 
|  | /a(*MARK)b/ | 
|  | /a(*CR)b/ | 
|  | /(?P<abn>(?P=abn)(?<badstufxxx)/ | 
|  |  | 
|  | #endif | 
|  |  | 
|  | # -------------------------------------------------------------------------- | 
|  |  | 
|  | /<(?x:[a b])>/xx | 
|  | < > | 
|  |  | 
|  | /<(?:[a b])>/xx | 
|  | < > | 
|  |  | 
|  | /<(?xxx:[a b])>/ | 
|  | < > | 
|  |  | 
|  | /<(?-x:[a b])>/xx | 
|  | < > | 
|  |  | 
|  | /[[:digit:]-]+/ | 
|  | 12-24 | 
|  |  | 
|  | /((?<=((*ACCEPT)) )\1?\b) / | 
|  | \= Expect no match | 
|  | ((?<=((*ACCEPT)) )\\1?\\b)\x20 | 
|  |  | 
|  | /((?<=((*ACCEPT))X)\1?Y)\1/ | 
|  | XYYZ | 
|  |  | 
|  | /((?<=((*ACCEPT))X)\1?Y(*ACCEPT))\1/ | 
|  | XYYZ | 
|  |  | 
|  | /(?(DEFINE)(?<optional_a>a?)X)^(?&optional_a)a$/ | 
|  | aa | 
|  | a | 
|  |  | 
|  | /^(a?)b(?1)a/ | 
|  | abaa | 
|  | aba | 
|  | baa | 
|  | ba | 
|  |  | 
|  | /^(a?)+b(?1)a/ | 
|  | abaa | 
|  | aba | 
|  | baa | 
|  | ba | 
|  |  | 
|  | /^(a?)++b(?1)a/ | 
|  | abaa | 
|  | aba | 
|  | baa | 
|  | ba | 
|  |  | 
|  | /^(a?)+b/ | 
|  | b | 
|  | ab | 
|  | aaab | 
|  |  | 
|  | /(?=a+)a(a+)++b/ | 
|  | aab | 
|  |  | 
|  | /(?<=\G.)/g,aftertext | 
|  | abc | 
|  |  | 
|  | /(?<=(?=.)?)/ | 
|  |  | 
|  | /(?<=(?=.)?+)/ | 
|  |  | 
|  | /(?<=(?=.)*)/ | 
|  |  | 
|  | /(?<=(?=.){4,5})/ | 
|  |  | 
|  | /(?<=(?=.){4,5}x)/ | 
|  |  | 
|  | /a(?=.(*:X))(*SKIP:X)(*F)|(.)/ | 
|  | abc | 
|  |  | 
|  | /a(?>(*:X))(*SKIP:X)(*F)|(.)/ | 
|  | abc | 
|  |  | 
|  | /a(?:(*:X))(*SKIP:X)(*F)|(.)/ | 
|  | abc | 
|  |  | 
|  | #pattern no_start_optimize | 
|  |  | 
|  | /(?>a(*:1))(?>b(*:1))(*SKIP:1)x|.*/ | 
|  | abc | 
|  |  | 
|  | /(?>a(*:1))(?>b)(*SKIP:1)x|.*/ | 
|  | abc | 
|  |  | 
|  | #subject mark | 
|  |  | 
|  | /a(*ACCEPT:X)b/ | 
|  | abc | 
|  |  | 
|  | /(?=a(*ACCEPT:QQ)bc)axyz/ | 
|  | axyz | 
|  |  | 
|  | /(?(DEFINE)(a(*ACCEPT:X)))(?1)b/ | 
|  | abc | 
|  |  | 
|  | /a(*F:X)b/ | 
|  | abc | 
|  |  | 
|  | /(?(DEFINE)(a(*F:X)))(?1)b/ | 
|  | abc | 
|  |  | 
|  | /a(*COMMIT:X)b/ | 
|  | abc | 
|  |  | 
|  | /(?(DEFINE)(a(*COMMIT:X)))(?1)b/ | 
|  | abc | 
|  |  | 
|  | /a+(*:Z)b(*COMMIT:X)(*SKIP:Z)c|.*/ | 
|  | aaaabd | 
|  |  | 
|  | /a+(*:Z)b(*COMMIT:X)(*SKIP:X)c|.*/ | 
|  | aaaabd | 
|  |  | 
|  | /a(*COMMIT:X)b/ | 
|  | axabc | 
|  |  | 
|  | #pattern -no_start_optimize | 
|  | #subject -mark | 
|  |  | 
|  | /(.COMMIT)(*COMMIT::::::::::interal error:::)/ | 
|  |  | 
|  | /(*COMMIT:ÿÿ)/ | 
|  |  | 
|  | /(*COMMIT:]w)/ | 
|  |  | 
|  | /(?i)A(?^)B(?^x:C D)(?^i)e f/ | 
|  | aBCDE F | 
|  | \= Expect no match | 
|  | aBCDEF | 
|  | AbCDe f | 
|  |  | 
|  | /(*pla:foo).{6}/ | 
|  | abcfoobarxyz | 
|  | \= Expect no match | 
|  | abcfooba | 
|  |  | 
|  | /(*positive_lookahead:foo).{6}/ | 
|  | abcfoobarxyz | 
|  |  | 
|  | /(?(*pla:foo).{6}|a..)/ | 
|  | foobarbaz | 
|  | abcfoobar | 
|  |  | 
|  | /(?(*positive_lookahead:foo).{6}|a..)/ | 
|  | foobarbaz | 
|  | abcfoobar | 
|  |  | 
|  | /(*plb:foo)bar/ | 
|  | abcfoobar | 
|  | \= Expect no match | 
|  | abcbarfoo | 
|  |  | 
|  | /(*positive_lookbehind:foo)bar/ | 
|  | abcfoobar | 
|  | \= Expect no match | 
|  | abcbarfoo | 
|  |  | 
|  | /(?(*plb:foo)bar|baz)/ | 
|  | abcfoobar | 
|  | bazfoobar | 
|  | abcbazfoobar | 
|  | foobazfoobar | 
|  |  | 
|  | /(?(*positive_lookbehind:foo)bar|baz)/ | 
|  | abcfoobar | 
|  | bazfoobar | 
|  | abcbazfoobar | 
|  | foobazfoobar | 
|  |  | 
|  | /(*nlb:foo)bar/ | 
|  | abcbarfoo | 
|  | \= Expect no match | 
|  | abcfoobar | 
|  |  | 
|  | /(*negative_lookbehind:foo)bar/ | 
|  | abcbarfoo | 
|  | \= Expect no match | 
|  | abcfoobar | 
|  |  | 
|  | /(?(*nlb:foo)bar|baz)/ | 
|  | abcfoobaz | 
|  | abcbarbaz | 
|  | \= Expect no match | 
|  | abcfoobar | 
|  |  | 
|  | /(?(*negative_lookbehind:foo)bar|baz)/ | 
|  | abcfoobaz | 
|  | abcbarbaz | 
|  | \= Expect no match | 
|  | abcfoobar | 
|  |  | 
|  | /(*atomic:a+)\w/ | 
|  | aaab | 
|  | \= Expect no match | 
|  | aaaa | 
|  |  | 
|  | /   (?<word> \w+ )*    \.   /xi | 
|  | pokus. | 
|  |  | 
|  | /(?(DEFINE) (?<word> \w+ ) ) (?&word)*   \./xi | 
|  | pokus. | 
|  |  | 
|  | /(?(DEFINE) (?<word> \w+ ) ) ( (?&word)* )   \./xi | 
|  | pokus. | 
|  |  | 
|  | /(?&word)*  (?(DEFINE) (?<word> \w+ ) )  \./xi | 
|  | pokus. | 
|  |  | 
|  | /(?&word)*  \. (?<word> \w+ )/xi | 
|  | pokus.hokus | 
|  |  | 
|  | /a(?(?=(*:2)b).)/mark | 
|  | abc | 
|  | acb | 
|  |  | 
|  | /a(?(?!(*:2)b).)/mark | 
|  | acb | 
|  | abc | 
|  |  | 
|  | /(?:a|ab){1}+c/ | 
|  | \= Expect no match | 
|  | abc | 
|  |  | 
|  | /(a|ab){1}+c/ | 
|  | abc | 
|  |  | 
|  | /(a+){1}+a/ | 
|  | \= Expect no match | 
|  | aaaa | 
|  |  | 
|  | /(?(DEFINE)(a|ab))(?1){1}+c/ | 
|  | abc | 
|  |  | 
|  | /(?:a|(?=b)|.)*\z/ | 
|  | abc | 
|  |  | 
|  | /(?:a|(?=b)|.)*/ | 
|  | abc | 
|  |  | 
|  | /(?<=a(*SKIP)x)|c/ | 
|  | abcd | 
|  |  | 
|  | /(?<=a(*SKIP)x)|d/ | 
|  | abcd | 
|  |  | 
|  | /(?<=(?=.(?<=x)))/aftertext | 
|  | abx | 
|  |  | 
|  | /(?<=(?=(?<=a)))b/ | 
|  | ab | 
|  |  | 
|  | /^(?<A>a)(?(<A>)b)((?<=b).*)$/ | 
|  | abc | 
|  |  | 
|  | /^(a\1?){4}$/ | 
|  | aaaa | 
|  | aaaaaa | 
|  |  | 
|  | /^((\1+)|\d)+133X$/ | 
|  | 111133X | 
|  |  | 
|  | /^(?>.*?([A-Z])(?!.*\1)){26}/i | 
|  | The quick brown fox jumps over the lazy dog. | 
|  | Jackdaws love my big sphinx of quartz. | 
|  | Pack my box with five dozen liquor jugs. | 
|  | \= Expect no match | 
|  | The quick brown fox jumps over the lazy cat. | 
|  | Hackdaws love my big sphinx of quartz. | 
|  | Pack my fox with five dozen liquor jugs. | 
|  |  | 
|  | /(?<=X(?(DEFINE)(A)))X(*F)/ | 
|  | \= Expect no match | 
|  | AXYZ | 
|  |  | 
|  | /(?<=X(?(DEFINE)(A)))./ | 
|  | AXYZ | 
|  |  | 
|  | /(?<=X(?(DEFINE)(.*))Y)./ | 
|  | AXYZ | 
|  |  | 
|  | /(?<=X(?(DEFINE)(Y))(?1))./ | 
|  | AXYZ | 
|  |  | 
|  | /(?(DEFINE)(?<foo>bar))(?<![-a-z0-9])word/ | 
|  | word | 
|  |  | 
|  | /a{1,2,3}b/ | 
|  | a{1,2,3}b | 
|  |  | 
|  | #if !ebcdic | 
|  |  | 
|  | /\214748364/ | 
|  | >\x{8c}748364< | 
|  |  | 
|  | # smaller than GROUP_MAX | 
|  | /\21300/ | 
|  | \x8b00 | 
|  |  | 
|  | # larger than GROUP_MAX | 
|  | /\213000/ | 
|  | \x8b000 | 
|  |  | 
|  | # larger than INT_MAX | 
|  | /\21300000000/ | 
|  | \x8b00000000 | 
|  |  | 
|  | #endif | 
|  |  | 
|  | /a{65536/ | 
|  | >a{65536< | 
|  |  | 
|  | /a\K.(?0)*/ | 
|  | abac | 
|  |  | 
|  | /(a\K.(?1)*)/ | 
|  | abac | 
|  |  | 
|  | # -------------------------------------------------------------------------- | 
|  | # Perl-compatible tests of variable-length lookbehinds. | 
|  |  | 
|  | /(?<=ab?c).../g | 
|  | abcdefgacxyz | 
|  |  | 
|  | /(?<=PQR|ab?c).../g | 
|  | abcdefgacxyzPQR123 | 
|  |  | 
|  | /(?<=ab?c|PQR).../g | 
|  | abcdefgacxyzPQR123 | 
|  |  | 
|  | /(?<=PQ|ab?c).../g | 
|  | abcdefgacxyzPQR123 | 
|  |  | 
|  | /(?<=ab?c|PQ).../g | 
|  | abcdefgacxyzPQR123 | 
|  |  | 
|  | /(?<=a(b?c|d?e?e)f)X./g | 
|  | acfX1zzzaefX2zzzadeefX3zzzX4zzz | 
|  |  | 
|  | /(?<!a(b?c|d?e?e)f)X./g | 
|  | acfX1zzzaefX2zzzadeefX3zzzX4zzz | 
|  |  | 
|  | /(?(?<=ab?c)d|e)/ | 
|  | abcdefg | 
|  | acdefg | 
|  | axdefg | 
|  |  | 
|  | /(?<=\d{2,3}|ABC)./ | 
|  | ABCD | 
|  |  | 
|  | /(?<=(\d{1,255}))X/ | 
|  | 1234X | 
|  |  | 
|  | /(?<=a(b?c){3}d)X/ | 
|  | ZXacbccdXYZ | 
|  |  | 
|  | /(?<=a(b?c){0}d)X/ | 
|  | ZXadXYZ | 
|  |  | 
|  | /(?<=a?(b?c){0}d)X./ | 
|  | ZXadXYZ | 
|  |  | 
|  | /(?<=\R)X/ | 
|  | \x{0a}X | 
|  | a\x{0a}X | 
|  | a\x{0d}\x{0a}X | 
|  |  | 
|  | # -------------------------------------------------------------------------- | 
|  |  | 
|  | # Altered interpretation of {,n} | 
|  |  | 
|  | /a{,3}B/ | 
|  | XBBB | 
|  | XaBBB | 
|  | XaaBBB | 
|  | XaaaBBB | 
|  | XaaaaBBB | 
|  |  | 
|  | # But {,} remains not a qualifier | 
|  |  | 
|  | /a{,}B/ | 
|  | Xa{,}BBB | 
|  | \= Expect no match | 
|  | XBBB | 
|  | XaBBB | 
|  |  | 
|  | # Checks for non-quantifiers after refactored code | 
|  |  | 
|  | /X{/ | 
|  | ZZX{}YY | 
|  |  | 
|  | /X{A/ | 
|  | ZZX{ABC} | 
|  |  | 
|  | /X{}/ | 
|  | ZZX{}YZ | 
|  |  | 
|  | /X{1234/ | 
|  | ZZX{123456 | 
|  |  | 
|  | /X{12ABC}/ | 
|  | ZZX{12ABC}Y | 
|  |  | 
|  | /X{1,/ | 
|  | ZZX{1,... | 
|  |  | 
|  | /X{,9/ | 
|  | ZZX{,9}abc | 
|  |  | 
|  | /X{,9]/ | 
|  | ZZX{,9].. | 
|  |  | 
|  | # -------------------------------------------------------------------------- | 
|  |  | 
|  | /(A)(?-1)(?+1)(B)/ | 
|  | xxAABBzz | 
|  |  | 
|  | /(A)(\g{ -2 }B)/ | 
|  | XAABX | 
|  |  | 
|  | /(A)((?-2)B)/ | 
|  | XAABX | 
|  |  | 
|  | /a\c\X/ | 
|  | --a\x1cX-- | 
|  |  | 
|  | /(a)\g{ 1 }/ | 
|  | baab | 
|  |  | 
|  | /a{ 1,2 }/ | 
|  | Xaaaaa | 
|  |  | 
|  | /a{ 1 , 2 }/ | 
|  | Xaaaaa | 
|  |  | 
|  | /(?'name'ab)\k{ name }(?P=name)/ | 
|  | XabababX | 
|  |  | 
|  | /A{,}B/ | 
|  | A{,}B | 
|  |  | 
|  | /A{ , }B/ | 
|  | A{ , }B | 
|  |  | 
|  | /A{ ,3}/ | 
|  | AAAAAACC | 
|  |  | 
|  | /A{ 3, }/ | 
|  | BBAAAAAACC | 
|  |  | 
|  | # This pattern validates regular expression patterns. The original that I was | 
|  | # sent was this: | 
|  | # /^((?:(?:[^?+*{}()[\]\\|]+|\\.|\[(?:\^?\\.|\^[^\\]|[^\\^])(?:[^\]\\]+|\\.)*\]|\((?:\?[:=!]|\?<[=!]|\?>)?(?1)??\)|\(\?(?:R|[+-]?\d+)\))(?:(?:[?+*]|\{\d+(?:,\d*)?\})[?+]?)?|\|)*)$/ | 
|  | # This is not very readable, and also does not handle all features. I have done | 
|  | # some work on it. | 
|  |  | 
|  | /^ | 
|  | (?<re> | 
|  | # A regular expression is zero or more of these items. | 
|  | (?: | 
|  | # An item is one of these: | 
|  | (?: | 
|  | [^?+*{}()\[\]\\|]++|  # Non-meta characters or unquoted . | 
|  | \\.|                  # Quoted . | 
|  |  | 
|  | \[                    # Class, which is [ | 
|  | (?:                   # Followed by | 
|  | \^?\\.|             # Optional ^ and any escaped character | 
|  | \^[^\\]|            # OR ^ and not escaped character | 
|  | [^\\^]              # OR neither ^ nor \ | 
|  | )                     # Followed by | 
|  | (?:[^\]\\]+|\\.)*+    # Zero or more (not ] or \) OR escaped dot | 
|  | \]|                   # Class ends with ] | 
|  |  | 
|  | \(                    # Parenthesized group | 
|  | (?:                 # Start with optional | 
|  | \?[:=!]|          # ? followed by : = ! | 
|  | \?<[=!]|          # OR ?< followed by = or ! | 
|  | \?>               # OR ?> | 
|  | )? | 
|  | (?&re)??            # Then a nested <re> | 
|  | \)|                   # End parenthesized group | 
|  |  | 
|  | \(\?                  # Other parenthesized items | 
|  | (?:                 # (? followed by | 
|  | R|                # R | 
|  | [+-]?\d++         # Or optional +- and digits | 
|  | ) | 
|  | \)|                   # End parens | 
|  |  | 
|  | \(\*                  # Verbs | 
|  | (?: | 
|  | COMMIT| | 
|  | FAIL| | 
|  | MARK:[^)]*| | 
|  | (?:PRUNE|SKIP|THEN)(?::[^\)]*+)? | 
|  | ) | 
|  | \) | 
|  | )                       # End list of items | 
|  |  | 
|  | # Followed by an optional quantifier | 
|  |  | 
|  | (?: | 
|  | (?: | 
|  | [?+*]     # ?+* | 
|  | |         # OR | 
|  | \{\d+     # { digits | 
|  | (?:,\d*)? # optionally followed by ,digits | 
|  | \}        # then closing } | 
|  | |         # OR | 
|  | \{,\d+}   # {,digits} | 
|  | ) | 
|  | [?+]?       # optional ungreedy or possessive | 
|  | )? | 
|  |  | 
|  | | # OR an "item" is a branch ending | 
|  |  | 
|  | \| | 
|  |  | 
|  | )*  # Zero or more top-level items. | 
|  | )     # End regex group. | 
|  | $/x | 
|  | [abcdef] | 
|  | [abc\\]def] | 
|  | a.b|abcd | 
|  | ab()d | 
|  | ab{1,3}d | 
|  | ab{,3}d | 
|  | ab(*FAIL)d(*COMMIT)(*SKIP)(*THEN:abc) | 
|  | ab(*MARK:xyz) | 
|  | (?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[,;:])(?=.{8,16})(?!.*[\\s]) | 
|  | abcd\\t\\n\\r\\f\\a\\e\\071\\x3b\\^\\\\\\?caxyz | 
|  | a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz | 
|  | \\G(?:(?=(\\1.|)(.))){1,13}?(?!.*\\2.*\\2)\\1\\K\\2 | 
|  | \= Expect no match | 
|  | ab)d | 
|  | ab(d | 
|  | {4,5} | 
|  | a[]b | 
|  | (a)(?(1)a|b|c) | 
|  |  | 
|  | /^..A(*SKIP)B|C/ | 
|  | 12ADC | 
|  |  | 
|  | /(?<!a?)/ | 
|  | a | 
|  |  | 
|  | /\Qab*\E{2,}/ | 
|  | ab***z | 
|  |  | 
|  | /[\Qabc\E-z]+/ | 
|  | abcdwxyz | 
|  |  | 
|  | /[\Qa-\Ez]+/ | 
|  | xz-zaax | 
|  |  | 
|  | /a{(?#XYZ),2}/ | 
|  | xa{,2}x | 
|  | \= Expect no match | 
|  | xaax | 
|  |  | 
|  | /(?<=PQ|Pc.b?)(.?)(b?)/ | 
|  | Pc.b | 
|  |  | 
|  | /(?(?<=aa.b|ab)b).b/ | 
|  | aaab | 
|  |  | 
|  | /(?(?<=a(?:a.b|b))b).b/ | 
|  | aaab | 
|  |  | 
|  | /(?=a)b?a/ | 
|  | a | 
|  |  | 
|  | /(?=a)b?a./ | 
|  | ab | 
|  |  | 
|  | /\w(?R)*\w/ | 
|  | grtgt | 
|  | abcdef | 
|  | abcdefg | 
|  | .a.bc.d. | 
|  | \= Expect no match | 
|  | .a.b.c. | 
|  |  | 
|  | /65 00 64/hex | 
|  | e\0d | 
|  |  | 
|  | /[[:digit:]-   ]/xx | 
|  | 1 | 
|  | - | 
|  | \= Expect no match | 
|  | z | 
|  | \ \ | 
|  |  | 
|  | /[\d-   ]/xx | 
|  | 1 | 
|  | - | 
|  | \= Expect no match | 
|  | z | 
|  | \ \ | 
|  |  | 
|  | # -------------- | 
|  |  | 
|  | # EXTENDED CHARACTER CLASSES (Perl) | 
|  |  | 
|  | /(?[\n])/ | 
|  | \n | 
|  | \= Expect no match | 
|  | \\ | 
|  | n | 
|  |  | 
|  | #if !ebcdic | 
|  |  | 
|  | /^(?[\x61])b/ | 
|  | ab | 
|  | \= Expect no match | 
|  | b | 
|  | a | 
|  |  | 
|  | /^(?[\x61])+b/ | 
|  | ab | 
|  | aab | 
|  | \= Expect no match | 
|  | b | 
|  |  | 
|  | #endif | 
|  |  | 
|  | /(?[ [[:graph:]] ])/ | 
|  | a | 
|  | \= Expect no match | 
|  | \x01 | 
|  |  | 
|  | /(?[ [:graph:] ])/ | 
|  | a | 
|  | \= Expect no match | 
|  | \x01 | 
|  |  | 
|  | /(?[ [[:graph:]\x02] ])/ | 
|  | a | 
|  | \x02 | 
|  | \= Expect no match | 
|  | \x01 | 
|  |  | 
|  | /(?[\E\n])/ | 
|  | \n | 
|  | \= Expect no match | 
|  | \\ | 
|  | E | 
|  |  | 
|  | /(?[\n \Q\E])/ | 
|  | \n | 
|  | \= Expect no match | 
|  | \\ | 
|  | Q | 
|  |  | 
|  | /(?[ ( \x02 + [:graph:] ) | [ \x02 [:graph:] ] ])/ | 
|  | a | 
|  | \x02 | 
|  | \= Expect no match | 
|  | \x01 | 
|  |  | 
|  | /(?[ \d ])/ | 
|  | 1 | 
|  | \= Expect no match | 
|  | d | 
|  |  | 
|  | /(?[[1]])/ | 
|  | 1 | 
|  | \= Expect no match | 
|  | ] | 
|  |  | 
|  | /(?[[a]])/ | 
|  | a | 
|  | \= Expect no match | 
|  | ] | 
|  |  | 
|  | /(?[[a-c]])/ | 
|  | a | 
|  | b | 
|  | \= Expect no match | 
|  | - | 
|  | ] | 
|  |  | 
|  | /(?[ [\t] + [\n] ])/ | 
|  | \t | 
|  | \n | 
|  | \= Expect no match | 
|  | t | 
|  | \\ | 
|  | [ | 
|  |  | 
|  | /(?[ \t + \n ])/ | 
|  | \t | 
|  | \n | 
|  | \= Expect no match | 
|  | t | 
|  | \\ | 
|  | [ | 
|  |  | 
|  | /(?[ [()] ])/ | 
|  | ) | 
|  | ( | 
|  | \= Expect no match | 
|  | ] | 
|  |  | 
|  | /(?[ ( [()] ) ])/ | 
|  | ) | 
|  | ( | 
|  | \= Expect no match | 
|  | ] | 
|  |  | 
|  | /(?[ (( [\n\t] )) ])/ | 
|  | \n | 
|  | \t | 
|  | \= Expect no match | 
|  | ) | 
|  | ( | 
|  | t | 
|  |  | 
|  | # Each syntax element, with unary operator applied to it | 
|  |  | 
|  | /(?[ !\n ])/ | 
|  | z | 
|  | \= Expect no match | 
|  | \n | 
|  |  | 
|  | /(?[ !\d ])/ | 
|  | a | 
|  | \= Expect no match | 
|  | 1 | 
|  |  | 
|  | /(?[ ![:alpha:] ])/ | 
|  | 1 | 
|  | \= Expect no match | 
|  | a | 
|  |  | 
|  | /(?[ ![\n] ])/ | 
|  | z | 
|  | \= Expect no match | 
|  | \n | 
|  |  | 
|  | /(?[ !(\n) ])/ | 
|  | z | 
|  | \= Expect no match | 
|  | \n | 
|  |  | 
|  | /(?[ !!\n ])/ | 
|  | \n | 
|  | \= Expect no match | 
|  | z | 
|  |  | 
|  | # Each syntax element, as contents of parens | 
|  |  | 
|  | /(?[ (\n) ])/ | 
|  | \n | 
|  | \= Expect no match | 
|  | z | 
|  |  | 
|  | /(?[ (\d) ])/ | 
|  | 1 | 
|  | \= Expect no match | 
|  | a | 
|  |  | 
|  | /(?[ ([:alpha:]) ])/ | 
|  | a | 
|  | \= Expect no match | 
|  | 1 | 
|  |  | 
|  | /(?[ ([\n]) ])/ | 
|  | \n | 
|  | \= Expect no match | 
|  | z | 
|  |  | 
|  | /(?[ ((\n)) ])/ | 
|  | \n | 
|  | \= Expect no match | 
|  | z | 
|  |  | 
|  | /(?[ (!\n) ])/ | 
|  | z | 
|  | \= Expect no match | 
|  | \n | 
|  |  | 
|  | /(?[ (\n + \t) ])/ | 
|  | \n | 
|  | \t | 
|  | \= Expect no match | 
|  | z | 
|  |  | 
|  | # Each syntax element, as LHS of a binary operator | 
|  |  | 
|  | /(?[ \n & [\n\t] ])/ | 
|  | \n | 
|  | \= Expect no match | 
|  | t | 
|  |  | 
|  | /(?[ \d & [\d\t] ])/ | 
|  | 1 | 
|  | \= Expect no match | 
|  | a | 
|  |  | 
|  | /(?[ [:alpha:] & [a-z\t] ])/ | 
|  | a | 
|  | \= Expect no match | 
|  | A | 
|  | \t | 
|  |  | 
|  | /(?[ [\n] & [\n\t] ])/ | 
|  | \n | 
|  | \= Expect no match | 
|  | \t | 
|  |  | 
|  | /(?[ (\n) & [\n\t] ])/ | 
|  | \n | 
|  | \= Expect no match | 
|  | \t | 
|  |  | 
|  | /(?[ !\n & [^\n\t] ])/ | 
|  | a | 
|  | \= Expect no match | 
|  | \n | 
|  | \t | 
|  |  | 
|  | /(?[ \n & [\n\t] + [\d] ])/ | 
|  | \n | 
|  | 1 | 
|  | \= Expect no match | 
|  | \t | 
|  | a | 
|  |  | 
|  | # Each syntax element, as RHS of a binary operator | 
|  |  | 
|  | /(?[ [\n\t] & \n ])/ | 
|  | \n | 
|  | \= Expect no match | 
|  | t | 
|  |  | 
|  | /(?[ [\d\t] & \d ])/ | 
|  | 1 | 
|  | \= Expect no match | 
|  | a | 
|  |  | 
|  | /(?[ [a-z\t] & [:alpha:] ])/ | 
|  | a | 
|  | \= Expect no match | 
|  | A | 
|  | \t | 
|  |  | 
|  | /(?[ [\n\t] & [\n] ])/ | 
|  | \n | 
|  | \= Expect no match | 
|  | \t | 
|  |  | 
|  | /(?[ [\n\t] & (\n) ])/ | 
|  | \n | 
|  | \= Expect no match | 
|  | \t | 
|  |  | 
|  | /(?[ [^\n\t] & !\n ])/ | 
|  | a | 
|  | \= Expect no match | 
|  | \n | 
|  | \t | 
|  |  | 
|  | /(?[ [\d] + \n & [\n\t] ])/ | 
|  | \n | 
|  | 1 | 
|  | \= Expect no match | 
|  | \t | 
|  | a | 
|  |  | 
|  | /(?[ [\d] + \n + [\t] ])/ | 
|  | \n | 
|  | \t | 
|  | 1 | 
|  | \= Expect no match | 
|  | a | 
|  |  | 
|  | # end op surrounding syntax tests | 
|  |  | 
|  | /(?[ \d + \n ])/ | 
|  | \n | 
|  | 1 | 
|  | \= Expect no match | 
|  | a | 
|  |  | 
|  | /(?[ \d | \n ])/ | 
|  | \n | 
|  | 1 | 
|  | \= Expect no match | 
|  | a | 
|  |  | 
|  | /(?[ \d - [2] ])/ | 
|  | 1 | 
|  | 3 | 
|  | \= Expect no match | 
|  | 2 | 
|  |  | 
|  | /(?[ [AC] ^ [BC] ])/ | 
|  | A | 
|  | B | 
|  | \= Expect no match | 
|  | C | 
|  | D | 
|  |  | 
|  | /(?[	(	[	^	z	]	) ])/ | 
|  | j | 
|  | \= Expect no match | 
|  | z | 
|  |  | 
|  | /^.{4}/s | 
|  | abcdef | 
|  | abcde | 
|  | abcd | 
|  | \= Expect no match | 
|  | abc | 
|  | ab | 
|  | a | 
|  |  | 
|  | /^(.{3,6}!)+$/s | 
|  | abc!defghi! | 
|  | abcdef!ghi! | 
|  | abc!def!ghi!jkl! | 
|  | ab!cd! | 
|  | \= Expect no match | 
|  | abcd!ef! | 
|  | ab!cdefg! | 
|  |  | 
|  | /[a-z]{5,}b|x/ | 
|  | abcdefghbijb | 
|  | abcdefghbij | 
|  | abcdeb | 
|  | abcdefghijx | 
|  | \= Expect no match | 
|  | abcdb | 
|  | abcdefghijk | 
|  |  | 
|  | /[a-z]{1,6}?s|x/ | 
|  | asbs | 
|  | abcdefs | 
|  | abcdefghijkss | 
|  | abcdefghijkx | 
|  | ss | 
|  | \= Expect no match | 
|  | s | 
|  | aaa | 
|  |  | 
|  | # -------------- | 
|  |  | 
|  | # End of testinput1 |