Download testdata/testinput1 from AryaWu/pcre2: direct link, hf CLI and curl.
- Browser
- Download file 131 kB
-
https://huggingface.co/AryaWu/pcre2/resolve/main/testdata/testinput1
- Command line
-
hf download hf://AryaWu/pcre2/testdata/testinput1
-
curl -L -o testinput1 https://huggingface.co/AryaWu/pcre2/resolve/main/testdata/testinput1
131 kB
| # 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 | |