|
|
# This set of tests check the DFA matching functionality of pcre2_dfa_match(), # excluding UTF and Unicode property support. All matches are done using DFA, # forced by setting a default subject modifier at the start. #forbid_utf #subject dfa #newline_default lf anycrlf any /abc/ abc /ab*c/ abc abbbbc ac /ab+c/ abc abbbbbbc \= Expect no match ac ab /a*/no_auto_possess a aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\=ovector=10 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\=dfa_shortest /(a|abcd|african)/ a abcd african /^abc/ abcdef \= Expect no match xyzabc xyz\nabc /^abc/m abcdef xyz\nabc \= Expect no match xyzabc /\Aabc/ abcdef \= Expect no match xyzabc xyz\nabc /\Aabc/m abcdef \= Expect no match xyzabc xyz\nabc /\Gabc/ abcdef xyzabc\=offset=3 \= Expect no match xyzabc xyzabc\=offset=2 /x\dy\Dz/ x9yzz x0y+z \= Expect no match xyz xxy0z /x\sy\Sz/ x yzz x y+z \= Expect no match xyz xxyyz /x\wy\Wz/ xxy+z \= Expect no match xxy0z x+y+z /x.y/ x+y x-y \= Expect no match x\ny /x.y/s x+y x-y x\ny
/(a.b(?s)c.d|x.y)p.q/ a+bc+dp+q a+bc\ndp+q x\nyp+q \= Expect no match a\nbc\ndp+q a+bc\ndp\nq x\nyp\nq
/a\d\z/ ba0 \= Expect no match ba0\n ba0\ncd
/a\d\z/m ba0 \= Expect no match ba0\n ba0\ncd
/a\d\Z/ ba0 ba0\n \= Expect no match ba0\ncd
/a\d\Z/m ba0 ba0\n \= Expect no match ba0\ncd
/a\d$/ ba0 ba0\n \= Expect no match ba0\ncd
/a\d$/m ba0 ba0\n ba0\ncd
/abc/i abc aBc ABC /[^a]/ abcd /ab?\w/ abz abbz azz
/x{0,3}yz/ ayzq axyzq axxyz axxxyzq axxxxyzq \= Expect no match ax axx /x{3}yz/ axxxyzq axxxxyzq \= Expect no match ax axx ayzq axyzq axxyz /x{2,3}yz/ axxyz axxxyzq axxxxyzq \= Expect no match ax axx ayzq axyzq /[^a]+/no_auto_possess bac bcdefax \= Expect no match aaaaa
/[^a]*/no_auto_possess bac bcdefax aaaaa /[^a]{3,5}/no_auto_possess xyz awxyza abcdefa abcdefghijk \= Expect no match axya axa aaaaa
/\d*/ 1234b567 xyz /\D*/ a1234b567 xyz /\d+/ ab1234c56 \= Expect no match xyz /\D+/ ab123c56 \= Expect no match 789 /\d?A/ 045ABC ABC \= Expect no match XYZ /\D?A/ ABC BAC 9ABC
/a+/ aaaa
/^.*xyz/ xyz ggggggggxyz /^.+xyz/ abcdxyz axyz \= Expect no match xyz /^.?xyz/ xyz cxyz
/^\d{2,3}X/ 12X 123X \= Expect no match X 1X 1234X
/^[abcd]\d/ a45 b93 c99z d04 \= Expect no match e45 abcd abcd1234 1234
/^[abcd]*\d/ a45 b93 c99z d04 abcd1234 1234 \= Expect no match e45 abcd
/^[abcd]+\d/ a45 b93 c99z d04 abcd1234 \= Expect no match 1234 e45 abcd
/^a+X/ aX aaX
/^[abcd]?\d/ a45 b93 c99z d04 1234 \= Expect no match abcd1234 e45
/^[abcd]{2,3}\d/ ab45 bcd93 \= Expect no match 1234 a36 abcd1234 ee45
/^(abc)*\d/ abc45 abcabcabc45 42xyz
/^(abc)+\d/ abc45 abcabcabc45 \= Expect no match 42xyz
/^(abc)?\d/ abc45 42xyz \= Expect no match abcabcabc45
/^(abc){2,3}\d/ abcabc45 abcabcabc45 \= Expect no match abcabcabcabc45 abc45 42xyz
/1(abc|xyz)2(?1)3/ 1abc2abc3456 1abc2xyz3456
/^(a*\w|ab)=(a*\w|ab)/ ab=ab
/^(a*\w|ab)=(?1)/ ab=ab
/^([^()]|\((?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<
/^(?>a*)\d/ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9876 \= Expect no match aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
/< (?: (?(R) \d++ | [^<>]*+) | (?R)) * >/x <> <abcd> <abc <123> hij> <abc <def> hij> <abc<>def> <abc<> \= Expect no match <abc
/^(?(?=abc)\w{3}:|\d\d)$/ abc: 12 \= Expect no match 123 xyz /^(?(?!abc)\d\d|\w{3}:)$/ abc: 12 \= Expect no match 123 xyz
/^(?=abc)\w{5}:$/ abcde: \= Expect no match abc.. 123 vwxyz /^(?!abc)\d\d$/ 12 \= Expect no match abcde: abc.. 123 vwxyz
/(?<=abc|xy)123/ abc12345 wxy123z \= Expect no match 123abc
/(?<!abc|xy)123/ 123abc mno123456 \= Expect no match abc12345 wxy123z
/abc(?C1)xyz/ abcxyz 123abcxyz999
/(ab|cd){3,4}/auto_callout ababab abcdabcd abcdcdcdcdcd
/^abc/ abcdef \= Expect no match abcdef\=notbol
/^(a*|xyz)/ bcd aaabcd xyz xyz\=notempty \= Expect no match bcd\=notempty /xyz$/ xyz xyz\n \= Expect no match xyz\=noteol xyz\n\=noteol /xyz$/m xyz xyz\n abcxyz\npqr abcxyz\npqr\=noteol xyz\n\=noteol \= Expect no match xyz\=noteol
/\Gabc/ abcdef defabcxyz\=offset=3 \= Expect no match defabcxyz
/^abcdef/ ab\=ps abcde\=ps abcdef\=ps \= Expect no match abx\=ps
/^a{2,4}\d+z/ a\=ps aa\=ps aa2\=ps aaa\=ps aaa23\=ps aaaa12345\=ps aa0z\=ps aaaa4444444444444z\=ps \= Expect no match az\=ps aaaaa\=ps a56\=ps
/^abcdef/ abc\=ps def\=dfa_restart /(?<=foo)bar/ foob\=ps,offset=2,allusedtext foobar...\=ps,dfa_restart,offset=4 foobar\=offset=2 \= Expect no match xyzfo\=ps obar\=dfa_restart
/(ab*(cd|ef))+X/ lkjhlkjhlkjhlkjhabbbbbbcdaefabbbbbbbefa\=ps,notbol,noteol cdabbbbbbbb\=ps,notbol,dfa_restart,noteol efabbbbbbbbbbbbbbbb\=ps,notbol,dfa_restart,noteol bbbbbbbbbbbbcdXyasdfadf\=ps,notbol,dfa_restart,noteol \= Expect no match adfadadaklhlkalkajhlkjahdfasdfasdfladsfjkj\=ps,noteol
/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?
/abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/ abcd\t\n\r\f\a\e9;\$\\?caxyz
/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
/^(b+|a){1,2}?bc/ bbc
/^(b*|ba){1,2}?bc/ babc bbabc bababc \= Expect no match bababbc babababc
/^(ba|b*){1,2}?bc/ babc bbabc bababc \= Expect no match bababbc babababc
/^\ca\cA\c[\c{\c:/ \x01\x01\e;z
/^[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 xx123 123456 x1234 \= Expect no match 123
/^.+?[0-9][0-9][0-9]$/ x123 xx123 123456 x1234 \= 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 No match 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
/^$/ \
/ ^ 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
/^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
/(?!^)abc/ the abc \= Expect no match abc
/(?=^)abc/ abc \= Expect no match the abc
/^[ab]{1,3}(ab*|b)/no_auto_possess aabbbbb
/^[ab]{1,3}?(ab*|b)/no_auto_possess aabbbbb
/^[ab]{1,3}?(ab*?|b)/no_auto_possess aabbbbb
/^[ab]{1,3}(ab*?|b)/no_auto_possess aabbbbb
/ (?: [\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
/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
/^\s/ \040abc \x0cabc \nabc \rabc \tabc \= Expect no match abc
/^a b c/x abc
/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
/^[W-c]+$/ WXY_^abc \= Expect no match wxy
/^[W-c]+$/i WXY_^abc wxy_^ABC
/^[\x3f-\x5F]+$/i WXY_^abc wxy_^ABC
/^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
/\x5c/ \\
/\x20Z/ the Zoo \= Expect no match Zulu
/ab{3cd/ ab{3cd
/ab{3,cd/ ab{3,cd
/ab{3,4a}cd/ ab{3,4a}cd
/{4,5a}bc/ {4,5a}bc
/^a.b/newline=lf a\rb \= Expect no match a\nb
/abc$/ abc abc\n \= Expect no match abc\ndef
/(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
/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/ abcdefghijk\12S
/a{0}bc/ bc
/(a|(bc)){0,0}?xyz/ xyz
/abc[\10]de/ abc\010de
/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]/ aaaabcd aaAabcd
/[^a]/i aaaabcd aaAabcd
/[^az]/ aaaabcd aaAabcd
/[^az]/i aaaabcd aaAabcd
/\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
/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*)/no_auto_possess I have 2 numbers: 53147 /(.*)(\d+)/ I have 2 numbers: 53147 /(.*?)(\d*)/no_auto_possess 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[ /^[W-\]46]/ W46]789 Wall Zebra Xylophone 42 [abcd] ]abcd[ \\backslash \= Expect no match -46]789 well /\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 \= Expect no match x\nb\n /\x0{ab}/ \0{ab}
/(A|B)*?CD/ CD /(A|B)*CD/ CD
/(?<!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" \= Expect no match /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
"(?>.*/)foo" /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
/(?>(\.\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 /(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
/^(?(?=abc)\w{3}:|\d\d)$/ abc: 12 \= Expect no match 123 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
/(?>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 /(?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 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+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 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 \= Expect no match 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)))))))))/ 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/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
/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 \= Expect no match A\=notbol
/((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/i
/a*/i
/([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)))))))))/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
/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
/((foo)|(bar))*/ foobar
/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
/(?:(f)(o)(o)|(b)(a)(r))*/ foobar
/(?<=a)b/ ab \= Expect no match cb b
/(?<!c)b/ ab b b
/(?:..)*a/ aba
/(?:..)*?a/ aba
/^(){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
/((?-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 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
/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?)*$/ \= Expect no match dbcb a--
/((?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
/(?(?!a)a|b)/
/(?(?!a)b|a)/ a
/(?(?=a)b|a)/ \= Expect no match a a
/(?(?=a)a|b)/ a
/(\w+:)+/ one:
/$(?<=^(a))/ a
/([\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 /(?>.*)(?<=(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
/((Z)+|A)*/ ZABCDEFG
/(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
/[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
/����[�-��-�]+/ ����� ����� ����� �����
/(?<=Z)X./ \x84XAZXB
/^(?(2)a|(1)(2))+$/ 123a
/(?<=a|bbbb)c/ ac bbbbc
/line\nbreak/ this is a line\nbreak line one\nthis is a line\nbreak in the second line
/line\nbreak/firstline this is a line\nbreak \= Expect no match line one\nthis is a line\nbreak in the second line
/line\nbreak/m,firstline this is a line\nbreak \= Expect no match line one\nthis is a line\nbreak in the second line
/1234/ 123\=ps \= Expect no match a4\=ps,dfa_restart
/1234/ 123\=ps 4\=ps,dfa_restart
/^/gm a\nb\nc\n \ /(?<=C\n)^/gm A\nC\nC\n
/(?s)A?B/ AB aB
/(?s)A*B/ AB aB
/(?m)A?B/ AB aB
/(?m)A*B/ AB aB
/Content-Type\x3A[^\r\n]{6,}/ Content-Type:xxxxxyyy
/Content-Type\x3A[^\r\n]{6,}z/ Content-Type:xxxxxyyyz
/Content-Type\x3A[^a]{6,}/ Content-Type:xxxyyy
/Content-Type\x3A[^a]{6,}z/ Content-Type:xxxyyyz
/^abc/Im,newline=lf xyz\nabc xyz\r\nabc \= Expect no match xyz\rabc xyzabc\r xyzabc\rpqr xyzabc\r\n xyzabc\r\npqr
/^abc/Im,newline=crlf xyz\r\nabclf> \= Expect no match xyz\nabclf xyz\rabclf /^abc/Im,newline=cr xyz\rabc \= Expect no match xyz\nabc xyz\r\nabc
/.*/I,newline=lf abc\ndef abc\rdef abc\r\ndef
/.*/I,newline=cr abc\ndef abc\rdef abc\r\ndef
/.*/I,newline=crlf abc\ndef abc\rdef abc\r\ndef
/\w+(.)(.)?def/Is abc\ndef abc\rdef abc\r\ndef
/\w+(.)(.)?def/s abc\ndef abc\rdef abc\r\ndef
/^\w+=.*(\\\n.*)*/ abc=xyz\\\npqr
/^(a()*)*/ aaaa
/^(?:a(?:(?:))*)*/ aaaa
/^(a()+)+/ aaaa
/^(?:a(?:(?:))+)+/ aaaa
/(a|)*\d/ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4 \= Expect no match aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
/(?>a|)*\d/ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4 \= Expect no match aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
/(?:a|)*\d/ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4 \= Expect no match aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
/^a.b/newline=lf a\rb \= Expect no match a\nb
/^a.b/newline=cr a\nb \= Expect no match a\rb
/^a.b/newline=anycrlf a\x85b \= Expect no match a\rb
/^a.b/newline=any \= Expect no match a\nb a\rb a\x85b
/^abc./gmx,newline=any abc1 \x0aabc2 \x0babc3xx \x0cabc4 \x0dabc5xx \x0d\x0aabc6 \x85abc7 JUNK
/abc.$/gmx,newline=any abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc9
/^a\Rb/bsr=unicode a\nb a\rb a\r\nb a\x0bb a\x0cb a\x85b \= Expect no match a\n\rb
/^a\R*b/bsr=unicode ab a\nb a\rb a\r\nb a\x0bb a\x0cb a\x85b a\n\rb a\n\r\x85\x0cb
/^a\R+b/bsr=unicode a\nb a\rb a\r\nb a\x0bb a\x0cb a\x85b a\n\rb a\n\r\x85\x0cb \= Expect no match ab /^a\R{1,3}b/bsr=unicode a\nb a\n\rb a\n\r\x85b a\r\n\r\nb a\r\n\r\n\r\nb a\n\r\n\rb a\n\n\r\nb \= Expect no match a\n\n\n\rb a\r
/.+foo/ afoo \= Expect no match \r\nfoo \nfoo
/.+foo/newline=crlf afoo \nfoo \= Expect no match \r\nfoo
/.+foo/newline=any afoo \= Expect no match \nfoo \r\nfoo
/.+foo/s afoo \r\nfoo \nfoo
/^$/gm,newline=any abc\r\rxyz abc\n\rxyz \= Expect no match abc\r\nxyz
/^X/m XABC \= Expect no match XABC\=notbol
/(?m)^$/g,newline=any,aftertext abc\r\n\r\n
/(?m)^$|^\r\n/g,newline=any,aftertext abc\r\n\r\n /(?m)$/g,newline=any,aftertext abc\r\n\r\n
/(?|(abc)|(xyz))/ >abc< >xyz<
/(x)(?|(abc)|(xyz))(x)/ xabcx xxyzx
/(x)(?|(abc)(pqr)|(xyz))(x)/ xabcpqrx xxyzx
/(?|(abc)|(xyz))(?1)/ abcabc xyzabc \= Expect no match xyzxyz /\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
/\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
/.+A/newline=crlf \= Expect no match \r\nA /\nA/newline=crlf \r\nA
/[\r\n]A/newline=crlf \r\nA
/(\r|\n)A/newline=crlf \r\nA
/a\Rb/I,bsr=anycrlf a\rb a\nb a\r\nb \= Expect no match a\x85b a\x0bb
/a\Rb/I,bsr=unicode a\rb a\nb a\r\nb a\x85b a\x0bb /a\R?b/I,bsr=anycrlf a\rb a\nb a\r\nb \= Expect no match a\x85b a\x0bb
/a\R?b/I,bsr=unicode a\rb a\nb a\r\nb a\x85b a\x0bb /a\R{2,4}b/I,bsr=anycrlf a\r\n\nb a\n\r\rb a\r\n\r\n\r\n\r\nb \= Expect no match a\x0b\x0bb a\x85\x85b
/a\R{2,4}b/I,bsr=unicode a\r\rb a\n\n\nb a\r\n\n\r\rb a\x85\x85b a\x0b\x0bb \= Expect no match a\r\r\r\r\rb /a(?!)|\wbc/ abc
/a[]b/alt_bsux,allow_empty_class,match_unset_backref,dupnames \= Expect no match ab
/a[]+b/alt_bsux,allow_empty_class,match_unset_backref,dupnames \= Expect no match ab
/a[]*+b/alt_bsux,allow_empty_class,match_unset_backref,dupnames \= Expect no match ab
/a[^]b/alt_bsux,allow_empty_class,match_unset_backref,dupnames aXb a\nb \= Expect no match ab /a[^]+b/alt_bsux,allow_empty_class,match_unset_backref,dupnames aXb a\nX\nXb \= Expect no match ab
/X$/dollar_endonly X \= Expect no match X\n
/X$/ X X\n
/xyz/auto_callout xyz abcxyz \= Expect no match abc abcxypqr
/xyz/auto_callout,no_start_optimize abcxyz \= Expect no match abc abcxypqr
/(*NO_START_OPT)xyz/auto_callout abcxyz /(?C)ab/ ab ab\=callout_none /ab/auto_callout ab ab\=callout_none
/^"((?(?=[a])[^"])|b)*"$/auto_callout "ab" "ab"\=callout_none
/\d+X|9+Y/ ++++123999\=ps ++++123999Y\=ps
/Z(*F)/ \= Expect no match Z\=ps ZA\=ps /Z(?!)/ \= Expect no match Z\=ps ZA\=ps
/dog(sbody)?/ dogs\=ps dogs\=ph /dog(sbody)??/ dogs\=ps dogs\=ph
/dog|dogsbody/ dogs\=ps dogs\=ph /dogsbody|dog/ dogs\=ps dogs\=ph
/Z(*F)Q|ZXY/ Z\=ps \= Expect no match ZA\=ps X\=ps
/\bthe cat\b/ the cat\=ps the cat\=ph
/dog(sbody)?/ dogs\=ps body\=dfa_restart
/dog(sbody)?/ dogs\=ph body\=dfa_restart
/abc/ abc\=ps abc\=ph
/abc\K123/ xyzabc123pqr /(?<=abc)123/allusedtext xyzabc123pqr xyzabc12\=ps xyzabc12\=ph
/\babc\b/allusedtext +++abc+++ +++ab\=ps +++ab\=ph
/(?=C)/g,aftertext ABCDECBA
/(abc|def|xyz)/I terhjk;abcdaadsfe the quick xyz brown fox \= Expect no match thejk;adlfj aenjl;fda asdfasd ehj;kjxyasiupd
/(abc|def|xyz)/I,no_start_optimize terhjk;abcdaadsfe the quick xyz brown fox \= Expect no match thejk;adlfj aenjl;fda asdfasd ehj;kjxyasiupd
/abcd*/aftertext xxxxabcd\=ps xxxxabcd\=ph dddxxx\=dfa_restart xxxxabcd\=ph xxx\=dfa_restart
/abcd*/i xxxxabcd\=ps xxxxabcd\=ph XXXXABCD\=ps XXXXABCD\=ph
/abc\d*/ xxxxabc1\=ps xxxxabc1\=ph
/abc[de]*/ xxxxabcde\=ps xxxxabcde\=ph
/(?:(?1)|B)(A(*F)|C)/ ABCD CCD \= Expect no match CAD
/^(?:(?1)|B)(A(*F)|C)/ CCD BCD \= Expect no match ABCD CAD BAD
/^(?!a(*SKIP)b)/ ac /^(?=a(*SKIP)b|ac)/ ac /^(?=a(*THEN)b|ac)/ ac /^(?=a(*PRUNE)b)/ ab
/^(?(?!a(*SKIP)b))/ ac
/(?<=abc)def/allusedtext abc\=ph
/abc$/ abc abc\=ps abc\=ph
/abc$/m abc abc\n abc\=ph abc\n\=ph abc\=ps abc\n\=ps
/abc\z/ abc abc\=ps abc\=ph
/abc\Z/ abc abc\=ps abc\=ph
/abc\b/ abc abc\=ps abc\=ph
/abc\B/ abc\=ps abc\=ph \= Expect no match abc
/.+/ abc\=offset=0 abc\=offset=1 abc\=offset=2 \= Bad offsets abc\=offset=4 abc\=offset=-4 \= Expect no match abc\=offset=3
/^(?:a)++\w/ aaaab \= Expect no match aaaa bbb
/^(?:aa|(?:a)++\w)/ aaaab aaaa \= Expect no match bbb
/^(?:a)*+\w/ aaaab bbb \= Expect no match aaaa
/^(a)++\w/ aaaab \= Expect no match aaaa bbb
/^(a|)++\w/ aaaab \= Expect no match aaaa bbb
/(?=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
/^(?=(a)){0}b(?1)/ backgammon
/^(?=(?1))?[az]([abc])d/ abd zcdxx
/^(?!a){0}\w+/ aaaaa
/(?<=(abc))?xyz/ abcxyz pqrxyz
/((?2))((?1))/ abc
/(?(R)a+|(?R)b)/ aaaabcde
/(?(R)a+|((?R))b)/ aaaabcde
/((?(R)a+|(?1)b))/ aaaabcde
/((?(R2)a+|(?1)b))()/ aaaabcde
/(?(R)a*(?1)|((?R))b)/ aaaabcde
/(a+)/no_auto_possess aaaa\=ovector=3 aaaa\=ovector=4
/^\R/ \r\=ps \r\=ph /^\R{2,3}x/ \r\=ps \r\=ph \r\r\=ps \r\r\=ph \r\r\r\=ps \r\r\r\=ph \r\rx \r\r\rx
/^\R{2,3}?x/ \r\=ps \r\=ph \r\r\=ps \r\r\=ph \r\r\r\=ps \r\r\r\=ph \r\rx \r\r\rx /^\R?x/ \r\=ps \r\=ph x \rx
/^\R+x/ \r\=ps \r\=ph \r\n\=ps \r\n\=ph \rx
/^a$/newline=crlf a\r\=ps a\r\=ph
/^a$/m,newline=crlf a\r\=ps a\r\=ph
/^(a$|a\r)/newline=crlf a\r\=ps a\r\=ph
/^(a$|a\r)/m,newline=crlf a\r\=ps a\r\=ph
/./newline=crlf \r\=ps \r\=ph /.{2,3}/newline=crlf \r\=ps \r\=ph \r\r\=ps \r\r\=ph \r\r\r\=ps \r\r\r\=ph
/.{2,3}?/newline=crlf \r\=ps \r\=ph \r\r\=ps \r\r\=ph \r\r\r\=ps \r\r\r\=ph
# Test simple validity check for restarts
/abcdef/ abc\=dfa_restart
/<H((?(?!<H|F>)(.)|(?R))++)*F>/ text <H more text <H texting more hexA0-"\xA0" hex above 7F-"\xBC" F> text xxxxx <H text F> text F> text2 <H text sample F> more text.
/^(?>.{4})abc|^\w\w.xabcd/ xxxxabcd xx\xa0xabcd
/^(.{4}){2}+abc|^\w\w.x\w\w\w\wabcd/ xxxxxxxxabcd xx\xa0xxxxxabcd
/abcd/ abcd\=ovector=0
# These tests show up auto-possessification
/[ab]*/ aaaa /[ab]*?/ aaaa /[ab]?/ aaaa /[ab]??/ aaaa /[ab]+/ aaaa /[ab]+?/ aaaa /[ab]{2,3}/ aaaa /[ab]{2,3}?/ aaaa /[ab]{2,}/ aaaa
/[ab]{2,}?/ aaaa
'\A(?:[^\"]++|\"(?:[^\"]*+|\"\")*+\")++' NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
'\A(?:[^\"]++|\"(?:[^\"]++|\"\")*+\")++' NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
/abc(?=xyz)/allusedtext abcxyzpqr abcxyzpqr\=aftertext /(?<=pqr)abc(?=xyz)/allusedtext xyzpqrabcxyzpqr xyzpqrabcxyzpqr\=aftertext /a\b/ a.\=allusedtext a\=allusedtext
/abc(?=abcde)(?=ab)/allusedtext abcabcdefg
/a*?b*?/ ab
/(*NOTEMPTY)a*?b*?/ ab ba cb
/(*NOTEMPTY_ATSTART)a*?b*?/aftertext ab cdab
/(a)(b)|(c)/ XcX\=ovector=2,get=1,get=2,get=3,get=4,getall
/(?<A>aa)/ aa\=get=A aa\=copy=A
/a+/no_auto_possess a\=ovector=2,get=1,get=2,getall aaa\=ovector=2,get=1,get=2,getall
/a(b)c(d)/ abc\=ph,copy=0,copy=1,getall
/ab(?C" any text with spaces ")cde/B abcde 12abcde
/^a(b)c(?C1)def/ abcdef
/^a(b)c(?C"AB")def/ abcdef
/^a(b)c(?C1)def/ abcdef\=callout_capture
/^a(b)c(?C{AB})def/B abcdef\=callout_capture
/^(?(?C25)(?=abc)abcd|xyz)/B abcdefg xyz123
/^(?(?C$abc$)(?=abc)abcd|xyz)/B abcdefg xyz123
/^ab(?C'first')cd(?C"second")ef/ abcdefg
/(?:a(?C`code`)){3}X/ aaaXY
# Binary zero in callout string /"a(?C'x" 00 "z')b"/hex abcdefgh
/(?(?!)a|b)/ bbb \= Expect no match aaa
/^/gm \n\n\n
/^/gm,alt_circumflex \n\n\n
/abc/use_offset_limit 1234abcde\=offset_limit=100 1234abcde\=offset_limit=9 1234abcde\=offset_limit=4 1234abcde\=offset_limit=4,offset=4 \= Expect no match 1234abcde\=offset_limit=4,offset=5 1234abcde\=offset_limit=3
/(?<=abc)/use_offset_limit 1234abc\=offset_limit=7 \= Expect no match 1234abc\=offset_limit=6
/abcd/null_context abcd\=null_context
/()()a+/no_auto_possess aaa\=allcaptures a\=allcaptures
/(*LIMIT_DEPTH=100)^((.)(?1)|.)$/ \= Expect depth limit exceeded a[00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]
/(*LIMIT_HEAP=0)^((.)(?1)|.)$/ \= Expect heap limit exceeded a[00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]
/(*LIMIT_HEAP=50000)^((.)(?1)|.)$/ \= Expect success a[00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]
/(02-)?[0-9]{3}-[0-9]{3}/ 02-123-123
/^(a(?2))(b)(?1)/ abbab\=find_limits
/abc/endanchored xyzabc \= Expect no match xyzabcdef \= Expect error xyzabc\=ph
/abc/ xyzabc\=endanchored \= Expect no match xyzabcdef\=endanchored \= Expect error xyzabc\=ps,endanchored
/abc|bcd/endanchored xyzabcd \= Expect no match xyzabcdef
/(*NUL)^.*/ a\nb\x00ccc /(*NUL)^.*/s a\nb\x00ccc /^x/m,newline=nul ab\x00xy /'#comment' 0d 0a 00 '^x\' 0a 'y'/x,newline=nul,hex x\nyz /(*NUL)^X\NY/ X\nY X\rY \= Expect no match X\x00Y
/(?<=abc|)/ abcde\=aftertext /(?<=|abc)/ abcde\=aftertext
/(?<=abc|)/endanchored abcde\=aftertext /(?<=|abc)/endanchored abcde\=aftertext
/(*LIMIT_MATCH=100).*(?![|H]?.*(?![|H]?););.*(?![|H]?.*(?![|H]?););\x00\x00\x00\x00\x00\x00\x00(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?![|);)?.*(![|H]?);)?.*(?![|H]?);)?.*(?![|H]?);)?.*(?![|H]););![|H]?););[|H]?);|H]?);)\x00\x00\x00\x00\x00\x00H]?););?![|H]?);)?.*(?![|H]?););[||H]?);)?.*(?![|H]?););[|H]?);(?![|H]?););![|H]?););[|H]?);|H]?);)?.*(?![|H]?););;[\x00\x00\x00\x00\x00\x00\x00![|H]?););![|H]?););[|H]?);|H]?);)?.*(?![|H]?););/no_dotstar_anchor \= Expect limit exceeded .*(?![|H]?.*(?![|H]?););.*(?![|H]?.*(?![|H]?););\x00\x00\x00\x00\x00\x00\x00(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?![|);)?.*(![|H]?);)?.*(?![|H]?);)?.*(?![|H]?);)?.*(?![|H]););![|H]?););[|H]?);|H]?);)\x00\x00\x00\x00\x00\x00H]?););?![|H]?);)?.*(?![|H]?););[||H]?);)?.*(?![|H]?););[|H]?);(?![|H]?););![|H]?););[|H]?);|H]?);)?.*(?![|H]?););;[\x00\x00\x00\x00\x00\x00\x00![|H]?););![|H]?););[|H]?);|H]?);)?.*(?![|H]?););
/\n/firstline xyz\nabc
/\nabc/firstline xyz\nabc
/\x{0a}abc/firstline,newline=crlf \= Expect no match xyz\r\nabc
/[abc]/firstline \= Expect no match \na /foobar/ the foobar thing\=copy_matched_subject the foobar thing\=copy_matched_subject,zero_terminate
/foobar/g the foobar thing foobar again\=copy_matched_subject
/(?(VERSION>=0)^B0W)/ B0W-W0W \= Expect no match 0
/(?(VERSION>=1000)^B0W|W0W)/ B0W-W0W \= Expect no match 0
/(?<=pqr)abc(?=xyz)/ 123pqrabcxy\=ps,allusedtext 123pqrabcxyz\=ps,allusedtext
/(?>a+b)/ aaaa\=ps aaaab\=ps /(abc)(?1)/ abca\=ps abcabc\=ps
/(?(?=abc).*|Z)/ ab\=ps abcxyz\=ps
/(abc)++x/ abcab\=ps abc\=ps ab\=ps abcx
/\z/ abc\=ph abc\=ps /\Z/ abc\=ph abc\=ps abc\n\=ph abc\n\=ps
/c*+(?<=[bc])/ abc\=ph ab\=ph abc\=ps ab\=ps
/c++(?<=[bc])/ abc\=ph ab\=ph
/(?<=(?=.(?<=x)))/ abx ab\=ph bxyz xyz
/(?![ab]).*/ ab\=ph
/c*+/ ab\=ph,offset=2
/ /anchored, firstline \x0a
/ /anchored,firstline,no_start_optimize \x0a
/ /firstline \x0a abc\x0adef
/|a(?0)/endanchored aaaa
# End of testinput6
|