libraries/spcre/libpcre/pcre/testdata/testinput7
author Tom Sutcliffe <thomas.sutcliffe@accenture.com>
Sat, 31 Jul 2010 19:07:57 +0100
changeset 23 092bcc217d9d
parent 0 7f656887cf89
permissions -rw-r--r--
Tidied iocli exports, build macro tweaks. Removed 4 overloads of CCommandBase::RunCommand[L] that are no longer used at all, and changed one more to not be exported as it's only used internally to iocli.dll. fixed builds on platforms that don't support btrace or any form of tracing.

/abc/
    abc
    
/ab*c/
    abc
    abbbbc
    ac
    
/ab+c/
    abc
    abbbbbbc
    *** Failers 
    ac
    ab
    
/a*/
    a
    aaaaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\F 
    
/(a|abcd|african)/
    a
    abcd
    african
    
/^abc/
    abcdef
    *** Failers
    xyzabc
    xyz\nabc    
    
/^abc/m
    abcdef
    xyz\nabc    
    *** Failers
    xyzabc
    
/\Aabc/
    abcdef
    *** Failers
    xyzabc
    xyz\nabc    
    
/\Aabc/m
    abcdef
    *** Failers
    xyzabc
    xyz\nabc    
    
/\Gabc/
    abcdef
    xyzabc\>3
    *** Failers
    xyzabc    
    xyzabc\>2 
    
/x\dy\Dz/
    x9yzz
    x0y+z
    *** Failers
    xyz
    xxy0z     
    
/x\sy\Sz/
    x yzz
    x y+z
    *** Failers
    xyz
    xxyyz
    
/x\wy\Wz/
    xxy+z
    *** Failers
    xxy0z
    x+y+z         
    
/x.y/
    x+y
    x-y
    *** Failers
    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 
    *** Failers 
    a\nbc\ndp+q
    a+bc\ndp\nq
    x\nyp\nq 

/a\d\z/
    ba0
    *** Failers
    ba0\n
    ba0\ncd   

/a\d\z/m
    ba0
    *** Failers
    ba0\n
    ba0\ncd   

/a\d\Z/
    ba0
    ba0\n
    *** Failers
    ba0\ncd   

/a\d\Z/m
    ba0
    ba0\n
    *** Failers
    ba0\ncd   

/a\d$/
    ba0
    ba0\n
    *** Failers
    ba0\ncd   

/a\d$/m
    ba0
    ba0\n
    ba0\ncd   
    *** Failers

/abc/i
    abc
    aBc
    ABC
    
/[^a]/
    abcd
    
/ab?\w/
    abz
    abbz
    azz  

/x{0,3}yz/
    ayzq
    axyzq
    axxyz
    axxxyzq
    axxxxyzq
    *** Failers
    ax
    axx     
      
/x{3}yz/
    axxxyzq
    axxxxyzq
    *** Failers
    ax
    axx     
    ayzq
    axyzq
    axxyz
      
/x{2,3}yz/
    axxyz
    axxxyzq
    axxxxyzq
    *** Failers
    ax
    axx     
    ayzq
    axyzq
      
/[^a]+/
    bac
    bcdefax
    *** Failers
    aaaaa   

/[^a]*/
    bac
    bcdefax
    *** Failers
    aaaaa   
    
/[^a]{3,5}/
    xyz
    awxyza
    abcdefa
    abcdefghijk
    *** Failers
    axya
    axa
    aaaaa         

/\d*/
    1234b567
    xyz
    
/\D*/
    a1234b567
    xyz
     
/\d+/
    ab1234c56
    *** Failers
    xyz
    
/\D+/
    ab123c56
    *** Failers
    789
    
/\d?A/
    045ABC
    ABC
    *** Failers
    XYZ
    
/\D?A/
    ABC
    BAC
    9ABC             
    *** Failers

/a+/
    aaaa

/^.*xyz/
    xyz
    ggggggggxyz
    
/^.+xyz/
    abcdxyz
    axyz
    *** Failers
    xyz
    
/^.?xyz/
    xyz
    cxyz       

/^\d{2,3}X/
    12X
    123X
    *** Failers
    X
    1X
    1234X     

/^[abcd]\d/
    a45
    b93
    c99z
    d04
    *** Failers
    e45
    abcd      
    abcd1234
    1234  

/^[abcd]*\d/
    a45
    b93
    c99z
    d04
    abcd1234
    1234  
    *** Failers
    e45
    abcd      

/^[abcd]+\d/
    a45
    b93
    c99z
    d04
    abcd1234
    *** Failers
    1234  
    e45
    abcd      

/^a+X/
    aX
    aaX 

/^[abcd]?\d/
    a45
    b93
    c99z
    d04
    1234  
    *** Failers
    abcd1234
    e45

/^[abcd]{2,3}\d/
    ab45
    bcd93
    *** Failers
    1234 
    a36 
    abcd1234
    ee45

/^(abc)*\d/
    abc45
    abcabcabc45
    42xyz 
    *** Failers

/^(abc)+\d/
    abc45
    abcabcabc45
    *** Failers
    42xyz 

/^(abc)?\d/
    abc45
    42xyz 
    *** Failers
    abcabcabc45

/^(abc){2,3}\d/
    abcabc45
    abcabcabc45
    *** Failers
    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  
    *** Failers)
    a(b(c)d  

/^>abc>([^()]|\((?1)*\))*<xyz<$/
    >abc>123<xyz<
    >abc>1(2)3<xyz<
    >abc>(1(2)3)<xyz<

/^(?>a*)\d/
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9876
    *** Failers 
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

/< (?: (?(R) \d++  | [^<>]*+) | (?R)) * >/x
    <>
    <abcd>
    <abc <123> hij>
    <abc <def> hij>
    <abc<>def> 
    <abc<>      
    *** Failers
    <abc

/^(?(?=abc)\w{3}:|\d\d)$/        
    abc:                          
    12                             
    *** Failers                     
    123                       
    xyz                        
                                
/^(?(?!abc)\d\d|\w{3}:)$/      
    abc:                        
    12         
    *** Failers
    123
    xyz    

/^(?=abc)\w{5}:$/        
    abcde:                          
    *** Failers                     
    abc.. 
    123                       
    vwxyz                        
                                
/^(?!abc)\d\d$/      
    12         
    *** Failers
    abcde:
    abc..  
    123
    vwxyz    

/(?<=abc|xy)123/
    abc12345
    wxy123z
    *** Failers
    123abc

/(?<!abc|xy)123/
    123abc
    mno123456 
    *** Failers
    abc12345
    wxy123z

/abc(?C1)xyz/
    abcxyz
    123abcxyz999 

/(ab|cd){3,4}/C
  ababab
  abcdabcd
  abcdcdcdcdcd  

/^abc/
    abcdef
    *** Failers
    abcdef\B  

/^(a*|xyz)/
    bcd
    aaabcd
    xyz
    xyz\N  
    *** Failers
    bcd\N   
    
/xyz$/
    xyz
    xyz\n
    *** Failers
    xyz\Z
    xyz\n\Z    
    
/xyz$/m
    xyz
    xyz\n 
    abcxyz\npqr 
    abcxyz\npqr\Z 
    xyz\n\Z    
    *** Failers
    xyz\Z

/\Gabc/
    abcdef
    defabcxyz\>3 
    *** Failers 
    defabcxyz

/^abcdef/
    ab\P
    abcde\P
    abcdef\P
    *** Failers
    abx\P    

/^a{2,4}\d+z/
    a\P
    aa\P
    aa2\P 
    aaa\P
    aaa23\P 
    aaaa12345\P
    aa0z\P
    aaaa4444444444444z\P 
    *** Failers
    az\P 
    aaaaa\P 
    a56\P 

/^abcdef/
   abc\P
   def\R 
   
/(?<=foo)bar/
   xyzfo\P 
   foob\P\>2 
   foobar...\R\P\>4 
   xyzfo\P
   foobar\>2  
   *** Failers
   xyzfo\P
   obar\R   

/(ab*(cd|ef))+X/
    adfadadaklhlkalkajhlkjahdfasdfasdfladsfjkj\P\Z
    lkjhlkjhlkjhlkjhabbbbbbcdaefabbbbbbbefa\P\B\Z
    cdabbbbbbbb\P\R\B\Z
    efabbbbbbbbbbbbbbbb\P\R\B\Z
    bbbbbbbbbbbbcdXyasdfadf\P\R\B\Z    

/(a|b)/SF>testsavedregex
<testsavedregex
    abc
    ** Failers
    def  
    
/the quick brown fox/
    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?

/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
    *** Failers
    abxyzpqrrabbxyyyypqAzz
    abxyzpqrrrrabbxyyyypqAzz
    abxyzpqrrrabxyyyypqAzz
    aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
    aaaabcxyzzzzpqrrrabbbxyyypqAzz
    aaabcxyzpqrrrabbxyyyypqqqqqqqAzz

/^(abc){1,2}zz/
    abczz
    abcabczz
    *** Failers
    zz
    abcabcabczz
    >>abczz

/^(b+?|a){1,2}?c/
    bc
    bbc
    bbbc
    bac
    bbac
    aac
    abbbbbbbbbbbc
    bbbbbbbbbbbac
    *** Failers
    aaac
    abbbbbbbbbbbac

/^(b+|a){1,2}c/
    bc
    bbc
    bbbc
    bac
    bbac
    aac
    abbbbbbbbbbbc
    bbbbbbbbbbbac
    *** Failers
    aaac
    abbbbbbbbbbbac

/^(b+|a){1,2}?bc/
    bbc

/^(b*|ba){1,2}?bc/
    babc
    bbabc
    bababc
    *** Failers
    bababbc
    babababc

/^(ba|b*){1,2}?bc/
    babc
    bbabc
    bababc
    *** Failers
    bababbc
    babababc

/^\ca\cA\c[\c{\c:/
    \x01\x01\e;z

/^[ab\]cde]/
    athing
    bthing
    ]thing
    cthing
    dthing
    ething
    *** Failers
    fthing
    [thing
    \\thing

/^[]cde]/
    ]thing
    cthing
    dthing
    ething
    *** Failers
    athing
    fthing

/^[^ab\]cde]/
    fthing
    [thing
    \\thing
    *** Failers
    athing
    bthing
    ]thing
    cthing
    dthing
    ething

/^[^]cde]/
    athing
    fthing
    *** Failers
    ]thing
    cthing
    dthing
    ething

/^\/
    

/^/
    

/^[0-9]+$/
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    100
    *** Failers
    abc

/^.*nter/
    enter
    inter
    uponter

/^xxx[0-9]+$/
    xxx0
    xxx1234
    *** Failers
    xxx

/^.+[0-9][0-9][0-9]$/
    x123
    xx123
    123456
    *** Failers
    123
    x1234

/^.+?[0-9][0-9][0-9]$/
    x123
    xx123
    123456
    *** Failers
    123
    x1234

/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
    abc!pqr=apquxz.ixr.zzz.ac.uk
    *** Failers
    !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
    *** Fail if we don't

/([\da-f:]+)$/i
    0abc
    abc
    fed
    E
    ::
    5f03:12C0::932e
    fed def
    Any old stuff
    *** Failers
    0zzz
    gzzz
    fed\x20
    Any old rubbish

/^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
    .1.2.3
    A.12.123.0
    *** Failers
    .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   (
    *** Failers
    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-.
    *** Failers
    -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
    *** Failers
    *.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
    *** Failers
    \"1234\" : things

/^$/
    \
    *** Failers

/   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/x
    ab c
    *** Failers
    abc
    ab cde

/(?x)   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/
    ab c
    *** Failers
    abc
    ab cde

/^   a\ b[c ]d       $/x
    a bcd
    a b d
    *** Failers
    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__
    *** Failers
    1234567

/^[aeiou\d]{4,5}$/
    uoie
    1234
    12345
    aaaaa
    *** Failers
    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
    *** Failers
    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
    *** Failers
    abc123

/^1234(?# test newlines
  inside)/
    1234

/^1234 #comment in extended re
  /x
    1234

/#rhubarb
  abcd/x
    abcd

/^abcd#rhubarb/x
    abcd

/(?!^)abc/
    the abc
    *** Failers
    abc

/(?=^)abc/
    abc
    *** Failers
    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

/  (?: [\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
    *** Failers
    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
    *** Failers
    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
    *** Failers
    A\0Z
    A\0\x0\0\x0Z

/^\s/
    \040abc
    \x0cabc
    \nabc
    \rabc
    \tabc
    *** Failers
    abc

/^a	b
      c/x
    abc

/ab{1,3}bc/
    abbbbc
    abbbc
    abbc
    *** Failers
    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
    *** Failers
    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
    *** Failers
    qqq\nabc
    abc\nzzz
    qqq\nabc\nzzz

/\Aabc\Z/m
    abc
    abc\n 
    *** Failers
    qqq\nabc
    abc\nzzz
    qqq\nabc\nzzz
    
/\A(.)*\Z/s
    abc\ndef

/\A(.)*\Z/m
    *** Failers
    abc\ndef

/(?:b)|(?::+)/
    b::c
    c::b

/[-az]+/
    az-
    *** Failers
    b

/[az-]+/
    za-
    *** Failers
    b

/[a\-z]+/
    a-z
    *** Failers
    b

/[a-z]+/
    abcdxyz

/[\d-]+/
    12-34
    *** Failers
    aaa

/[\d-z]+/
    12-34z
    *** Failers
    aaa

/\x5c/
    \\

/\x20Z/
    the Zoo
    *** Failers
    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/<lf>
    a\rb
    *** Failers
    a\nb

/abc$/
    abc
    abc\n
    *** Failers
    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

/abc\81/
    abc\081
    abc\0\x38\x31

/abc\91/
    abc\091
    abc\0\x39\x31

/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
    abcdefghijk\12S

/ab\idef/
    abidef

/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
    *** Failers
    anything
    b\bc   
    baccd

/[^a]/
    Abc
  
/[^a]/i
    Abc 

/[^a]+/
    AAAaAbc
  
/[^a]+/i
    AAAaAbc 

/[^a]+/
    bbb\nccc
   
/[^k]$/
    abc
    *** Failers
    abk   
   
/[^k]{2,3}$/
    abc
    kbc
    kabc 
    *** Failers
    abk
    akb
    akk 

/^\d{8,}\@.+[^k]$/
    12345678\@a.b.c.d
    123456789\@x.y.z
    *** Failers
    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
    *** Failers 
    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
    *** Failers
    ABC123
    
/^[W-]46]/
    W46]789 
    -46]789
    *** Failers
    Wall
    Zebra
    42
    [abcd] 
    ]abcd[
       
/^[W-\]46]/
    W46]789 
    Wall
    Zebra
    Xylophone  
    42
    [abcd] 
    ]abcd[
    \\backslash 
    *** Failers
    -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
  word cat dog elephant mussel cow horse canary baboon snake shark

/word (?:[a-zA-Z0-9]+ ){0,300}otherword/
  word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope

/^(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}/
    bcd
    abc
    aab  

/^(a){1,2}/
    bcd
    abc
    aab  

/^(a){1,3}/
    bcd
    abc
    aab
    aaa   

/^(a){1,}/
    bcd
    abc
    aab
    aaa
    aaaaaaaa    

/.*\.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 
    *** Failers
    abcde\nBar  

/(.*X|^B)/m
    abcde\n1234Xyz
    BarFoo 
    abcde\nBar  

/(.*X|^B)/s
    abcde\n1234Xyz
    BarFoo 
    *** Failers
    abcde\nBar  

/(.*X|^B)/ms
    abcde\n1234Xyz
    BarFoo 
    abcde\nBar  

/(?s)(.*X|^B)/
    abcde\n1234Xyz
    BarFoo 
    *** Failers 
    abcde\nBar  

/(?s:.*X|^B)/
    abcde\n1234Xyz
    BarFoo 
    *** Failers 
    abcde\nBar  

/^.*B/
    **** Failers
    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
    *** Failers 
    z 

/abcde{0,0}/
    abcd
    *** Failers
    abce  

/ab[cd]{0,0}e/
    abe
    *** Failers
    abcde 
    
/ab(c){0,0}d/
    abd
    *** Failers
    abcd   

/a(b*)/
    a
    ab
    abbbb
    *** Failers
    bbbbb    
    
/ab\d{0}e/
    abe
    *** Failers
    ab1e   
    
/"([^\\"]+|\\.)*"/
    the \"quick\" brown fox
    \"the \\\"quick\\\" brown fox\" 

/.*?/g+
    abc
  
/\b/g+
    abc 

/\b/+g
    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
    *** Failers 
    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
    x\nb\n
    a\bx\n  
    
/\x0{ab}/
    \0{ab} 

/(A|B)*?CD/
    CD 
    
/(A|B)*CD/
    CD 

/(?<!bar)foo/
    foo
    catfood
    arfootle
    rfoosh
    *** Failers
    barfoo
    towbarfoo

/\w{3}(?<!bar)foo/
    catfood
    *** Failers
    foo
    barfoo
    towbarfoo

/(?<=(foo)a)bar/
    fooabar
    *** Failers
    bar
    foobbar
      
/\Aabc\z/m
    abc
    *** Failers
    abc\n   
    qqq\nabc
    abc\nzzz
    qqq\nabc\nzzz

"(?>.*/)foo"
    /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
    *** Failers 
    1.235 

/^((?>\w+)|(?>\s+))*$/
    now is the time for all good men to come to the aid of the party
    *** Failers
    this is not a line with only words and spaces!
    
/(\d+)(\w)/
    12345a
    12345+ 

/((?>\d+))(\w)/
    12345a
    *** Failers
    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)
    *** Failers
    ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   

/a(?-i)b/i
    ab
    Ab
    *** Failers 
    aB
    AB
        
/(a (?x)b c)d e/
    a bcd e
    *** Failers
    a b cd e
    abcd e   
    a bcde 
 
/(a b(?x)c d (?-x)e f)/
    a bcde f
    *** Failers
    abcdef  

/(a(?i)b)c/
    abc
    aBc
    *** Failers
    abC
    aBC  
    Abc
    ABc
    ABC
    AbC
    
/a(?i:b)c/
    abc
    aBc
    *** Failers 
    ABC
    abC
    aBC
    
/a(?i:b)*c/
    aBc
    aBBc
    *** Failers 
    aBC
    aBBC
    
/a(?=b(?i)c)\w\wd/
    abcd
    abCd
    *** Failers
    aBCd
    abcD     
    
/(?s-i:more.*than).*million/i
    more than million
    more than MILLION
    more \n than Million 
    *** Failers
    MORE THAN MILLION    
    more \n than \n million 

/(?:(?s-i)more.*than).*million/i
    more than million
    more than MILLION
    more \n than Million 
    *** Failers
    MORE THAN MILLION    
    more \n than \n million 
    
/(?>a(?i)b+)+c/ 
    abc
    aBbc
    aBBc 
    *** Failers
    Abc
    abAb    
    abbC 
    
/(?=a(?i)b)\w\wc/
    abc
    aBc
    *** Failers
    Ab 
    abC
    aBC     
    
/(?<=a(?i)b)(\w\w)c/
    abxxc
    aBxxc
    *** Failers
    Abxxc
    ABxxc
    abxxC      

/^(?(?=abc)\w{3}:|\d\d)$/
    abc:
    12
    *** Failers
    123
    xyz    

/^(?(?!abc)\d\d|\w{3}:)$/
    abc:
    12
    *** Failers
    123
    xyz    
    
/(?(?<=foo)bar|cat)/
    foobar
    cat
    fcat
    focat   
    *** Failers
    foocat  

/(?(?<!foo)cat|bar)/
    foobar
    cat
    fcat
    focat   
    *** Failers
    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
    *** Failers
    sep-12-98
        
/(?i:saturday|sunday)/
    saturday
    sunday
    Saturday
    Sunday
    SATURDAY
    SUNDAY
    SunDay
    
/(a(?i)bc|BB)x/
    abcx
    aBCx
    bbx
    BBx
    *** Failers
    abcX
    aBCX
    bbX
    BBX               

/^([ab](?i)[cd]|[ef])/
    ac
    aC
    bD
    elephant
    Europe 
    frog
    France
    *** Failers
    Africa     

/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
    ab
    aBd
    xy
    xY
    zebra
    Zambesi
    *** Failers
    aCD  
    XY  

/(?<=foo\n)^bar/m
    foo\nbar
    *** Failers
    bar
    baz\nbar   

/(?<=(?<!foo)bar)baz/
    barbaz
    barbarbaz 
    koobarbaz 
    *** Failers
    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
    *** Failers
    xbc
    axc
    abx

/ab*c/
    abc

/ab*bc/
    abc
    abbc
    abbbbc

/.{1}/
    abbbbc

/.{3,4}/
    abbbbc

/ab{0,}bc/
    abbbbc

/ab+bc/
    abbc
    *** Failers
    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/
    *** Failers
    abq
    abbbbc

/ab?bc/
    abbc
    abc

/ab{0,1}bc/
    abc

/ab?bc/

/ab?c/
    abc

/ab{0,1}c/
    abc

/^abc$/
    abc
    *** Failers
    abbbbc
    abcc

/^abc/
    abcc

/^abc$/

/abc$/
    aabc
    *** Failers
    aabc
    aabcd

/^/
    abc

/$/
    abc

/a.c/
    abc
    axc

/a.*c/
    axyzc

/a[bc]d/
    abd
    *** Failers
    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
    *** Failers
    abd
    abd

/a[^-b]c/
    adc

/a[^]b]c/
    adc
    *** Failers
    a-c
    a]c

/\ba\b/
    a-
    -a
    -a-

/\by\b/
    *** Failers
    xy
    yz
    xyz

/\Ba\B/
    *** Failers
    a-
    -a
    -a-

/\By\b/
    xy

/\by\B/
    yz

/\By\B/
    xyz

/\w/
    a

/\W/
    -
    *** Failers
    -
    a

/a\sb/
    a b

/a\Sb/
    a-b
    *** Failers
    a-b
    a b

/\d/
    1

/\D/
    -
    *** Failers
    -
    1

/[\w]/
    a

/[\W]/
    -
    *** Failers
    -
    a

/a[\s]b/
    a b

/a[\S]b/
    a-b
    *** Failers
    a-b
    a b

/[\d]/
    1

/[\D]/
    -
    *** Failers
    -
    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/
    *** Failers
    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/
    *** Failers
    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
    *** Failers
    effg
    bcdd

/((((((((((a))))))))))/
    a

/(((((((((a)))))))))/
    a

/multiple words of text/
    *** Failers
    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
    *** Failers
    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
    *** Failers
    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
    *** Failers
    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
    *** Failers
    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
    *** Failers
    AABC
    AXYZD

/a[bc]d/i
    ABD

/a[b-d]e/i
    ACE
    *** Failers
    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
    *** Failers
    ABD
    A-C

/a[^]b]c/i
    ADC

/ab|cd/i
    ABC
    ABCD

/()ef/i
    DEF

/$b/i
    *** Failers
    A]C
    B

/a\(b/i
    A(B

/a\(*b/i
    AB
    A((B

/a\\b/i
    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/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
    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
    *** Failers
    ADCDCDE
    EFFG
    BCDD

/((((((((((a))))))))))/i
    A

/(((((((((a)))))))))/i
    A

/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
    A

/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
    C

/multiple words of text/i
    *** Failers
    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
    *** Failers
    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/
    *** Failers
    cb
    aB

/((?i)a)b/

/(?i:a)b/
    ab

/((?i:a))b/
    ab

/(?i:a)b/
    Ab

/((?i:a))b/
    Ab

/(?i:a)b/
    *** Failers
    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
    *** Failers
    aB
    Ab

/((?-i)a)b/i

/(?:(?-i)a)b/i
    aB

/((?-i)a)b/i
    aB

/(?:(?-i)a)b/i
    *** Failers
    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
    *** Failers
    AB
    Ab

/((?-i:a))b/i

/(?-i:a)b/i
    aB

/((?-i:a))b/i
    aB

/(?-i:a)b/i
    *** Failers
    Ab
    AB

/((?-i:a))b/i

/((?-i:a.))b/i
    *** Failers
    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/
    *** Failers
    B\nB
    dbcb

/(?<![cd])[ab]/
    dbaacb

/(?<!(c|d))b/

/(?<!(c|d))[ab]/
    dbaacb

/(?<!cd)[ab]/
    cdaccb

/^(?:a?b?)*$/
    *** Failers
    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/
    *** Failers
    a\nb\nc\n
    a\nb\nc\n

/((?m)^b)/
    a\nb\nc\n

/(?(?!a)a|b)/

/(?(?!a)b|a)/
    a

/(?(?=a)b|a)/
    *** Failers
    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
    *** Failers
    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/
    *** Failers
    aaab
    a\nb\n

/b\Z/
    a\nb\n

/b\z/

/b\Z/
    a\nb

/b\z/
    a\nb
    *** Failers
    
/(?>.*)(?<=(abcd|wxyz))/
    alphabetabcd
    endingwxyz
    *** Failers
    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
    word cat dog elephant mussel cow horse canary baboon snake shark
  
/word (?>[a-zA-Z0-9]+ ){0,30}otherword/
    word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope

/(?<=\d{3}(?!999))foo/
    999foo
    123999foo 
    *** Failers
    123abcfoo
    
/(?<=(?!...999)\d{3})foo/
    999foo
    123999foo 
    *** Failers
    123abcfoo

/(?<=\d{3}(?!999)...)foo/
    123abcfoo
    123456foo 
    *** Failers
    123999foo  
    
/(?<=\d{3}...)(?<!999)foo/
    123abcfoo   
    123456foo 
    *** Failers
    123999foo  

/((Z)+|A)*/
    ZABCDEFG

/(Z()|A)*/
    ZABCDEFG

/(Z(())|A)*/
    ZABCDEFG

/((?>Z)+|A)*/
    ZABCDEFG

/((?>)+|A)*/
    ZABCDEFG

/a*/g
    abbab

/^[a-\d]/
    abcde
    -things
    0digit
    *** Failers
    bcdef    

/^[\d-a]/
    abcde
    -things
    0digit
    *** Failers
    bcdef    
    
/[[: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
  a\nxb\n

/abc\Qabc\Eabc/
    abcabcabc
    
/abc\Q(*+|\Eabc/
    abc(*+|abc 

/   abc\Q abc\Eabc/x
    abc abcabc
    *** Failers
    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
    *** Failers
    xyzabc  

/\Gabc./g
    abc1abc2xyzabc3

/abc./g
    abc1abc2xyzabc3 

/a(?x: b c )d/
    XabcdY
    *** Failers 
    Xa b c d Y 

/((?x)x y z | a b c)/
    XabcY
    AxyzB 

/(?i)AB(?-i)C/
    XabCY
    *** Failers
    XabcY  

/((?i)AB(?-i)C|D)E/
    abCE
    DE
    *** Failers
    abcE
    abCe  
    dE
    De    

/[z\Qa-d]\E]/
    z
    a
    -
    d
    ] 
    *** Failers
    b     

/[\z\C]/
    z
    C 
    
/\M/
    M 
    
/(a+)*b/
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
    
/(?i)reg(?:ul(?:[a]|ae)r|ex)/
    REGular
    regulaer
    Regex  
    regulr 

/[--]+/
    
    
    
    

/(?<=Z)X./
    \x84XAZXB

/^(?(2)a|(1)(2))+$/
    123a

/(?<=a|bbbb)c/
    ac
    bbbbc

/abc/>testsavedregex
<testsavedregex
    abc
    *** Failers
    bca
    
/abc/F>testsavedregex
<testsavedregex
    abc
    *** Failers
    bca

/(a|b)/S>testsavedregex
<testsavedregex
    abc
    *** Failers
    def  
    
/(a|b)/SF>testsavedregex
<testsavedregex
    abc
    *** Failers
    def  
    
/line\nbreak/
    this is a line\nbreak
    line one\nthis is a line\nbreak in the second line 

/line\nbreak/f
    this is a line\nbreak
    ** Failers 
    line one\nthis is a line\nbreak in the second line 

/line\nbreak/mf
    this is a line\nbreak
    ** Failers 
    line one\nthis is a line\nbreak in the second line 

/1234/
    123\P
    a4\P\R

/1234/
    123\P
    4\P\R

/^/mg
    a\nb\nc\n
    \ 
    
/(?<=C\n)^/mg
    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/m
    xyz\nabc
    xyz\nabc\<lf>
    xyz\r\nabc\<lf>
    xyz\rabc\<cr>
    xyz\r\nabc\<crlf>
    ** Failers 
    xyz\nabc\<cr>
    xyz\r\nabc\<cr>
    xyz\nabc\<crlf>
    xyz\rabc\<crlf>
    xyz\rabc\<lf>
    
/abc$/m<lf>
    xyzabc
    xyzabc\n 
    xyzabc\npqr 
    xyzabc\r\<cr> 
    xyzabc\rpqr\<cr> 
    xyzabc\r\n\<crlf> 
    xyzabc\r\npqr\<crlf> 
    ** Failers
    xyzabc\r 
    xyzabc\rpqr 
    xyzabc\r\n 
    xyzabc\r\npqr 
    
/^abc/m<cr>
    xyz\rabcdef
    xyz\nabcdef\<lf>
    ** Failers  
    xyz\nabcdef
       
/^abc/m<lf>
    xyz\nabcdef
    xyz\rabcdef\<cr>
    ** Failers  
    xyz\rabcdef
       
/^abc/m<crlf>
    xyz\r\nabcdef
    xyz\rabcdef\<cr>
    ** Failers  
    xyz\rabcdef
    
/.*/<lf>
    abc\ndef
    abc\rdef
    abc\r\ndef
    \<cr>abc\ndef
    \<cr>abc\rdef
    \<cr>abc\r\ndef
    \<crlf>abc\ndef
    \<crlf>abc\rdef
    \<crlf>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/
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4

/(?>a|)*\d/
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4

/(?:a|)*\d/
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4

/^a.b/<lf>
    a\rb
    a\nb\<cr> 
    ** Failers
    a\nb
    a\nb\<any>
    a\rb\<cr>   
    a\rb\<any>   

/^abc./mgx<any>
    abc1 \x0aabc2 \x0babc3xx \x0cabc4 \x0dabc5xx \x0d\x0aabc6 \x85abc7 JUNK

/abc.$/mgx<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   
    ** Failers
    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 
    ** Failers
    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 
    ** Failers
    a\n\n\n\rb
    a\r

/^a[\R]b/<bsr_unicode>
    aRb
    ** Failers
    a\nb  

/.+foo/
    afoo
    ** Failers 
    \r\nfoo 
    \nfoo 

/.+foo/<crlf>
    afoo
    \nfoo 
    ** Failers 
    \r\nfoo 

/.+foo/<any>
    afoo
    ** Failers 
    \nfoo 
    \r\nfoo 

/.+foo/s
    afoo
    \r\nfoo 
    \nfoo 

/^$/mg<any>
    abc\r\rxyz
    abc\n\rxyz  
    ** Failers 
    abc\r\nxyz

/^X/m
    XABC
    ** Failers 
    XABC\B

/(?m)^$/<any>g+
    abc\r\n\r\n

/(?m)^$|^\r\n/<any>g+ 
    abc\r\n\r\n
    
/(?m)$/<any>g+ 
    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 
    ** Failers 
    xyzxyz 
 
/\H\h\V\v/
    X X\x0a
    X\x09X\x0b
    ** Failers
    \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
    ** Failers 
    \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
    ** Failers
    >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/<crlf>
    \r\nA
    
/\nA/<crlf>
    \r\nA 

/[\r\n]A/<crlf>
    \r\nA 

/(\r|\n)A/<crlf>
    \r\nA 

/a\Rb/I<bsr_anycrlf>
    a\rb
    a\nb
    a\r\nb
    ** Failers
    a\x85b
    a\x0bb     

/a\Rb/I<bsr_unicode>
    a\rb
    a\nb
    a\r\nb
    a\x85b
    a\x0bb     
    ** Failers 
    a\x85b\<bsr_anycrlf>
    a\x0bb\<bsr_anycrlf>
    
/a\R?b/I<bsr_anycrlf>
    a\rb
    a\nb
    a\r\nb
    ** Failers
    a\x85b
    a\x0bb     

/a\R?b/I<bsr_unicode>
    a\rb
    a\nb
    a\r\nb
    a\x85b
    a\x0bb     
    ** Failers 
    a\x85b\<bsr_anycrlf>
    a\x0bb\<bsr_anycrlf>
    
/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
    ** Failers
    a\x85\85b
    a\x0b\0bb     

/a\R{2,4}b/I<bsr_unicode>
    a\r\rb
    a\n\n\nb
    a\r\n\n\r\rb
    a\x85\85b
    a\x0b\0bb     
    ** Failers 
    a\r\r\r\r\rb 
    a\x85\85b\<bsr_anycrlf>
    a\x0b\0bb\<bsr_anycrlf>
    
/a(?!)|\wbc/
    abc 

/a[]b/<JS>
    ** Failers
    ab

/a[]+b/<JS>
    ** Failers
    ab 

/a[]*+b/<JS>
    ** Failers
    ab 

/a[^]b/<JS>
    aXb
    a\nb 
    ** Failers
    ab  
    
/a[^]+b/<JS> 
    aXb
    a\nX\nXb 
    ** Failers
    ab  

/ End of testinput7 /