o
    ZhZ                    @   s   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZG dd deZ	G dd de
ZG dd dejZd	d
 ZedkrDe  dS dS )    )proxyNc                          e Zd Z fddZ  ZS )StrSubclassc                       t t |S N)r   super__getitem__selfindex	__class__ G/var/www/html/lang_env/lib/python3.10/site-packages/regex/test_regex.pyr         zStrSubclass.__getitem____name__
__module____qualname__r   __classcell__r   r   r   r   r   
       r   c                       r   )BytesSubclassc                    r   r   )r   r   r   r	   r   r   r   r      r   zBytesSubclass.__getitem__r   r   r   r   r   r      r   r   c                   @   s  e Zd ZdZdZdZdZdZdZdZ	dZ
dZd	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdddZdd Zd d! Z d"d# Z!d$d% Z"d&d' Z#d(d) Z$d*d+ Z%d,d- Z&d.d/ Z'd0d1 Z(d2d3 Z)d4d5 Z*d6d7 Z+d8d9 Z,d:d; Z-d<d= Z.d>d? Z/d@dA Z0dBdC Z1dDdE Z2dFdG Z3dHdI Z4dJdK Z5dLdM Z6dNdO Z7dPdQ Z8dRdS Z9dTdU Z:dVdW Z;dXdY Z<dZd[ Z=d\d] Z>d^d_ Z?d`da Z@dbdc ZAddde ZBdfdg ZCdhdi ZDdjdk ZEdldm ZFdndo ZGdpdq ZHdrds ZIdtdu ZJdvdw ZKdxdy ZLdzd{ ZMd|d} ZNd~d ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Zndd Zodd ZpddÄ Zqddń ZrddǄ ZsddɄ Ztdd˄ Zudd̈́ Zvddτ Zwddф Zxddӄ ZyddՄ Zzddׄ Z{ddل Z|ddۄ Z}dd݄ Z~dd߄ Zdd Zdd Zdd Zdd Zdd ZdS )
RegexTestsz<class '_regex.Pattern'>z5cannot process flags argument with a compiled patternzinvalid group referencez	missing >zbad character in group namezmissing group namez	missing <zunknown groupzbad escape \(end of pattern\)zbad escape \\zunterminated character setz2cannot use a string pattern on a bytes-like objectz2cannot use a bytes pattern on a string-like objectz"expected str instance, bytes foundz'expected a bytes-like object, str foundz,cannot use UNICODE flag with a bytes patternz9ASCII, LOCALE and UNICODE flags are mutually incompatiblez
missing \)zunbalanced parenthesiszbad character rangeznothing to repeatzmultiple repeatzcannot refer to an open groupzduplicate groupz'bad inline flags: cannot turn flags offzundefined character nameNc                    s,    ||   fdd|| d S )Nc                    sJ   t |ttfrt| |D ]	\}}|| qd S t| t|  d S r   )
isinstancetuplelistzipZassertIstype)actualexpectxymsgrecurser
   r   r   r$   2   s
   z,RegexTests.assertTypedEqual.<locals>.recurse)assertEqual)r
   r   r   r#   r   r"   r   assertTypedEqual/   s   zRegexTests.assertTypedEqualc                 C   s:   d}t d}t|}|d|dkr|   d S d S )NZQabbbcRzab+c)regexcompiler   findallfail)r
   sr    r!   r   r   r   test_weakref;   s   
zRegexTests.test_weakrefc                 C   s   |  tdddd |  tdd d |  tdddd |  tdd d |  td	d
d  |  tdddd |  tdd d |  tdddd |  tdd d |  tddd  d S )Na*xxxr   r   r   zx*Zaxxx+      r    aaaZxxxar   r3   a+)r%   r'   searchspanmatchr
   r   r   r   test_search_star_plusB   s   z RegexTests.test_search_star_plusc                 C   s   t |d }t|d S )Nr   r2   )intstr)r
   ZmatchobjZ	int_valuer   r   r   bump_numN   s   zRegexTests.bump_numc                 C   s  |  tdddd |  td| jdd |  td| jddd	 |  td
dd dd |  td
ddd |  tdddd |  tdddd |  tdddd |  tdddd |  tdddd |  tdddd |  tdddtdtd td td td td   |  td!d"d#d$ |  tdd%dd |  tdd&dd |  tdd'dd |  tdd(dd) |  td*d+d*d, d S )-N(?i)b+r    	bbbb BBBBx x\d+z08.2 -2 23x99yz9.3 -3 24x100yr3   z9.3 -3 23x99y.c                 S      dS )N\nr   mr   r   r   <lambda>Y       z1RegexTests.test_basic_regex_sub.<locals>.<lambda>rE   
(?P<a>x)z
\g<a>\g<a>xxZxxxxz
\g<a>\g<1>
(?P<unk>x)z\g<unk>\g<unk>z
\g<1>\g<1>az\t\n\v\r\f\a\bz	
	
	   
               z^\s*XtestZXtestz\x0Az\u000Az
\U0000000Az\N{LATIN CAPITAL LETTER A}A   xs   \x0A   
)r%   r'   subr>   chrr:   r   r   r   test_basic_regex_subR   sH   zRegexTests.test_basic_regex_subc                 C      |  tdddd d S )NrM   z\g<1>\g<1>\brL   zxxxxr%   r'   r[   r:   r   r   r   test_bug_449964q   s   zRegexTests.test_bug_449964c                 C   s\   |  tdddd |  tdddd |  tdddd |  tdddd d S )Nz\r\nrE   z
abc
def
zabc
def

rJ   r_   r:   r   r   r   test_bug_449000v   s   zRegexTests.test_bug_449000c                    sn   t d | t| j fdd | t| j fdd | t| j fdd | t| j fdd d S )NrC   c                         t  dt jS NrX   )r'   r9   Ir   patternr   r   rH          z*RegexTests.test_bug_1661.<locals>.<lambda>c                      rc   rd   )r'   r7   re   r   rf   r   r   rH      rh   c                      rc   rd   )r'   r)   re   r   rf   r   r   rH      rh   c                      s   t  t jS r   )r'   r(   re   r   rf   r   r   rH          )r'   r(   assertRaisesRegex
ValueErrorFLAGS_WITH_COMPILED_PATr:   r   rf   r   test_bug_1661   s   








zRegexTests.test_bug_1661c                 C   s    |  tttd| j d S )Nz(?P<quote>)(?(quote)))r%   reprr   r'   r(   PATTERN_CLASSr:   r   r   r   test_bug_3629   s   zRegexTests.test_bug_3629c                 C   s  |  tdddd |  tdddd |  tdddd |  tdddd |  tdd	dd
 |  tdddd |  tdddd |  tdddd |  tdddd |  tdddd |  tdddd |  tdddd |  tdddd
 |  tdddd |  tdddd |  tdddd |  tdddd |  tdddd  | tj| jd!d"  | tj| jd#d"  | tj| jd$d"  | tj| jd%d"  | tj| jd&d"  | tj| jd'd"  | tj| jd(d"  | tj| jd)d"  | tj| jd*d"  | tj| jd+d"  | tj| jd,d"  | tj| jd-d"  |  td.d/dd |  td0d1d2d3 |  td0d4d2d5 d S )6Nr    \0 z\000z\001z\008z 8z\009z 9z\111re   z\117Oz\1111ZI1z\00z\07z\08\09z\0az az\400u   Āz\777u   ǿrY   s   \400    s   \777   c                   S      t dddS )Nr    \1r'   r[   r   r   r   r   rH         z=RegexTests.test_sub_template_numeric_escape.<locals>.<lambda>c                   S   ry   )Nr    z\8r{   r   r   r   r   rH      r|   c                   S   ry   )Nr    z\9r{   r   r   r   r   rH      r|   c                   S   ry   )Nr    \11r{   r   r   r   r   rH      r|   c                   S   ry   )Nr    z\18r{   r   r   r   r   rH      r|   c                   S   ry   )Nr    z\1ar{   r   r   r   r   rH      r|   c                   S   ry   )Nr    z\90r{   r   r   r   r   rH      r|   c                   S   ry   )Nr    z\99r{   r   r   r   r   rH      r|   c                   S   ry   )Nr    \118r{   r   r   r   r   rH      r|   c                   S   ry   )Nr    \11ar{   r   r   r   r   rH      r|   c                   S   ry   )Nr    z\181r{   r   r   r   r   rH      r|   c                   S   ry   )Nr    z\800r{   r   r   r   r   rH      r|   z(((((((((((x)))))))))))r}   z((((((((((y))))))))))(.)r~   xyzZxz8r   Zxza)r%   r'   r[   rj   errorINVALID_GROUP_REFr:   r   r   r    test_sub_template_numeric_escape   sN   z+RegexTests.test_sub_template_numeric_escapec                 C   s2   |  tdddd |  tddddd d S )NrN   baaaaaZbbbbbr2   Zbaaaar_   r:   r   r   r   test_qualified_re_sub   s   z RegexTests.test_qualified_re_subc                 C   r^   )Nz(\S)\s+(\S)z\1 \2zhello  therezhello therer_   r:   r   r   r   test_bug_114660   s   zRegexTests.test_bug_114660c                 C   sh   t jdkr| tdddd n| tdddd | tdddd | tdddd	 d S )
Nr3   rU   r   z(?V0)x*-Zabxdz-a-b--d-z-a-b-d-z(?V1)x*r0   zab-dsysversion_infor%   r'   r[   r:   r   r   r   test_bug_462270   s
   
zRegexTests.test_bug_462270c                 C   s*   d}|  td| d d|d d S )N   ÿz(?P<z>a)abcrN   )r%   r'   r7   group)r
   
group_namer   r   r   test_bug_14462   s   zRegexTests.test_bug_14462c                 C   s   |  tj| jdd  |  tj| jdd  |  tj| jdd  |  tj| jdd  |  tj| jdd  |  t| jdd  | 	t
dd	d
d | 	t
ddd
d |  tj| jdd  d S )Nc                   S      t dddS )NrK   z\g<arL   r{   r   r   r   r   rH      r|   z/RegexTests.test_symbolic_refs.<locals>.<lambda>c                   S   r   )NrK   z\g<rL   r{   r   r   r   r   rH      r|   c                   S   r   )NrK   \grL   r{   r   r   r   r   rH      r|   c                   S   r   )NrK   z\g<a a>rL   r{   r   r   r   r   rH      r|   c                   S   r   )NrK   z\g<1a1>rL   r{   r   r   r   r   rH      r|   c                   S   r   )NrK   z\g<ab>rL   r{   r   r   r   r   rH      r|   z(?P<a>x)|(?P<b>y)z\g<b>rL    z\2c                   S   r   )NrK   z\g<-1>rL   r{   r   r   r   r   rH      r|   )rj   r'   r   
MISSING_GTMISSING_GROUP_NAME
MISSING_LTBAD_GROUP_NAME
IndexErrorUNKNOWN_GROUP_Ir%   r[   r:   r   r   r   test_symbolic_refs   s   zRegexTests.test_symbolic_refsc                 C   st   |  tdddd |  tdddd |  tdddd |  td	ddd
 |  td	dddd d S )Nr?   r    r@   )rA      zb+)zx BBBBr2   r   )r   r   zb*)Zxxxyxzx   r   )Zxxxyzr   )r%   r'   subnr:   r   r   r   test_re_subn   s
   zRegexTests.test_re_subnc                 C   s`  |  tddg d tjdkrB|  tddg d |  tddg d |  td	dg d |  td
dg d n0|  tddg d |  tddg d |  td	dg d |  td
dg d |  tddg d |  tddg d |  tddg d |  tddg d |  dd tddD g d |  tddg d |  dd tddD g d |  tddg d |  dd tddD g d |  tddg d  |  d!d tddD g d  |  td"d#g d$ |  td%d#g d& |  td'd#g d( d S ))N::a:b::cr   rN   r   r   cr   :*r   r   rN   r   r   r   r   r   (:*)r   r   r   r   rN   r   r   r   r   ::r   r   r   r   r   z(?::*)z(:)*)r   r   r   NrN   r   r   Nr   r   r   Nr   Nr   r   rN   r   r   r   r   rN   r   r   r   r   )r   r   rN   r   r   r   r   z([b:]+))r   r   rN   z:b::r   z(b)|(:+))r   Nr   rN   Nr   r   r   Nr   Nr   r   z(?:b)|(?::+))r   rN   r   r   r   r    xaxbxcc                 S      g | ]}|qS r   r   .0rG   r   r   r   
<listcomp>  rh   z,RegexTests.test_re_split.<locals>.<listcomp>z(?r)x)r   r   rN   r   c                 S   r   r   r   r   r   r   r   r     rh   z(x)|(y))
r   r    NrN   r    Nr   r    Nr   c                 S   r   r   r   r   r   r   r   r   $  rh   z(?r)(x)|(y))
r   r    Nr   r    NrN   r    Nr   c                 S   r   r   r   r   r   r   r   r   )  rh   (?V1)\bza b c)r   rN    r   r   r   r   z(?V1)\m)r   a zb r   z(?V1)\M)rN    bz cr   )r%   r'   splitr   r   	splititerr:   r   r   r   test_re_split   s8   
""zRegexTests.test_re_splitc                 C   s   |  tdddg d |  tdddg d |  tdddg d tjd	kr;|  td
ddg d d S |  td
ddg d d S )Nr   r   r   )r   rN   b::cza:b:c:d)rN   r   zc:dz(:))r   r   rN   r   r   r   r   )r   r   r   r   za:b::c)r%   r'   r   r   r   r:   r   r   r   test_qualified_re_split3  s   
z"RegexTests.test_qualified_re_splitc                 C   s  |  tddg  |  tddg d |  tddg d |  tddg d |  tdd	d
g |  tdd	d
g |  tdddg |  tdddg |  tdddg |  tdddg |  tdddg |  tdddg d S )N:+r   
a:b::c:::dr   r   z:::(:+)(:)(:*))r   r   )r   r   )r   r   z\((?P<test>.{0,5}?TEST)\)z	(MY TEST)zMY TESTz\((?P<test>.{0,3}?TEST)\)z\((?P<test>.{0,3}?T)\)z(MY T)zMY Tz[^a]{2}[A-Z]z
  Sz  Sz[^a]{2,3}[A-Z]z
   Sz   SzX(Y[^Y]+?){1,2}( |Q)+DEFzXYABCYPPQ
Q DEF)zYPPQ
r   z(\nTest(\n+.+?){0,2}?)?\n+Endz
Test
xyz
xyz
End)z
Test
xyz
xyzz
xyzr%   r'   r)   r:   r   r   r   test_re_findall@  s<   



zRegexTests.test_re_findallc                 C   s   |  tddg d d S )Nz(a|(b))aba)rN   r   )r   r   r   r   r:   r   r   r   test_bug_117612Y     zRegexTests.test_bug_117612c                 C   s  |  tddd d  d |  tddd d  d |  tddd d |  tddd d |  tddddd td}|  |dd d  d |  |d	d d  d
 |  |dd d  d |  |dd d  d |  |dd d  d tdd}|  | d |  |dd |  |dd |  |ddd td}|  |ddddd |  |d	dddd |  |ddddd d S )NrN   rN   (a)rN   rN   r   r2   z((a)|(b))(c)?)rN   rN   rN   NNr   )r   r   Nr   Nac)r   rN   rN   Nr   bc)r   r   Nr   r   z!(?:(?P<a1>a)|(?P<b2>b))(?P<c3>c)?r   r3   )rN   NNZa1b2c3)Nr   NrN   Nr   )r%   r'   r9   r   r(   )r
   patrG   r   r   r   test_re_match]  s(   

 zRegexTests.test_re_matchc                 C   s6  |  tddd d  d |  tddd d  d |  tddd  |  tddd  |  tdd	d d  d
 |  tddd d  d |  tddd d  d |  tddd d  d td}|  |dd d  d |  |dd d  d |  |dd  |  |dd  d S )Nz^(\()?([^()]+)(?(1)\))$r   )r   (rN   rN   rN   NrN   za)z(az^(?:(a)|c)((?(1)b|d))$ab)r   rN   r   cd)r   Ndz^(?:(a)|c)((?(1)|d))$)rN   rN   r   z(?P<g1>a)(?P<g2>b)?((?(g2)c|d))r   )r   rN   r   r   ad)r   rN   Nr   abdr   )r%   r'   r9   r(   r
   pr   r   r   test_re_groupref_existsx  s   
z"RegexTests.test_re_groupref_existsc                 C   s   |  tddd d  d |  tddd d  d |  tddd  |  tddd  |  td	d
d d  d |  tddd d  d |  tdddg d S )Nz^(\|)?([^()]+)\1$|a|)r   |rN   z^(\|)?([^()]+)\1?$rN   r   za|z|az^(?:(a)|c)(\1)$aa)r   rN   rN   z^(?:(a)|c)(\1)?$r   )r   NNzE(?i)(.{1,40}?),(.{1,40}?)(?:;)+(.{1,80}).{1,40}?\3(\ |;)+(.{1,80}?)\1z&TEST, BEST; LEST ; Lest 123 Test, Best)TESTz BESTz LESTr   z123 )r%   r'   r9   r)   r:   r   r   r   test_re_groupref  s   
zRegexTests.test_re_grouprefc                 C   s"   |  tdd ddd d S )N#(?P<first>first) (?P<second>second)first secondfirstsecondr   r   )r%   r'   r9   	groupdictr:   r   r   r   test_groupdict  s
   
zRegexTests.test_groupdictc                 C   s   |  tdddd d S )Nr   r   z\2 \1 \g<second> \g<first>zsecond first second first)r%   r'   r9   expandr:   r   r   r   test_expand  s   
zRegexTests.test_expandc                 C   s  |  tddd  |  tddd  |  tddd  |  tddd  |  tddd d |  td	dd d |  td
dd d |  tddd d |  tddd d |  tddd d |  tddd d |  tddd d |  tddd  |  tddd  |  tddd  |  tddd  |  tddd d |  tddd d |  tddd d |  tddd d |  ttddd |  ttddd |  ttddd |  ttddd |  ttd dd |  ttd!dd |  ttd"dd |  ttddd |  td#dd  |  ttd#d$d d S )%Nz	^(\w){1}$r   z
^(\w){1}?$z^(\w){1,2}$z^(\w){1,2}?$z	^(\w){3}$r2   r   z^(\w){1,3}$z^(\w){1,4}$z^(\w){3,4}?$z
^(\w){3}?$z^(\w){1,3}?$z^(\w){1,4}?$z^x{1}$r.   z^x{1}?$z^x{1,2}$z	^x{1,2}?$z^x{1}r   r    z^x{1}?z^x{0,1}z^x{0,1}?r   z^x{3}$Tz^x{1,3}$z^x{1,4}$z	^x{3,4}?$z^x{3}?$z	^x{1,3}?$z	^x{1,4}?$z^x{}$zx{})r%   r'   r9   boolr:   r   r   r   test_repeat_minmax  s<   zRegexTests.test_repeat_minmaxc                 C   s  |  tdjd |  tdjtjtjB tjB  |  tdjtjtjB tjB  |  tdj	d |  tdj
i  |  tdj
ddd |  tddjd	 |  tddjd |  td
djd	 |  td
djd |  td
d d |  td
ddd |  tddjd |  tddjd |  tttddj| j td}d	|j
d< |  |j
d d d S )Nz
(?i)(a)(b)s
   (?i)(a)(b)r   z(?i)(?P<first>a)(?P<other>b)r2   )r   otherr   rN   r   zb(c)abcdef   r1   r   r3   r   r2   r   zabc(?P<n>def)n)r%   r'   r(   rg   flagsre   UDEFAULT_VERSIONrX   groups
groupindexr9   posendposr7   r8   stringregsrn   r   rero   r   r   r   r   test_getattr  s4   

zRegexTests.test_getattrc                 C   s  |  tddd d |  tddd d |  tddtjd d	 |  td
dtjd d	 |  tddtjd d |  tddtjd d |  tddtjd d |  tddtjd d |  tddtjd  |  tddd d	 |  td
dd d	 |  tddtjd d |  tddtjd d |  tddtjd  |  tddd d |  tddtjd d |  tddtjd d d S )Nz\b(b.)\bzabcd abc bcd bxr2   bxz\B(b.)\Bzabc bcd bc abxds   \b(b.)\bs   abcd abc bcd bxs   bxs   \B(b.)\Bs   abc bcd bc abxd^abc$z
abc
r   r   z	^\Aabc\Z$s   ^abc$s   
abc
   abcs	   ^\Aabc\Z$z\d\D\w\W\s\Sz1aa! as   \d\D\w\W\s\Ss   1aa! a)r%   r'   r7   LOCALEUNICODEMr:   r   r   r   test_special_escapes  s~   zRegexTests.test_special_escapesc              	   C   s   |  tddd d |  tddtjd d |  dtjddtjdd |  dtjddtjdd |  dtjd	dtjdd d S )
Nz([\u2222\u2223])u   ∢r2   r   rC   u   eèéêëēěėr   z%[e\xe8\xe9\xea\xeb\u0113\u011b\u0117]z*e|\xe8|\xe9|\xea|\xeb|\u0113|\u011b|\u0117)r%   r'   r9   r   joinr)   r:   r   r   r   test_bigcharset  s2   zRegexTests.test_bigcharsetc                 C   s<   |  tddtjd d |  tddtjd d d S )Na.ba
br   a.*bza

b)r%   r'   r9   DOTALLr:   r   r   r   test_anyall  s   zRegexTests.test_anyallc                 C   s  |  tddd d |  tddd d |  tddd d |  tddd d |  td	d
d d |  tddd d |  tdd
d d |  tdd
d d |  tddd d |  tddd d |  tddd d d S )Nz(a(?=\s[^a]))a br2   rN   z(a(?=\s[^a]*))z(a(?=\s[abc]))z(a(?=\s[abc]*))za bcz(a)(?=\s\1)a az(a)(?=\s\1*)a aaz(a)(?=\s(abc|a))z(a(?!\s[^a]))z(a(?!\s[abc]))za dz(a)(?!\s\1)z(a)(?!\s(abc|a))r%   r'   r9   r:   r   r   r   test_non_consuming   s   zRegexTests.test_non_consumingc                 C   s  |  tddtjd d |  tddtjd d |  tddtjd d |  td	d
tjd d
 |  tddtjd d |  tddtjd d |  tddtjd d |  tddtjd d |  tddtjd d |  tdd d |  tdd d |  ttddd |  ttddd |  ttddd |  ttddd d S )Nr   ABCr   r   s   ABCz
(a\s[^a]*)za bbr2   z
(a\s[abc])r  z(a\s[abc]*)z	((a)\s\2)r  z
((a)\s\2*)r  z((a)\s(abc|a))z((a)\s(abc|a)*)z[Z-a]_r   z	(?i)[Z-a]z(?i)naoZnAoTz
(?i)n\xE3ou   nÃou   NÃOz(?i)su   ſ)r%   r'   r9   re   r8   r   r:   r   r   r   test_ignore_case.  s2   zRegexTests.test_ignore_casec                 C   s  |  tdd d |  tdd d |  tdd d |  tdd d |  td	d
 d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  td	d d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d d}|D ]}|D ]}td| |s|   qq|  ttdd d! |  ttdd"d! |  ttd#d d! |  ttd#d"d! |  ttd$d d! |  ttd%d d! |  ttdd d! |  ttd#d d! |  ttd$d d! |  ttd%d d! |  ttd&dd! |  ttd&dd! |  td'd(d)d*g |  td+d(d)d*g |  td,d- d. |  td/d- d. |  td0d- d. |  tjd1d2dgd3 d4 |  tjd1d5d6gd3 d7 d S )8Nz(?fi)ssZSSr   r   z(?fi)SSss   ßr   z#(?fi)\N{LATIN SMALL LETTER SHARP S}z (?fi)\N{LATIN SMALL LIGATURE ST}ZSTz(?fi)STu   ﬆu   ﬅz(?fi)SSTu   ßtu   sﬅu   sﬆZSSTr1   z(?fi)FFIu   ﬃu   ﬀiu   fﬁz!(?fi)\N{LATIN SMALL LIGATURE FFI}ZFFIr5   z!(?fi)\N{LATIN SMALL LIGATURE FF}iz!(?fi)f\N{LATIN SMALL LIGATURE FI}u   Σσςz(?fi)z(?iV1)ffu   ﬀﬁTu   ﬁﬀz(?iV1)fiz
(?iV1)fffiz(?iV1)f\uFB03z(?iV1)f\uFB01z/(?iV0)\m(?:word){e<=3}\M(?<!\m(?:word){e<=1}\M)z.word word2 word word3 word word234 word23 wordZword234Zword23z/(?iV1)\m(?:word){e<=3}\M(?<!\m(?:word){e<=1}\M)z$(?fi)a\N{LATIN SMALL LIGATURE FFI}nez
  affine  )r      z*(?fi)a(?:\N{LATIN SMALL LIGATURE FFI}|x)nez+(?fi)a(?:\N{LATIN SMALL LIGATURE FFI}|xy)nez(?fi)a\L<options>neZaffineoptionsr   r   u   aﬃneffir   r   )r%   r'   r7   r8   r9   r*   r   r)   )r
   sigmach1ch2r   r   r   test_case_foldingH  sP  





















zRegexTests.test_case_foldingc                 C   s   |  tddd d d S )Nz(\s)r   r2   r  r:   r   r   r   test_category  r   zRegexTests.test_categoryc                 C   s4   |  tddd d |  tddd d d S )Nz\s([^a])r   r2   r   z	\s([^a]*)z bbZbbr%   r'   r7   r:   r   r   r   test_not_literal     zRegexTests.test_not_literalc                 C   s4   |  tddd d |  tddd d d S )Nz\s(b)r   r2   r   za\sr   r   r!  r:   r   r   r   test_search_coverage  r#  zRegexTests.test_search_coveragec              
   C   s   d}|  t|| tddD ].}|t|7 }|  tttt|t|d |  ttt|t| d qtt|}|  || d d S )Nr   r      Tr   r   r%  )	r%   r'   escaperanger\   r   r9   r8   r(   )r
   r   ir   r   r   r   test_re_escape  s     zRegexTests.test_re_escapec              	   C   s   d}|  t|| tddD ])}t|g}||7 }|  ttt||d |  tt|| d qtt|}|  || d d S )N    r   r%  Tr   r&  )	r%   r'   r'  r(  bytesr   r9   r8   r(   )r
   r   r)  r   r   r   r   r   test_re_escape_byte  s   
 zRegexTests.test_re_escape_bytec                 C   sl   t jt jkr
|   t jt jkr|   t jt jkr|   t jt j	kr(|   t j
t jkr4|   d S d S r   )r'   re   
IGNORECASEr*   Lr   r  	MULTILINESr	  rV   VERBOSEr:   r   r   r   test_constants  s   zRegexTests.test_constantsc              	   C   s@   t jt jt jt jt jfD ]}| ttt 	d|| j
 qd S )Nz	^pattern$)r'   re   r  rV   r1  r/  r%   rn   r   r(   ro   )r
   flagr   r   r   
test_flags  s
   zRegexTests.test_flagsc              	   C   s   dD ]j}|  ttd| t|d |  ttd| t|d d |  ttd| t|d d |  ttd| t|d |  ttd	| t|d d |  ttd
| t|d d q| tj| jdd  d S )Nr   r         @            z\%03oTz\%03o00z\%03o88z\x%02xz\x%02x0z\x%02xzzc                   S      t ddS )Nz\911r   r'   r9   r   r   r   r   rH        z8RegexTests.test_sre_character_literals.<locals>.<lambda>)r%   r   r'   r9   r\   rj   r   r   r
   r)  r   r   r   test_sre_character_literals  s      z&RegexTests.test_sre_character_literalsc              	   C   s   dD ]b}|  ttd| t|d |  ttd| t|d |  ttd| t|d |  ttd| t|d |  ttd| t|d |  ttd| t|d q| tj| jd	d
  d S )Nr6  z[\%03o]Tz[\%03o0]z[\%03o8]z[\x%02x]z	[\x%02x0]z	[\x%02xz]c                   S   r@  )Nz[\911]r   rA  r   r   r   r   rH     rB  z>RegexTests.test_sre_character_class_literals.<locals>.<lambda>)r%   r   r'   r9   r\   rj   r   BAD_OCTAL_ESCAPErC  r   r   r   !test_sre_character_class_literals  s        "z,RegexTests.test_sre_character_class_literalsc                 C   sR   |  tdddd |  tdddd |  tdddd d S )Nz(a)|(b)r   r2   rG  rG  )r%   r'   r9   startendr8   r:   r   r   r   test_bug_113254  s   zRegexTests.test_bug_113254c                 C   sr   |  tddjd  |  tddjd |  tddjd |  tddjd |  tddjd d S )	Nz(a)?arN   z(a)(b)?br   r2   z(?P<a>a)(?P<b>b)?bz(?P<a>a(b))((a)))r%   r'   r9   	lastindex	lastgroupr:   r   r   r   test_bug_527371  s   zRegexTests.test_bug_527371c                 C   s   |  tj| jdd  d S )Nc                   S   
   t dS )Nzfoo[a-r'   r(   r   r   r   r   rH        
z,RegexTests.test_bug_545855.<locals>.<lambda>)rj   r'   r   BAD_SETr:   r   r   r   test_bug_545855  s   zRegexTests.test_bug_545855c                 C   s   |  tddd d dd |  tddd d	 dd  d
 dd |  tddd d dd |  tddd d dd d S )Nz.*?ci'  r   r   r   i!N  z.*?cdi  r   cdei#N  i N  r   deia  z(a|b)*?c)r%   r'   r9   rJ  r7   r:   r   r   r   test_bug_418626  s   zRegexTests.test_bug_418626c                 C   s,   dt d d }| t |odd d S )N[u   ‹]r2   )r'   r'  r%   r(   r
   r   r   r   r   test_bug_612074  s   zRegexTests.test_bug_612074c                 C   s`   |  tddd d d |  tddd d d d |  tddd d d d d S )Nz(x)*iP  r    r2   z(x)*yr!   z(x)*?yr  r:   r   r   r   test_stack_overflow  s    $zRegexTests.test_stack_overflowc                 C   s   dd }dd }dd }dd }t d	|fd
|fd|fd|fdg}| tt|jdj| j | |dg ddf d S )Nc                 S   s   |S r   r   scannertokenr   r   r   s_ident   rI   z(RegexTests.test_scanner.<locals>.s_identc                 S   s   d| S )Nzop%sr   r]  r   r   r   
s_operator!      z+RegexTests.test_scanner.<locals>.s_operatorc                 S      t |S r   )floatr]  r   r   r   s_float"  rb  z(RegexTests.test_scanner.<locals>.s_floatc                 S   rc  r   )r<   r]  r   r   r   s_int#  rb  z&RegexTests.test_scanner.<locals>.s_intz[a-zA-Z_]\w*z\d+\.\d*rB   z=|\+|-|\*|/)z\s+Nr   zsum = 3*foo + 312.50 + bar)	sumzop=r3   zop*fooop+g     s@ri  bar)	r'   Scannerr%   rn   r   r^  rg   ro   scan)r
   r`  ra  re  rf  r^  r   r   r   test_scanner  s   
zRegexTests.test_scannerc                 C   sN   dD ]"}|  td| dd d  d |  td| dd d  d qd S )N)r   ?*z
((.%s):)?zr?  )r?  NNa:z)rp  za:rN   r  )r
   opr   r   r   test_bug_448951/  s    "zRegexTests.test_bug_448951c                 C   s   |  tddd d  d |  tddd d  d |  tddd d  d |  tddd d  d |  td	dd d  d
 |  tddd d  d |  tddd d  d |  tddd d  d d S )Nz	^((a)|b)*r   )r   r   rN   z^(([ab])|c)*)r   r   r   z^((d)|[ab])*)r   r   Nz^((a)c|[ab])*z^((a)|b)*?c)r   r   rN   z^(([ab])|c)*?dabcd)rs  r   r   z^((d)|[ab])*?c)r   r   Nz^((a)c|[ab])*?cr  r:   r   r   r   test_bug_7251068  s    zRegexTests.test_bug_725106c                 C   s<   |  tddd d  d |  tddd d  d d S )Nz(a)(?:(?=(b)*)c)*ZabbrN   rN   Nz(a)((?!(b)*))*)rN   rN   NNr  r:   r   r   r   test_bug_725149J  s    zRegexTests.test_bug_725149c                 C   s4   G dd dt }t|d}| |dd  d S )Nc                   @   s   e Zd ZdS )z.RegexTests.test_bug_764548.<locals>.my_unicodeN)r   r   r   r   r   r   r   
my_unicodeS  s    rw  r   r   )r=   r'   r(   r%   r9   )r
   rw  r   r   r   r   test_bug_764548Q  s   zRegexTests.test_bug_764548c                 C   s*   t dd}| dd |D g d d S )Nr   r   c                 S      g | ]}|d  qS r   r   )r   itemr   r   r   r   Y      z,RegexTests.test_finditer.<locals>.<listcomp>r   )r'   finditerr%   )r
   itr   r   r   test_finditerW  s   zRegexTests.test_finditerc                 C   s$   t dt du r|   d S d S )NZ
bug_926075s
   bug_926075)r'   r(   r*   r:   r   r   r   test_bug_926075[  s   zRegexTests.test_bug_926075c                 C   s$   d}|  t|dg d d S )Nu   [.。．｡]za.b.crN   r   r   )r%   r'   r(   r   r
   rg   r   r   r   test_bug_931848_  s    zRegexTests.test_bug_931848c                    sl   t dd | t  d | t fdd t dd}| |	  d | |	 d  d S )N\sr  r2   r   c                         t  S r   nextr   r~  r   r   rH   g  rb  z,RegexTests.test_bug_581080.<locals>.<lambda>)
r'   r}  r%   r  r8   assertRaisesStopIterationr(   r^  r7   )r
   r^  r   r  r   test_bug_581080d  s   zRegexTests.test_bug_581080c                    sL   t dd | t  d | t  d | t fdd d S )Nz.*Zasdfr  r   r   c                      r  r   r  r   r  r   r   rH   q  rb  z,RegexTests.test_bug_817234.<locals>.<lambda>)r'   r}  r%   r  r8   r  r  r:   r   r  r   test_bug_817234m  s   zRegexTests.test_bug_817234c                 C   sX   dd l }dD ]#}| |}| td|d  | td|dd  d qd S )Nr   ZbBuhHiIlLfds   blar+  r2   r   )arrayr%   r'   r(   r9   )r
   r  typecoderN   r   r   r   test_empty_arrays  s   
"zRegexTests.test_empty_arrayc                 C   s,  t d}t d}t|tjtjB }| t||d t|tjtjB }| t||d td| tj}| t||d td| tj}| t||d td| }| t||d td| }| t||d | ttddd | tddd  d S )	Ni  i  Tz(?i)z(?iu)(?i)arX   za(?i))r\   r'   r(   re   r   r%   r   r9   )r
   Z
upper_charZ
lower_charr   r   r   r   test_inline_flags{  s    zRegexTests.test_inline_flagsc                 C   s   t d}| |ddd | |ddd | |ddd t dt j}| |ddd	 | |ddd
 | |ddd d S )N$#za
b
za
b#
#za
b
cza
b
c#rJ   z#
#za#
b#
#za#
b#
c#)r'   r(   r%   r[   r0  r  r   r   r   test_dollar_matches_twice  s   
z$RegexTests.test_dollar_matches_twicec                    sP  t dt d | t| jfdd | t| j fdd | t| jfdd | t| jfdd | t| jfdd | t| j fd	d | t| j fd
d | t| j fdd | t| j	dd  | t| j	dd  | t| j
dd  | t| j
dd  | t| j
dd  | t| j
dd  d S )NrC      .c                      
     dS )N   br9   r   r   r   r   rH     rR  z2RegexTests.test_bytes_str_mixing.<locals>.<lambda>c                      r  )Nr   r  r   bpatr   r   rH     rR  c                           ddS Nr  r   r[   r   r  r   r   rH     rB  c                      r  Nr      cr  r   r  r   r   rH     rB  c                      r  )Nr  r  r  r   r  r   r   rH     rB  c                      r  r  r  r   r  r   r   rH     rB  c                      r  r  r  r   r  r   r   rH     rB  c                      r  Nr   r   r  r   r  r   r   rH     rB  c                   S      t dt jS )N   \wr'   r(   r   r   r   r   r   rH     r|   c                   S   rP  )Ns   (?u)\wrQ  r   r   r   r   rH     rR  c                   S   s   t dt jt jB S )N\w)r'   r(   r   ASCIIr   r   r   r   rH     s   c                   S   r  )Nz(?u)\w)r'   r(   r  r   r   r   r   rH     r|   c                   S   r  )N(?a)\wr  r   r   r   r   rH     r|   c                   S   rP  Nz(?au)\wrQ  r   r   r   r   rH     rR  )r'   r(   rj   	TypeErrorSTR_PAT_ON_BYTESBYTES_PAT_ON_STRSTR_PAT_BYTES_TEMPLBYTES_PAT_STR_TEMPLrk   BYTES_PAT_UNI_FLAGMIXED_FLAGSr:   r   )r  r   r   test_bytes_str_mixing  s    

z RegexTests.test_bytes_str_mixingc                 C   sD  dt jfD ]'}t d|t jB }| t|dd t d|}| t|dd qt dt jt jB }| |dd  t dt j}| |dd  t dt j}| |dd  t d}| |dd  dt jfD ]"}t d|t jB }| |d	d  t d
}| |d	d  qs| t	| j
dd  d S )Nr      À   àTr  u   (?a)Àr        r  c                   S   rP  r  rQ  r   r   r   r   rH     rR  z8RegexTests.test_ascii_and_unicode_flag.<locals>.<lambda>)r'   r   r(   r.  r%   r   r9   r  rj   rk   r  )r
   r   r   r   r   r   test_ascii_and_unicode_flag  s&   

z&RegexTests.test_ascii_and_unicode_flagc                 C   s   t dd}|s| d n|r"|d |dks"|d |dkr'| d |s0| d d S |d d  dkrH| dt|d d   d S d S )	N(?<a>\w)xyz(Failed: expected match but returned Noner   r2   Failed)r    r    z0Failed: expected "('x', 'x')" but got {} instead)r'   r9   r*   r   formatasciir
   rG   r   r   r   test_subscripting_match  s   (
 z"RegexTests.test_subscripting_matchc                 C   sJ   t dd}t dd}|r|r|d d  |d d  ks#| d d S d S )Nz	(?P<a>\w)r    r  r  )r'   r9   r*   )r
   Zm0m1r   r   r   test_new_named_groups  s
    z RegexTests.test_new_named_groupsc           	      C   s  |  tddd  |  tddd  |  tddd  |  ttddd |  ttdd	d |  ttd
dd |  ttddd |  tddd  |  td
dd  |  tddd  |  tdd	d  |  tddd  |  tddd  |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttd dd |  ttd!dd |  ttd"dd |  ttd#dd |  ttd$dd |  ttd%dd |  ttd&dd |  ttd'dd |  ttd(dd |  ttd)dd |  ttd*dd |  ttd+dd |  ttd,dd |  ttd-dd |  ttd.d/d |  ttd0d1d |  ttddd |  td.d2d  |  td0d2d  |  tdd2d  |  td3d/d  |  td4d1d  |  td5dd  |  ttd3d2d |  ttd4d2d |  ttd5d2d |  ttd6dd |  ttd6d7d |  ttd8dd |  ttd9d7d |  ttd:d7d |  ttd:dd |  ttdd/d |  ttdd7d |  ttdd;d |  td<d d= |  td<d> d? |  td<d@g dA |  tdBd@dCdDg |  td<dEg dF |  ttd9d7d dG}dH}tdI }g d|dJfdK|dJfd5|dLfdM|dLfd.|dNfdO|dNfd3|dPfdQ|dPfdR|dSfdT|dUfdV|dWfdX|dYfdZ|d[fd\|d]fd^d_d`dad|dbfdc|dbfd|ddfde|ddfd|dffdg|dffd|dhfdi|dhfdj|dkfdl|dmfdn|dofdp|dqfdr|dsfdt|dufd|dbfdv|dbfdw|ddfdx|ddfdy|dffdz|dffd{|dhfd||dhfd}|dkfd~|dmfd|dofd|dqfd|dsfd|duf}|D ]?\}}}z|d d t|||kr$| 	d
| W q tyE } z| 	d
|t| W Y d }~qd }~ww |  ttdd/d |  ttddd |  ttddd d S )Ns   (?ai)r  s	   (?ai)\xC0s   (?a)\wr  r  Ts   (?L)\d   0s   (?L)\s    s   (?L)\w   a   ?s   (?L)\Ds   (?L)\Ss   (?L)\Wz\p{Cyrillic}u   Аz(?i)\p{Cyrillic}z\p{IsCyrillic}z\p{Script=Cyrillic}z\p{InCyrillic}z\p{Block=Cyrillic}z[[:Cyrillic:]]z[[:IsCyrillic:]]z[[:Script=Cyrillic:]]z[[:InCyrillic:]]z[[:Block=Cyrillic:]]z\P{Cyrillic}rX   z\P{IsCyrillic}z\P{Script=Cyrillic}z\P{InCyrillic}z\P{Block=Cyrillic}z\p{^Cyrillic}z\p{^IsCyrillic}z\p{^Script=Cyrillic}z\p{^InCyrillic}z\p{^Block=Cyrillic}z[[:^Cyrillic:]]z[[:^IsCyrillic:]]z[[:^Script=Cyrillic:]]z[[:^InCyrillic:]]z[[:^Block=Cyrillic:]]z\dr=  r  r   rn  z\Dz\Sz\Wz\p{L}rN   z\p{Lu}\p{Ll}r  r  \Xr      àr     aààeéérN   r  r  e   éu   é\X{3}   aàà   eéé   
́Ára   u   ́u   Áu   -09AZaz_Γγs   -09AZaz_z#Ll Lm Lo Lt Lu Mc Me Mn Nd Nl No Pcu   09AZaz_Γγz
[[:word:]]r   z[[:^word:]]Z09z[[:digit:]]u
   -AZaz_Γγz[[:^digit:]]z[[:alpha:]]u   AZazΓγz[[:^alpha:]]z-09_z[[:alnum:]]u
   09AZazΓγz[[:^alnum:]]z-_z[[:xdigit:]]Z09Aaz[[:^xdigit:]]u   -Zz_Γγ)z\p{InBasicLatin}   aárN   )z\P{InBasicLatin}r     á)z(?i)\p{InBasicLatin}r  rN   )z(?i)\P{InBasicLatin}r  r  s   09AZaz_s   (?L)[[:word:]]   -s   (?L)[[:^word:]]s   09s   (?L)[[:digit:]]s   -AZaz_s   (?L)[[:^digit:]]s   (?L)[[:alpha:]]s   AZazs   (?L)[[:^alpha:]]s   -09_s   (?L)[[:alnum:]]s   09AZazs   (?L)[[:^alnum:]]s   -_s   (?L)[[:xdigit:]]s   09Aas   (?L)[[:^xdigit:]]s   -Zz_s   (?a)[[:word:]]s   (?a)\Ws   (?a)[[:^word:]]s   (?a)\ds   (?a)[[:digit:]]s   (?a)\Ds   (?a)[[:^digit:]]s   (?a)[[:alpha:]]s   (?a)[[:^alpha:]]s   (?a)[[:alnum:]]s   (?a)[[:^alnum:]]s   (?a)[[:xdigit:]]s   (?a)[[:^xdigit:]]r   z
Failed: {}zFailed: {} raised {}z\p{NumericValue=0}z\p{NumericValue=1/2}   ½z\p{NumericValue=0.5})r%   r'   r9   r   r8   r)   setr   r  r*   r  	Exceptionr  )	r
   Zchars_uZchars_bZword_settestsrg   charsexpectedr  r   r   r   test_properties  sZ  

	
 !#$%&'()*+,-./02 $zRegexTests.test_propertiesc                 C   sb   |  tdddg |  tddddg |  tddg d |  td	dg d
 d S )N\w+u    हिन्दी,   हिन्दीz\W+r   ,r   )r   r  r  z(?V1)\B)r   u    हu   िu   नu   ्u   दu   ी,r   )r%   r'   r)   r   r:   r   r   r   test_word_class  s(   



zRegexTests.test_word_classc                 C   s   |  tddddg d S )N\G\w{2}abcd efr   r   r   r:   r   r   r   test_search_anchor  r   zRegexTests.test_search_anchorc              	   C   s  |  tddg d |  tjddddg d |  tdddd	g |  tjddddg d
 |  tjddddddg |  dd tddD g d |  dd tjddddD g d
 |  dd tddD g d |  dd tjddddD g d
 |  tddg d |  tddg d |  tddg d |  tddg d |  dd tddD g d |  dd tddD g d |  dd tddD g d |  dd tddD g d |  tdd d!d"g |  td#d$d!d"g |  td%d g  |  td&d d'g |  td(d)g d* |  td+d)g d* |  td,d)g d- |  td.d)g d- |  tjd/d$d0d1d2d3d4g |  tjd/d$d0d5d2d3d4g |  d6d tjd/d$d0d1d2D d3d4g |  d7d tjd/d$d0d5d2D d3d4g |  d8d tjdd$d0d1d2D d4d3g |  d9d tjdd$d0d5d2D d4d3g |  tjdd$d0d1d2d4d3g |  tjdd$d0d5d2d4d3g |  td:d;tjd<d=g |  td>d;tjd=d<g |  td?dd	g |  tjd?dddd	d!g |  td@dAdBdCg |  tdDdAdEdFg |  dGd td?dD d	g |  dHd tjd?dddD d	d!g |  dId td@dAD dJdKg |  dLd tdDdAD dMdNg |  tdOdO dP |  tdQdO dP |  tdRdS dP |  tdTdS dP |  tdUdVdd |  tdWdVdd d S )XNz(?r).r   )r   r   rN   TZ
overlapped(?r)..abcderV  r   rV  r   r   r   (?r)(.)(-)(.)a-b-cr   r   r   rN   r   r   c                 S   ry  rz  r   r   r   r   r   r     r|  z2RegexTests.test_search_reverse.<locals>.<listcomp>c                 S   ry  rz  r   r   r   r   r   r     r|  c                 S   ry  rz  r   r   r   r   r   r     r|  c                 S   ry  rz  r   r   r   r   r   r     r|  ^|\w+foo barr   rh  rj  
(?V1)^|\w+	(?r)^|\w+rj  rh  r   (?rV1)^|\w+c                 S   ry  rz  r   r   r   r   r   r     r|  c                 S   ry  rz  r   r   r   r   r   r     r|  c                 S   ry  rz  r   r   r   r   r   r     r|  c                 S   ry  rz  r   r   r   r   r   r     r|  r  r  r   r   z.{2}(?<=\G.*)rs  z(?r)\G\w{2}z(?r)\w{2}\Gefzq*Zqqwe)qqr   r   r   z(?V1)q*z(?r)q*)r   r   r  r   z(?rV1)q*rC   r2   r3   r   r   r   r   rG  c                 S   ry  rz  r   r   r   r   r   r     r|  c                 S   ry  rz  r   r   r   r   r   r     r|  c                 S   ry  rz  r   r   r   r   r   r     r|  c                 S   ry  rz  r   r   r   r   r   r     r|  z[ab]ZaBrN   Bz(?r)[ab]z(?r).{2}(\w+) (\w+)zfirst second third fourth fifthr   )thirdfourthz(?r)(\w+) (\w+))r  Zfifth)r   r  c                 S   ry  rz  r   r   r   r   r   r     r|  c                 S   ry  rz  r   r   r   r   r   r   	  r|  c                 S   ry  rz  r   r   r   r   r   r     r|  r   zthird fourthc                 S   ry  rz  r   r   r   r   r   r     r|  zfourth fifthzsecond thirdr   r  z
(?r)abcdefz
(?i)abcdefABCDEFz(?ir)abcdef(.)rz   (?r)(.))r%   r'   r)   r}  re   r7   r8   r[   r:   r   r   r   test_search_reverse  s  ""

zRegexTests.test_search_reversec                 C   s   |  tddd  d S )Nz(?>a*)ar   r!  r:   r   r   r   test_atomic  s   zRegexTests.test_atomicc                 C   sd  |  tdd d |  tdd d |  tdd d |  tdd d |  td	d
 d |  tdd d |  tdd d |  tdd d |  tddd  |  tddd  |  tddd  |  tddd  |  tdd
d  |  tddd  |  tddd  |  tddd  d S )Nza?arN   r   za*ar4   r5   za+aza{1,3}az	(?:ab)?abr   r  z	(?:ab)*abZabababr  z	(?:ab)+abz(?:ab){1,3}abza?+aza*+aza++aza{1,3}+az
(?:ab)?+abz
(?:ab)*+abz
(?:ab)++abz(?:ab){1,3}+abr%   r'   r7   r8   r:   r   r   r   test_possessive  s    zRegexTests.test_possessivec                 C   s  t jdkr| tddg d n| tdddg | tddg d | tddg d | d	d
 tddD g d | tddg d | dd
 tddD g d | tddg d | dd
 tddD g d | tddg d | dd
 tddD g d t jdkr| tddg d | dd
 tddD g d n| tdddg | dd
 tddD dg t jdkr| tddg d | dd
 tddD g d n| tdddg | dd
 tddD dg | tddg d | dd
 tddD g d | tddg d | dd
 tddD g d d S )Nr   z\br  )r   rN   r   r   r   r   r  r  r  c                 S   ry  rz  r   r   r   r   r   r   E  r|  z-RegexTests.test_zerowidth.<locals>.<listcomp>r  r  c                 S   ry  rz  r   r   r   r   r   r   I  r|  r  c                 S   ry  rz  r   r   r   r   r   r   M  r|  r  c                 S   ry  rz  r   r   r   r   r   r   Q  r|  r   r   )r   r    rN   r    r   r    r   r   c                 S   r   r   r   r   r   r   r   r   W  rh   c                 S   r   r   r   r   r   r   r   r   [  rh   z(?r))r   r   r    r   r    rN   r    r   c                 S   r   r   r   r   r   r   r   r   a  rh   c                 S   r   r   r   r   r   r   r   r   e  rh   z(?V1)c                 S   r   r   r   r   r   r   r   r   j  rh   z(?rV1)c                 S   r   r   r   r   r   r   r   r   o  rh   )r   r   r%   r'   r   r)   r}  r   r:   r   r   r   test_zerowidth8  s\   

$
"&zRegexTests.test_zerowidthc                 C   s   |  tdd d |  tdd d |  tddd  |  tddd  |  tddd  |  tjddtjd	d  |  tjd
dtjd	d  |  tjddtjd	 d d S )Nz(?i)Abr   r  z(?i:A)bzA(?i)bz(?V0)Abz(?V1)Abz(?-i)Abr  z(?-i:A)bzA(?-i)b)r%   r'   r7   r8   re   r:   r   r   r   test_scoped_and_inline_flagsr  s   z'RegexTests.test_scoped_and_inline_flagsc                 C   sL   |  tdd d |  tdd d |  tdd d d S )Nz(?:a+)+r4   r5   z(?:(?:ab)+c)+abcabcr  z
(?:a+){2,}r  r:   r   r   r   test_repeated_repeats  s   z RegexTests.test_repeated_repeatsc                 C   sD  |  tdd d |  tddd  |  tddd  |  tdd d |  ttddd |  td	dd  |  ttd
dd |  tddd  |  tddd  |  tddd  |  ttddd |  tddd  |  ttddd |  ttddd |  tddd  |  ttddd |  tddd  |  ttddd |  tddd  |  tddd  |  tddd  |  ttddd |  ttddd |  tddd  |  ttddd |  tttd| j	 d S )Nz123(?<=a\d+)Za123r2   r   Zb123z123(?<!a\d+)z(a)b(?<=b)(c)r   Tz(a)b(?<=c)(c)z(a)b(?=c)(c)z(a)b(?=b)(c)z(?:(a)|(x))b(?<=(?(2)x|c))cz(?:(a)|(x))b(?<=(?(2)b|x))cz(?:(a)|(x))b(?<=(?(2)x|b))cz(?:(a)|(x))b(?<=(?(1)c|x))cz(?:(a)|(x))b(?<=(?(1)b|x))cz(?:(a)|(x))b(?=(?(2)x|c))cz(?:(a)|(x))b(?=(?(2)c|x))cz(?:(a)|(x))b(?=(?(1)b|x))cz(?:(a)|(x))b(?=(?(1)c|x))cz(a)b(?<=(?(2)x|c))(c)z(a)b(?<=(?(2)b|x))(c)z(a)b(?<=(?(1)c|x))(c)z(a)b(?<=(?(1)b|x))(c)z(a)b(?=(?(2)x|c))(c)z(a)b(?=(?(2)b|x))(c)z(a)b(?=(?(1)c|x))(c)z(a)\2(b))
r%   r'   r7   r8   r   r9   rn   r   r(   ro   r:   r   r   r   test_lookbehind  s   zRegexTests.test_lookbehindc                 C   s   t jdkr| tdddd n| tdddd | tdddd t jdkr8| tdddd	 n| tdddd
 | tdddd	 t jdkr_| tdddd n| tdddd | tdddd d S )Nr   z(?V0)(x)?(y)?z\2-\1r  zy-x-zy-xz(?V1)(x)?(y)?r    z-x-z-xr!   zy--zy-r   r:   r   r   r   test_unmatched_in_sub  s    


z RegexTests.test_unmatched_in_subc                 C   s   t d}tjdkr| |dd dd n| |dd dd | d	d
 |dD ddg t d}| |dd dd | dd
 |dD ddg d S )NzD(?mV0)(?P<trailing_ws>[ \t]+\r*$)|(?P<no_final_newline>(?<=[^\n])\Z)r   c                 S      d| j  d S N<>rN  rF   r   r   r   rH     ri   z+RegexTests.test_bug_10328.<locals>.<lambda>zfoobar )z%foobar<trailing_ws><no_final_newline>r   c                 S   r  r  r  rF   r   r   r   rH     ri   )zfoobar<trailing_ws>r2   c                 S      g | ]}|  qS r   r   r   r   r   r   r     r|  z-RegexTests.test_bug_10328.<locals>.<listcomp>r   r   zD(?mV1)(?P<trailing_ws>[ \t]+\r*$)|(?P<no_final_newline>(?<=[^\n])\Z)c                 S   r  r  r  rF   r   r   r   rH     ri   c                 S   r  r   r  r   r   r   r   r     r|  )r'   r(   r   r   r%   r   r}  rZ  r   r   r   test_bug_10328  s0   



zRegexTests.test_bug_10328c                 C   sd  |  tddddg |  tjddddg d |  tddd	d
g |  tjddddg d |  tjddddddg |  dd tddD ddg |  dd tjddddD g d |  dd tddD d	d
g |  dd tjddddD g d |  dd tjddddD ddg |  dd tjddddD ddg d S )N..r  r   r   Tr  )r   r   r   rV  r  rV  r   r  z	(.)(-)(.)r  r  r  c                 S   ry  rz  r   r   r   r   r   r     r|  z.RegexTests.test_overlapped.<locals>.<listcomp>c                 S   ry  rz  r   r   r   r   r   r     r|  c                 S   ry  rz  r   r   r   r   r   r     r|  c                 S   ry  rz  r   r   r   r   r   r     r|  c                 S   r  r   r   r   r   r   r   r     r|  c                 S   r  r   r  r   r   r   r   r     r|  r  )r%   r'   r)   r}  r:   r   r   r   test_overlapped  sF   zRegexTests.test_overlappedc                 C   s>   |  tddg d |  dd tddD g d d S )Nr  za,b,,c,)rN   r   r   r   r   c                 S   r   r   r   r   r   r   r   r     rh   z-RegexTests.test_splititer.<locals>.<listcomp>)r%   r'   r   r   r:   r   r   r   test_splititer  s   &zRegexTests.test_splititerc                 C   s|   |  tdd d |  tdd d |  tddg d |  tddd	d
g |  tddg d d S )Nr  r  r   r  r  r  r  r  r  r  r  r  )r%   r'   r9   r8   r)   r:   r   r   r   test_grapheme  s   

zRegexTests.test_graphemec                 C   s   d}|  td|g d |  td|g d d}|  td|g d |  td|g d d}|  td|g d	 |  td|g d
 d S )Nz4The quick ("brown") fox can't jump 32.3 feet, right?r   )r   Ther   quickz ("brownz") foxr   can'tr   jumpr   Z32rC   3r   feet, rightrn  z(?V1w)\b)r   r  r   r  r   r   "r  r   )r   r  r   can'tr   r  r   z32.3r   r  r  r   r  rn  r   zThe  fox)r   r  z  r  r   zcan't aujourd'hui l'objectif)r   r  r  r  r   Zaujourdr  Zhuir   lr  Zobjectifr   )r   r"  r   zaujourd'huir   z
l'objectifr   )r%   r'   r   r
   textr   r   r   test_word_boundary  s   zRegexTests.test_word_boundaryc                 C   s  |  tddddg |  tdddg |  tddddg |  td	dddg |  td	dddg |  td	dddg |  td
d d |  td
dd  |  td
dd  |  tdd d |  tddd  |  tddd  |  tdd d |  tdd d |  tddd  |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  tddd  |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  tddd  |  tdd d |  tdd d |  tdd d d S )Nz.+zLine 1
Line 2
zLine 1zLine 2zLine 1Line 2zLine 1
Line 2
zLine 1zLine 2z(?w).+^abcr   r   z
abczabcz(?w)^abcabc$zabc
zabcz(?w)abc$(?m)^abcr2   z	(?mw)^abc(?m)abc$z	(?mw)abc$)r%   r'   r)   r7   rI  r:   r   r   r   test_line_boundary   sT   zRegexTests.test_line_boundaryc                 C   s@  |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d	 |  tdd
 d |  tdd d	 |  tdd
 d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd dgdgd |  tdd d |  tdd d d!gg d d S )"Nz(?:(a)|(b))(c)r   r   r   r  z(?:(?<a>a)|(?<b>b))(?<c>c)z!(?<a>a)(?:(?<b>b)|(?<c>c))(?<d>d)r   )rN   r   Nr   Zacd)rN   Nr   r   z(a)(?:(b)|(c))(d)z(a)(?|(b)|(b))(d))rN   r   r   z(?|(?<a>a)|(?<b>b))(c)z(?|(?<a>a)|(?<a>b))(c))rN   r   )r   r   z$(?|(?<a>a)(?<b>b)|(?<b>c)(?<a>d))(e)Zabe)rN   r   r  rU  )r   r   r  z (?|(?<a>a)(?<b>b)|(?<b>c)(d))(e)z(?|(?<a>a)(?<b>b)|(c)(d))(e))r   r   r  z (?|(?<a>a)(?<b>b)|(c)(?<a>d))(e)rN   r   )rN   r   )r   Nr  r   r   )r%   r'   r9   r   capturesdictr:   r   r   r   test_branch_resetJ  s   













zRegexTests.test_branch_resetc                 C   s  |  tdd d |  tdd d |  tdd d |  tdd d |  tdd	d
d |  tdddg |  tdddg |  tddddg |  tddddg |  tddddg |  tddddg |  tddg d |  tddg d |  tdddg |  tdddg |  tdddg |  tdddg |  d td!d"d# |  d td$d"d% |  d td&d'd( |  d td)d*d+ |  d td,d*d+ |  d td-d.d* d d/d0 td1D }|  ttd2|d3 |  ttd4|d5 |  ttd6|d7 |  ttd8|d9 |  ttd:|d9 |  ttd;|d7 |  ttd<|d= |  ttd>|d? |  ttd@|dA |  ttdB|dC |  ttdD|dC |  ttdE|dF |  ttdG|dH |  ttdI|dH |  t	t
tdJ| j |  tdKdLddMg |  tdNdLddMg |  tdOdLddMg |  tdPdLddMg d S )QNz[a]rN   r   z(?i)[a]rX   z[a-b]z	(?i)[a-b]z(?V0)([][])r   za[b]cr  z[\p{Alpha}]Za0z(?i)[\p{Alpha}]ZA0z[a\p{Alpha}]Zab0r   z[a\P{Alpha}]r=  z(?i)[a\p{Alpha}]z(?i)[a\P{Alpha}]z[a-b\p{Alpha}]ZabC0)rN   r   Cz(?i)[a-b\p{Alpha}]ZAbC0)rX   r   r.  z[\P{Alpha}]z[^\p{Alpha}]z[^\P{Alpha}]r   z[^\d-h]za^b12c-hza^bcz[^\dh]za^bc-z	[^h\s\db]z	a^b 12c-hza^c-z[^b\w]r  r   z[^b\S]z[^8\d]za 1b2c                 s       | ]}t |V  qd S r   r\   r   r   r   r   r   	<genexpr>      z&RegexTests.test_set.<locals>.<genexpr>r%  z	\p{ASCII}r;  z
\p{Letter}u   z	\p{Digit}rQ   z(?V1)[\p{ASCII}&&\p{Letter}]4   z'(?V1)[\p{ASCII}&&\p{Alnum}&&\p{Letter}]z&(?V1)[\p{ASCII}&&\p{Alnum}&&\p{Digit}]z(?V1)[\p{ASCII}&&\p{Cc}]!   z(?V1)[\p{ASCII}&&\p{Graph}]^   z(?V1)[\p{ASCII}--\p{Cc}]_   z[\p{Letter}\p{Digit}]r:  z(?V1)[\p{Letter}||\p{Digit}]z\p{HexDigit}   z(?V1)[\p{HexDigit}~~\p{Digit}]rT   z(?V1)[\p{Digit}~~\p{HexDigit}]z(?V0)([][-])z(?V1)[[a-z]--[aei]]r   r   z(?iV1)[[a-z]--[aei]]z(?V1)[\w--a]z(?iV1)[\w--a])r%   r'   r9   r8   r[   r)   r  r(  lenrn   r   r(   ro   )r
   	all_charsr   r   r   test_set  s   zRegexTests.test_setc              
   C   s^'  g dddt j| jfdddt j| jfdddt j| jfdddt j| jfdddt j| jfddd	td
fdddt j| jfdddt j| jfdddt j| jfdddt j| jfdd
d	td
fddd	td
fdddtd fddd	td
fdddtd fdddt j| jfdd
d	td
fddd	td
fdd
dt j| jfddtdd dttdd fdd
dtd
fddd td!fd"d#dtd#fd$d#dtd#fd%d#dtd#fd&d#dtd fd'd(dtd(fd)d(dtd(fd*d+dttd,fd-d+dtd fd.d/dtd fd0d1dtd fd2d+dtd fd3d4dtd4fd5d4dtd4fd6d7dttd8td9 td: td; td< td= fd>d?dtd?fd@dAdtdBfdCdDdtdDfdCdEdtd fdFdGdtd fdHdGdtd fdCdIdtdIfdJdEdtd fdKdEdtdEfdLdGdtd fdMdGdtdGfdNdGdtdGfdOddt j| j	fdPdQdQdtdQfdQdRdtd fdQdSdtd fdQdTdtd fdQdUdtdQfdQdVdtdQfdWdQdtdQfdXdQdtdQfdXdYdtdYfdXdZdtdZfd[dYdtdYfd[dQdtd fd[d\dtd fd[dZdtdZfd]dYdtdYfd]dQdtdQfd]dZdtd fd^dQdtdQfd_dQdtdQfd_d`dtd fdad`dtdQfd_dbdtd fdcdbdtdQfdddQdtdfdedQdtdfdfdQdtdQfdfdSdtdSfdgdhdtdhfdgdidtd fdjdQdtd fdjdkdtdkfdldkdtd fdldmdtdmfdndodtdpfdqdrdtdrfdsdrdtdrfdtdrdtdrfdudvdt j| j
fdwdvdt j| j
fdxdvdt j| jfdydvdt j| j	fdzdvdt j| jfd{d{dtd{fd|d}dtd}fd|d}dtd}fd~ddtdfd~dkdtd fdddtdfdddtd fdddtd fdddtdfddrdtd
fdddtd
fdddtd
fdddtd fdddtd fdddtd fdddtd fdddtdfdddtdfdddtd fdddtd fddrdtd fdddtd fdddtd fdddtd fdddtd fdddtdfdddtdfdddtdfddQdtdfdddtdfdddtdfdddtd fdddtdfdddtdfdddtdfdddtdfddQdtdfddQdtdfdddtdQfdddtdfdddtdfdddtdfddvdt j| j	fdddtdfdQddtd fdddtdfdddtdfdddtdfdddtdfdddtdfdddtd
fdddtdăfdddtdƃfdddtd fdddtdfdddtd˃fddQdtd̓fddQdtdσfdddtdуfdddtdуfdddtdԃfdddtdփfdddtd fddQdtdكfdddtd܃fdddtdރfdddtdfdddtdfdddtdfdddtd fdddtd fdddtdfdd
dtd
fdddtd fdddtdfdddtdfdddtdfdddtd fddpdtdpfddd	tdQfddd	tdQfddd	tdfdddtdfd ddtd fdddtdfdddtdfdddtdfdddtdfdddtdfdd	dtd
fdd	dtd
fdddtdfdddtdfdddtdfdddtdfdddtdfdddtdfdddtdfdddtdfdddtd fd!d"dtd#fd!d$dtd%fd&d'dtd(fd&dQdtd fd)d'dtd*fd+dodtd,fd-ddt j| jfd.dd/td0fd1dd/td2fd3ddt j| jfd4d5dtd5fd6d5dt j| jfd7d8dtd8fd7d8dtd9fd:d;dtd;fd<d
dtd
fd=d>dtd>fd?d
dtd
fd@dAdtdAfdBd>dtd>fdQdQdtdQfdQdRdtd fdQdSdtd fdQdTdtd fdQdUdtdQfdQdVdtdQfdWdQdtdQfdXdQdtdQfdXdYdtdYfdXdZdtdZfdCdZdtdZfd[dYdtdYfd[dQdtd fd[d\dtd fdDd\dtd fd[dZdtdZfdDdZdtdZfdEdZdtdZfdFdZdtdZfdGdZdtd fd]dYdtdYfd]dQdtdQfdHdQdtdQfd]dZdtd fd^dQdtdQfdIdQdtdQfd_dQdtdQfd_d`dtd fdad`dtdQfd_dbdtd fdcdbdtdQfdddQdtdfdedQdtdfdfdQdtdQfdfdSdtdSfdgdhdtdhfdgdidtd fdjdQdtd fdjdkdtdkfdldkdtd fdldmdtdmfdndodtdpfdqdrdtdrfdtdrdtdrfdJdvdt j| jfdudvdt j| j
fdwdvdt j| j
fd{d{dtd{fd|d}dtd}fd~ddtdfd~dkdtd fdddtdfdddtd fdddtd fdddtdfddQdtdfdddtdfdddtdfdKdvdt j| jfdLdvdt j| jfdddtd fdxdvdt j| jfdddtdfdddtdfdddtdfdddtdfdydvdt j| j	fdzdvdt j| jfddQdtdfddQdtdfdddtdQfdMddtdQfdNdvdt j| jfdOddtdQfdddtdfdPddtdfdddtdfdQddtdfdddtdfdRddtdfddvdt j| j	fdddtdfdQddtd fdddtdfdSdTdtdUfdVddtdWfdddtdfdddtdfdddtdfdddtdfdddtd
fdddtdăfdddtdƃfdddtd fdddtdfdddtd˃fddQdtd̓fddQdtdσfdddtdуfdddtdуfdddtdԃfdddtdփfdddtd fddQdtdكfdddtd܃fdddtdރfdddtdfdddtdfdddtdfdddtd fdddtd fdddtdfdXd
dYtd
fdZddtdfd[ddt j| jfd\ddt j| jfdd
dtd
fdddtd fdddtdfdddtdfdddtdfdddtd fddpdtdpfddd	tdQfddd	tdQfd]d^dtd^fd]d_dtd fd]d`dtd fd]dadtd fd]dbdtd^fd]dcdtd^fddd^dtd^fded^dtd^fdedfdtdffdgdhdtdhfdidhdtdhfdjdfdtdffdkd^dtd fdkdldtd fdmdldtd fdkdhdtdhfdndhdtdhfdodhdtdhfdpdhdtdhfdqdhdtd fdrdfdtdffdrd^dtd^fdsd^dtd^fdrdhdtd fdtd^dtd^fdud^dtd^fdvd^dtd^fdvdwdtd fdxdwdtd^fdvdydtd fdzdydtd^fd{d^dtdfd|d^dtdfd}d^dtd^fd}d`dtd`fd~ddtdfdddtd fdd^dtd fdddtdfdddtd fdddtdfdddtdfdddtdfdddtdfddvdt j| jfddvdt j| j
fddvdt j| j
fdddtdfdddtdfdddtdfdddtd fdddtdfdddtd fdddtd fdddtdfdd^dtdfdddtdfdddtdfddvdt j| jfddvdt j| jfdddtd fddvdt j| jfdddtdfdddtdfdddtdfdddtdfddvdt j| j	fddvdt j| jfdd^dtdfdd^dtdfdddtd^fdddtd^fddvdt j| jfdddtd^fd~ddtd^fdddtd^fdddtdfdddtdfdddtdfdddtdfdddtdfdddtdfdddtdfddvdt j| j	fdÐddtdăfd]ddtd fdddtdfdƐddtdȃfdɐddtdʃfdːddtd̃fd͐ddtdσfdАddtdуfdҐddtdfdҐddtdfdՐddtd׃fdؐddtdكfdڐddtd fdېddtdfdݐddtdރfdߐd^dtdfdd^dtdfdddtdfdddtdfdddtdfdddtdfdddtd fdd^dtdfdddtdfdddtdfdddtdfdddtdfdddtdfdddtd fdddtd fdddtdfdddYtdfdddtdfdddtdfd dd	tdfddd	tdfdddtd fdddtdfdddtd	fd
ddtdfdddtd fdddtdfddd	td^fddd	td^fdddtdfdddtdfdddtdfddmd	tdfddmd	tdfddmd	tdfddmdtdfddd	tdfdd d	td!fd"d#d	td$fd%d&dt j| jfd'd(dtd(fd)d*dtd fd)d&dtd&fd+d*dtd*fd,d(dtd(fdad-dtd fd.d-dtdQfd/d0dtdQfdCdEdtd fdKdEdtdEfd1d2dtd3fd4d2dtd3fd5d6dtdQfd7d6dtdQfd8d9dtd9fd:d;d<td=fd>d;d<td=fd?d@dAtdBfdCddt j| jfdDdEdtdkfdFddt j| jfdGdHdtdHfdIddtdfdJdKdtd fdLdKdtdKfdMdKdtdKfdNdOdtdPfdQdRdtdRfdSdTdtdTfdUdVdtdVfdUdWdtdWfdXdYd	tdfdZd[dtd[fd\d[dtd[fd]d[dtd[fd^d[dtd[fd_d`dtd`fdadbdtd fdcdddtd fdedKdtd fdfddAtdgfdhdQdtdifdjdQdtdifdkdQdtdifdld
dtd
fdldmdtdmfdndmdtdmf}|D ]}d }zt|dokr|\}}}}n|\}}}}}W n* ty1   dpdqdr |d ds D dtg }| du| Y qw g }	|rZ|dvD ]}
z
|	t|
 W q= tyY   |	|
 Y q=w |d ur| j||dw | ||t j|| W d    n	1 s}w   Y  qt ||}|r|	rt|j|	 }nt|d d  }nt|}| || qd S (x  Nz(?P<foo_123r   z(?P<1>a)z(?P<!>a)z(?P<foo!>a)z(?P<foo_123>a)(?P=foo_123r   z(?P<foo_123>a)(?P=1)1rN   z(?P<foo_123>a)(?P=0)z(?P<foo_123>a)(?P=-1)z(?P<foo_123>a)(?P=!)z(?P<foo_123>a)(?P=foo_124)z(?P<foo_123>a)z(?P<foo_123>a)(?P=foo_123)z(?<foo_123>a)\g<foo_123z(?<foo_123>a)\g<1>z(?<foo_123>a)\g<!>z(?<foo_123>a)\g<foo_124>z(?<foo_123>a)z(?<foo_123>a)\g<foo_123>rz   )[\1]rs   r=  z'\x01'rv   r   9r=  z\141z((a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\119abcdefghijklk9z0,11)r@  krq   rr   z[\0a]z[a\0]z[^a\0]z\a[\b]\f\n\r\t\vz
	z[\a][\b][\f][\n][\r][\t][\v]z\xffr   r<  z\x00ffffffffffffffz\x00fz\x00fe   þz\x00ffz\t\n\v\r\f\a\gz	
gz	
\gz\t\n\v\r\f\arO   rP   rQ   rR   rS   rT   rU   z[\t][\n][\v][\r][\f][\b]z	
z^\w+=(\\[\000-\277]|[^\n\\])*z(SRC=eval.c g.c blah blah blah \\
	apes.cz SRC=eval.c g.c blah blah blah \\r  Zacbr  r  zacc
ccbza.{4,5}bzabza.b(?s)z(?s)a.bza.*(?s)bz(?s)a.*bz(?s)a.{4,5}br!  )r   r   r=  z''r   ZxbcZaxcZabxxabcyZababczab*czab*bcZabbcZabbbbczab+bcZabqzab?bczab?cr   Zabccr'  Zaabcr(  ^r  za.cza.*cZaxyzcZaxyzdza[bc]dr   za[b-d]eZaceza[b-d]aacr   za[-b]a-za[\-b]za[b-]za[]br   za[za\zabc)z(abcza]za[]]bza]bza[^bc]dZaedza[^-b]cZadcza-cza[^]b]cza]cz\ba\b-az-a-z\by\br  Zyzr   zx\bzx\Br    z\Bzr?  zz\Bz\Bxz\Ba\Bz\By\Bz\By\br!   z\by\Bzab|cdr   rs  z()efdefz0,1)r  r   z$br   za\(ba(b)rJ  za\(*bza((bza\\bza\brL  z0,1,2)rN   rN   rN   z(a)b(c))r   rN   r   za+b+cZaabbabcz(a+|b)*)r   r   z(a+|b)+z(a+|b)?r   z)(z[^ab]*rU  r-   z	a|b|c|d|er  z(a|b|c|d|e)fr  )r  r  zabcd*efgZabcdefgzab*Z	xabyabbbzZxayabbbzz(ab|cd)er  )rU  r   z[abhgefdc]ijZhijz	^(ab|cd)ez(abc|)efr   z(a|b)c*d)Zbcdr   z
(ab|ab*)bc)r   rN   z
a([bc]*)c*)r   r   za([bc]*)(c*d))rs  r   r   za([bc]+)(c*d)za([bc]*)(c+d))rs  r   r   za[bcd]*dcdcdeZadcdcdeza[bcd]+dcdcdez	(ab|a)b*c)r   r   z((a)(b)c)(d)z1,2,3,4)r   rN   r   r   z[a-zA-Z_][a-zA-Z0-9_]*alphaz^a(bc+|b[eh])g|.h$Zabh)ZbhNz(bc+d$|ef*g.|h?i(j|k))effgz)rL  rL  Nij)rM  rM  jZeffgZbcddZreffgzz(((((((((a)))))))))zmultiple words of textzuh-uhzmultiple wordszmultiple words, yeahz	(.*)c(.*))r  r   rV  z\((.*), (.*)\)z(a, b)z2,1)r   rN   z[k]za[-]?cz(abc)\1r  z
([a-c]*)\1z^(.+)?BABrX   z(a+).\1$r   )r   r   z	^(a+).\1$aaaa)r  r   z
([a-c]+)\1z(a)\1)r   rN   z(a+)\1z(a+)+\1z(a).+\1r   )r   rN   z(a)ba*\1z
(aa|a)a\1$r4   )r4   rN   z
(a|aa)a\1$z(a+)a\1$z
([abc]*)\1z
(a)(b)c|ab)r   NNz(a)+xaaax)rQ  rN   z([ac])+xaacx)rR  r   z([^/]*/)*sub1/zd:msgs/tdir/sub1/trial/away.cpp)zd:msgs/tdir/sub1/ztdir/z([^.]*)\.([^:]*):[T ]+(.*)track1.title:TBlah blah blahz0,1,2,3)rS  Ztrack1titlezBlah blah blahz	([^N]*N)+abNNxyzN)rU  ZxyzNZabNNxyz)ZabNNNz	([abc]*)xabcx)rW  r   z	([xyz]*)x)r    r   z	(a)+b|aac)rF  Nz(?P<i d>aaa)az(?P<id>aaa)az0,id)rP  r4   z(?P<id>aa)(?P=id))rP  r   z(?P<id>aa)(?P=xd)r   gz\g<1>z(.)\g<1>gg)rY  rX  z\NrV  z\N{LATIN SMALL LETTER A}z\pr   r  z\PPz\P{Lu}zab{0,}bczab{1,}bcz	ab{1,3}bcz	ab{3,4}bcz	ab{4,5}bcz	ab{0,1}bczab{0,1}cza[b-a]z*az(*)bza{1,}b{1,}cza**za.+?cz
(a+|b){0,}z
(a+|b){1,}z(a+|b){0,1}z	([abc])*dabbbcd)r[  r   z([abc])*bcd)rs  rN   z((((((((((a))))))))))10z((((((((((a))))))))))\10z((((((((((a))))))))))\41z(?i)((((((((((a))))))))))\41z(?i)abcr  ZXBCZAXCZABXZXABCYZABABCz(?i)ab*cz	(?i)ab*bcZABBCz
(?i)ab*?bcZABBBBCz(?i)ab{0,}?bcz
(?i)ab+?bcz	(?i)ab+bcZABQz(?i)ab{1,}bcz(?i)ab{1,}?bcz(?i)ab{1,3}?bcz(?i)ab{3,4}?bcz(?i)ab{4,5}?bcz
(?i)ab??bcz(?i)ab{0,1}?bcz	(?i)ab??cz(?i)ab{0,1}?cz	(?i)^abc$ZABCCz(?i)^abcZAABCz(?i)abc$z(?i)^z(?i)$z(?i)a.cz	(?i)a.*?cZAXYZCz(?i)a.*cZAXYZDz
(?i)a[bc]dZABDz(?i)a[b-d]eZACEz
(?i)a[b-d]ZAACZACz	(?i)a[-b]zA-z	(?i)a[b-]z
(?i)a[b-a]z(?i)a[]bz(?i)a[z(?i)a]zA]z	(?i)a[]]bzA]Bz(?i)a[^bc]dZAEDz(?i)a[^-b]cZADCzA-Cz(?i)a[^]b]czA]Cz	(?i)ab|cdABCDz(?i)()efZDEF)EFr   z(?i)*az(?i)(*)bz(?i)$br  z(?i)a\z(?i)a\(bA(B)r_  z	(?i)a\(*bzA((Bz(?i)a\\bzA\Bz(?i)abc)z(?i)(abcz	(?i)((a)))rX   rX   rX   z(?i)(a)b(c))r  rX   r.  z	(?i)a+b+cZAABBABCz(?i)a{1,}b{1,}cz(?i)a**z	(?i)a.+?cZABCABCz(?i)a.{0,5}?cz(?i)(a+|b)*)rO  r  z(?i)(a+|b){0,}z(?i)(a+|b)+z(?i)(a+|b){1,}z(?i)(a+|b)?)rX   rX   z(?i)(a+|b){0,1}z(?i)(a+|b){0,1}?r   Nz(?i))(z
(?i)[^ab]*CDEz(?i)a*z(?i)([abc])*dABBBCD)rb  r.  z(?i)([abc])*bcd)r]  rX   z(?i)a|b|c|d|eEz(?i)(a|b|c|d|e)fr^  )r^  rc  z(?i)abcd*efgZABCDEFGz(?i)ab*Z	XABYABBBZZXAYABBBZz(?i)(ab|cd)eABCDE)ra  CDz(?i)[abhgefdc]ijZHIJz(?i)^(ab|cd)ez(?i)(abc|)efr  z(?i)(a|b)c*d)ZBCDr  z(?i)(ab|ab*)bc)r  rX   z(?i)a([bc]*)c*)r  BCz(?i)a([bc]*)(c*d))r]  rf  Dz(?i)a([bc]+)(c*d)z(?i)a([bc]*)(c+d))r]  r  re  z(?i)a[bcd]*dcdcdeZADCDCDEz(?i)a[bcd]+dcdcdez(?i)(ab|a)b*c)r  rO  z(?i)((a)(b)c)(d))r  rX   r  rg  z(?i)[a-zA-Z_][a-zA-Z0-9_]*ZALPHAz(?i)^a(bc+|b[eh])g|.h$ZABH)ZBHNz(?i)(bc+d$|ef*g.|h?i(j|k))EFFGZ)rh  rh  NIJ)ri  ri  JZEFFGZBCDDZREFFGZz(?i)((((((((((a))))))))))z(?i)((((((((((a))))))))))\10ZAAz(?i)(((((((((a)))))))))z+(?i)(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))z/(?i)(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))r.  z(?i)multiple words of textzUH-UHz(?i)multiple wordszMULTIPLE WORDS, YEAHzMULTIPLE WORDSz(?i)(.*)c(.*))rd  rO  ZDEz(?i)\((.*), (.*)\)z(A, B))r  rX   z(?i)[k]z
(?i)a[-]?cz(?i)(abc)\1z(?i)([a-c]*)\1za(?!b).Zabadr   za(?=d).z	a(?=c|d).za(?:b|c|d)(.)za(?:b|c|d)*(.)za(?:b|c|d)+?(.)za(?:b|(c|e){1,2}?|d)+?(.)z1,2)r   r  z(?<!-):(.*?)(?<!-):z
a:bc-:de:fzbc-:dez(?<!\\):(.*?)(?<!\\):z
a:bc\:de:fzbc\:dez(?<!\?)'(.*?)(?<!\?)'z
a'bc?'de'fzbc?'dezw(?# commentwz w(?# comment 1)xy(?# comment 2)zZwxyzzw(?i)Wz(?i)wz"(?x)w# comment 1
x y
# comment 2
zzjkl
abc
xyzr)  r*  zjkl
xyzabc
123r  z--ab_cd0123--Z	ab_cd0123z[\w]+z\D+Z1234abc5678z[\D]+z[\da-fA-F]+123abcz([\s]*)([\S]*)([\s]*)z testing!1972z3,2,1)r   ztesting!1972r   z(\s*)(\S*)(\s*)z(([a-z]+):)?([a-z]+)$smilz1,2,3)NNrn  z((.)\1+)z.*dzabc
abdr   z[\41]!z(x?)?z	 (?x)foo rh  z	(?x) foo z(?x)foo z(?<!abc)(d.f)Z	abcdefdofZdofz[\w-]+Z
laser_beamz.*?\S *:zxx:za[ ]*?\ (\d+).*za   10za    10z(?ms).*?x\s*\Z(.*)zxx
x
z(?i)M+ZMMMz(?i)m+z(?i)[M]+z(?i)[m]+z"(?:\\"|[^"])*?"z"\""z^.*?$zone
two
three
za[^>]*?bza>bz^a*?$z^((a)c)?(ab)$)NNr   z^([ab]*?)(?=(b)?)c)r   Nz^([ab]*?)(?!(b))cz^([ab]*?)(?<!(a))cz\b.\b   Är  r   r  c                 S   s   g | ]}t |qS r   )r  )r   fr   r   r   r   	  r|  z+RegexTests.test_various.<locals>.<listcomp>r3   ...z%Incorrect number of test fields: ({})r  )rg   r   )r'   r   r   r   MISSING_RPARENr  UNKNOWN_GROUPr   r\   TRAILING_CHARSrS  
BAD_ESCAPEBAD_CHAR_RANGENOTHING_TO_REPEATMULTIPLE_REPEAT
OPEN_GROUPr:  rk   r  r*   r  r   appendr<   ZsubTestrj   r7   r   r%   )r
   r  r  Zexcvalrg   r   r   r  fieldsZ
group_listr   rG   r   r   r   r   test_various  sZ  






"#$%&*+,-024789;<=>@CHIJKLNOPQRTUVWXYZ[\]_`abcdefghjklmnopqrsuvwxyz{|}~                 	  
                                           "  #  $  %  &  '  (  )  *  +  -  .  /  0  1  2  3  4  5  6  8  9  :  ;  <  =  >  ?  @  A  C  D  E  F  G  H  I  J  K  L  N  O  Q  S  T  U  W  X  Y  [  ]  ^  _  `  a  b  c  d  e  f  h  i  j  k  l  m  n  o  p  q  s  t  
u  w  z  {  |  }  ~                     	    
                                                                                 !    "    #    $    %    '    (    )    *    +    ,    -    .    /    0    2    3    4    5    6    7    8    9    :    ;    =    >    ?    @    A    B    C    D    E    F    H    I    J    K    L    M    N    O    P    Q    S    T    U    V    W    X    Y    Z    [    \    ^    _    `    a    b    c    d    e    f    g    i    j    k    l    m    n    o    p    q    r    t    u    v    w    x    y    z    {    |    }                                                         	                                                                               !      #      $      %      &      '      (      )      +      ,      -      .      /      0      1      2      3      4      6      7      8      9      :      ;      <      =      >      ?      A      B      C      D      E      F      G      H      I      J      L      M      N      O      P      Q      R      S      T      U      W      X      Y      Z      [      \      ]      ^      _      `      b      c      d      e      f      g      h      i      j      k      m      n      o      p      q      r      s      t      u      v      x      y      z      {      |      }      ~                                                                     	        
                                                                                                                                                                         "        #        $        '        )        *        +        -        .        1        2        
4        6        
8        :        ;        <        ?        @        A        B        C        D        F        G        H        I        L        N        P        T        U        \        ]        ^        a        g        j        n        s        t        w        x        y        z        {        ~                                                                                                                                                               !          #          $          %          &          +          -          /          1          3          5          6          7          9          
:          
<          @,
zRegexTests.test_variousc                 C   s|   |  tdddd |  tdddd |  tdtddd |  tdddd |  tdd	d
 dd d S )Nztest\?zresult\?\.
ztest?r  \1\1r    rL   z\\1\\1c                 S   rD   )Nr~  r   rF   r   r   r   rH   	  rI   z-RegexTests.test_replacement.<locals>.<lambda>)r%   r'   r[   r'  r:   r   r   r   test_replacement	  s   zRegexTests.test_replacementc                 C   sN   t jt j t j }|d }d| d | d }| ttt|| j	 d S )Nr   r   r   r!  )
r   ascii_lowercasedigitsascii_uppercaser%   rn   r   r'   r(   ro   )r
   allZsideregexpr   r   r   test_common_prefix	  s    zRegexTests.test_common_prefixc                 C   s  |  tdddg d |  tdddddgddgf |  td	d
dddgg df |  tddddg dg df |  tddddddgg ddgf |  tddddg |  tdddddg |  tddddg d S ) Nz(\w)+r   r2   r  z(\w{3})+r   r   rI  z^(\d{1,3})(?:\.(\d{1,3})){3}$z192.168.0.1r   Z192)Z168r=  r=  z^([0-9A-F]{2}){4} ([a-z]\d){5}$z3FB52A0C a2c4g3k9d3)Z3FZB5Z2AZ0C)Za2Zc4Zg3Zk9Zd3z([a-z]W)([a-z]X)+([a-z]Y)ZaWbXcXdXeXfYr3   ZaW)ZbXZcXZdXZeXZfYz.*?(?=(.)+)br   r   z.*?(?>(.){0,2})drs  r   (.)+rN   )r%   r'   r7   capturesr9   r:   r   r   r   test_captures	  s<   


 zRegexTests.test_capturesc                 C   s   t dd}| |dddd t dd}| |dddd t d	d
}| |dddd t dd}| |ddd t dd}| | d t dd}| | d d S )Nz(X.*?Y\s*){3}(X\s*)+AB:zXY
X Y
X  Y
XY
XX AB:r   r2   r   ))r3      rT      r7     z(X.*?Y\s*){3,}(X\s*)+AB:))r   r  r  r  z\d{4}(\s*\w)?\W*((?!\d)\w){2}Z9999XX)r  rH  )   r   zA\s*?.*?(\n+.*?\s*?){0,2}\(Xz
A
1
S
1 (X)r   rQ   )r  r  z	Derde\s*:zaaaaaa:
Derde:)r     zaaaaa:
Derde:)rU   rS   )r'   r7   r%   r8   r  r   r   r   test_guards	  s    zRegexTests.test_guardsc              	   C   s   d}t  }t  }|dD ],}|d\}}|||f |||f |||f |||f |||f q|D ]:}|D ]5}td| d |}|rb||f|vra| dt|t| q@||f|v ru| dt|t| q@q<d S )Nu   I=i;I=ı;i=İ;=z(?i)\A\Zz{} matching {}z{} not matching {})	r  r   updateaddr'   r9   r*   r  r  )r
   pairsr;  Zmatchingpairr  r  rG   r   r   r   test_turkic	  s4   zRegexTests.test_turkicc                 C   s  g d}|  tjdd|d d |  tjdd|d d |  tjdd|dd  g d}|  tjd	d
|d d
 |  tjdd|d d |  tjd	d|dd  |  tttjdg dd| j |  tjddt	g ddg  |  tjddt	g dddg dg}|  tjdd|d
 d ddg}|  tjdd|d
 d dg}|  tjdd|d
 d dg}|  tjdd|d
 d  |  tjdd!|d
 d  |  td"d#
 d$ |  td"d%
 d$ |  tjd&d'g d
 d( d S ))N)onetwothreez333\L<bar>444Z	333one444)rj  z(?i)333\L<bar>444Z	333TWO444Z
333four444)s   ones   twos   threes   333\L<bar>444s	   333one444s   (?i)333\L<bar>444s	   333TWO444s
   333four444z3\L<bar>4\L<bar>+5z^\L<options>zsolid QWERT)good	brilliantz	+s\ol[i}dr  z+solid QWERT)r  r  +solidr  ZSTRASSE(?fi)\L<words>u   straßewordsr  Zstressr   rU   Zkitz(?i)\L<words>ZSKITSr  u   SKİTSz(?fi)\b(\w+) +\1\bu    straße STRASSE )r2   r  u    STRASSE straße z^\L<options>$r   r/   )r%   r'   r9   r   rn   r   r(   ro   r)   r  r8   r7   )r
   r  r   r   r   test_named_lists	  s   






zRegexTests.test_named_listsc                 C   sL  |  tttd| j |  tttd| j |  tttd| j |  tttd| j |  tttd| j |  tttd| j d}|  td|d  |  td	|d
dd |  td|d  |  td|d
 d |  td|d
 d d}|  td|d
dd |  td|d
dd |  td|d
dd |  td|d
dd |  td|d
dd |  td|d
dd |  tttd| j |  tddd
dd |  tddd
dd  |  td!dd
dd" |  td#d$d
dd% |  td#d&d  |  td'd(d
dd) |  td*d+d
dd, |  td*d-d
dd |  td.d-d
dd/ |  td0d1d
dd |  td0d2d
dd3 |  td0d4d
dd3 |  td0d5d
dd3 |  td0d6d
dd |  td0d7d
dd |  td0d8d
dd |  td0d9d
dd: |  td0d;d
dd: |  td0d<d
dd: |  td0d=d  |  td0d>d  |  td0d?d  |  td0d@d  |  td0dAd  |  tdBdCd
ddD |  tdEdCd
ddF |  tdGdHd
ddI |  tdGdJd  |  tdGdKd
ddL dM}|  tdN|d
ddO |  tdP|d
ddQ |  tdR|d
ddS |  tjdTdUdV	 dWdXdYg |  tjdTdZdV	 dWd[dXg |  tjd\dZdV	 dWdYdXg |  tjd]dUdV	 dWd^dXg |  tjd_dUdV	 dWdYdXg |  tjd]dZdV	 dWdXdYg |  tjd`dadb	 dWdcddg |  tjd`dedb	 dWdfdcg |  tjdgdedb	 dWdddcg |  tjdhdadb	 dWdidcg |  tjdjdadb	 dWdddcg |  tjdhdedb	 dWdcddg |  tdkdl
 dm |  tdndl
 dm |  tdodp
 dq |  tdrdsdsdtg |  tdudvdvdtg |  tdwdx dy |  tdwdz d{ |  tdwd| d} |  tdwd~d  |  tdwd d |  tddjd |  tddjd |  tddjd |  tddjd |  tddjd |  tddjg ddgg f |  ttddd d S )Nz(fou){s,e<=1}z(fuu){s}z
(fuu){s,e}z(anaconda){1i+1d<1,s<=1}z(anaconda){1i+1d<1,s<=1,e<=10}z(anaconda){s<=1,e<=1,1i+1d<1}z-molasses anaconda foo bar baz smith anderson z(znacnda){s<=1,e<=3,1i+1d<1}z(znacnda){s<=1,e<=3,1i+1d<2}r   r2   )rP      r  z(ananda){1i+1d<2}z(?:\bznacnda){e<=2}Zanacondaz(?:\bnacnda){e<=2}z#anaconda foo bar baz smith andersonz(fuu){i<=3,d<=3,e<=5})r/   r/   z(?b)(fuu){i<=3,d<=3,e<=5})rP   rQ   r  z(fuu){i<=2,d<=2,e<=5})rU   rQ   r  z(?e)(fuu){i<=2,d<=2,e<=5}z(fuu){i<=3,d<=3,e}z(?b)(fuu){i<=3,d<=3,e}z(approximate){s<=3,1i+1d<3}z(foobar){e}Zxirefoabralfobarxie)r  r  z(?e)(foobar){e})r5   r5   z(?b)(foobar){e})rR   r7  r  z(foobar){e<=2}Zxirefoabrzlfd)r   rP   r  Zxirefoabzlfdz(foobar){i<=2,s<=2,e<=2}Zoobargoobaploowap)r  rR   r  z\b(foobar){e}\bZzfoobarz)r   r  r  zboing zfoobarz goobar woopz(?b)\b(foobar){e}\b)r  r  r  z^(foobar){e<=1}$ZfoobarZxfoobar)r  r  ZfoobarxZfooxbarZfoxbarZxoobarZfoobaxZoobar)r   r  r  ZfobarZfoobaZxfoobarxZfoobarxxZxxfoobarZxfoxbarZfoxbarxz (foobar){i<=1,d<=2,s<=3,2d+1s<4}Z(3oifaowefbaoraofuiebofasebfaobfaorfeoaro)r   rS   r  z$(?b)(foobar){i<=1,d<=2,s<=3,2d+1s<4})"   '   r  zfoo(bar){e<=1}zapZ	foobarzap)r   rP   r3   r   ZfobarzapZfoobrzap)r  r3   r  zxwww.cnn.com 64.236.16.20
www.slashdot.org 66.35.250.150
For useful information, use www.slashdot.org
this is demo data!
z(?s)^.*(dot.org){e}.*$)r   x   )r  r  z(?es)^.*(dot.org){e}.*$)r  )]   d   z^.*(dot.org){e}.*$))r   w   )   e   z\b\L<words>{e<=1}\bz book cot dog desk zcat dogr  Zcotdogz book dog cot desk z dogz(?e)\b\L<words>{e<=1}\bz(?r)\b\L<words>{e<=1}\bzdog z(?er)\b\L<words>{e<=1}\bs   \b\L<words>{e<=1}\bs    book cot dog desk s   cat dogs   cots   dogs    book dog cot desk s    dogs   (?e)\b\L<words>{e<=1}\bs   (?r)\b\L<words>{e<=1}\bs   dog s   (?er)\b\L<words>{e<=1}\bz(\w+) (\1{e<=1})zfoo fou)rh  Zfouz(?r)(\2{e<=1}) (\w+)s   (\w+) (\1{e<=1})s   foo fou)s   foos   fouz(?:(?:QR)+){e}r  r   z	(?:Q+){e}r   z(?:service detection){0<e<5}zservic detection)r   r7  zservice detect)r   r  zservice detecti)r   r  zservice detectionzin service detection)r      (?:cats|cat){e<=1}catr   r   r2   (?e)(?:cats|cat){e<=1}r   r   r   z(?:cat|cats){e<=1}catsr   r2   r   z(?e)(?:cat|cats){e<=1}z(?:cat){e<=1} (?:cat){e<=1}zcat cotr2   r   r   z/(?e)(GTTTTCATTCCTCATA){i<=4,d<=4,s<=4,i+d+s<=8}ZATTATTTATTTTTCATA)r   r   rQ   rR   r3   z(?:fo){e<=1}|(?:fo){e<=2}ZFOT)r%   rn   r   r'   r(   ro   r7   r8   r)   r   r   r9   	fullmatchfuzzy_countsfuzzy_changesr   r$  r   r   r   
test_fuzzy4
  s|  
















































zRegexTests.test_fuzzyc                 C   s:  |  tddd d  d |  tddd d  d |  tddd d  d |  tddd d  d	 |  tdd
d d  d |  tddd  |  tddd d  d |  tddd d  d |  tddd d  d |  tddd d  d |  tdd
d d  d |  tddd  |  tddd d  d |  tdddg d |  tddd d  d |  tdddg d |  tddd d  d |  tddd d  d |  td d!d d  d" |  td#d!d d  d" td$}|  t|d%d& |  t|d'd( |  t|d)d& |  t|d*d( |  t|d+d( |  t|d,d( |  t|d-d& |  t|d.d& |  t|d/d( |  t|d0d& |  t|d1d& |  t|d2d& d S )3Nz(\w)(?:(?R)|(\w?))\1rL   )rL   r    r   r   )r   rN   r   abba)r  rN   Nkayak)r  rA  NZpaper)papr   rN   Zdontmatchmez(?r)\2(?:(\w?)|(?R))(\w))rL   r   r    )r   r   rN   )r  NrN   )r  NrA  )r  rN   r   z\(((?>[^()]+)|(?R))*\)
(ab(cd)ef))r  r  r2   )r   r   (cd)r  z(?r)\(((?R)|(?>[^()]+))*\))r  r   )r  r   r  r   z\(([^()]+|(?R))*\)zsome text (a(b(c)d)e) more text)(a(b(c)d)e)r  z(?r)\(((?R)|[^()]+)*\))r  rN   z!(foo(\(((?:(?>[^()]+)|(?2))*)\)))foo(bar(baz)+baz(bop)))r  r  z(bar(baz)+baz(bop))zbar(baz)+baz(bop)z%(?r)(foo(\(((?:(?2)|(?>[^()]+))*)\)))zv^\s*(<\s*([a-zA-Z:]+)(?:\s*[a-zA-Z:]*\s*=\s*(?:'[^']*'|"[^"]*"))*\s*(/\s*)?>(?:[^<>]*|(?1))*(?(3)|<\s*/\s*\2\s*>))\s*$z<foo><bar></bar></foo>Tz<foo><bar></foo></bar>Fz<foo><bar/></foo>z<foo><bar></foo>z<foo bar=baz/>z<foo bar="baz">z<foo bar="baz"/>z<    fooo   /  >z	foo<foo/>z<foo>foo</foo>z<foo><bar/>foo</foo>z<a><b><c></c></b></a>)r%   r'   r7   r  r(   r   )r
   Zrgxr   r   r   test_recursive
  s   








zRegexTests.test_recursivec                 C   s  t d}| t||u  | t||u  |d}| t||u | t||u | |jd u t|}|  | |jd u | |jd u  t dd}t|}| 	t
| d | 	t
| d t dd}t|}| 	t
| d | 	t
| d t dd}t|}| 	t
|d | 	t
|d t dd}t|}| 	t
|d | 	t
|d d S )NrN   rC   r   r   r   r  )r'   r(   Z
assertTruecopydeepcopyr9   r   Zdetach_stringr}  r%   r  r   r   )r
   rrG   m2r~  Zit2r   r   r   	test_copy<  s6   






zRegexTests.test_copyc                 C   sv   |  tdddd |  tdddd |  tdddd |  tdddd	 |  tdddd d S )
Nr  z{0} => {2} {1}r  foo bar => bar fooz(?<word1>\w+) (?<word2>\w+)z{word2} {word1}bar foo)r  r2   )r  r2   )r%   r'   subfZsubfnr9   expandfr:   r   r   r   test_formatg  s2   


zRegexTests.test_formatc              	   C   sH  |  ttddd |  ttddd |  ttjddddd |  ttjdddd	d |  ttjdd
dd	d |  ttjdd
dddd |  ttddd |  ttddd |  ttjddddd |  ttjdddd	d |  ttjdd
dd	d |  ttjdd
dddd d S )Nr   TrW  Fr3   )r   Zxabcr2   )r   rD  r   r  z(?r)abcr%   r   r'   r  r:   r   r   r   test_fullmatchu  s4   zRegexTests.test_fullmatchc                 C   s  |  tdddd |  tdtdtdd |  tdddd |  tdtdtdd |  tdtdtdd |  tdtdtdd d	td	fD ]D}|  td
|g d tj	dkr|  td|g d |  td|g d qX|  td|g d |  td|g d qXdtdtdtdfD ]D}|  td|g d tj	dkr|  td|g d |  td|g d q|  td|g d |  td|g d qdtdfD ]&}|  t
d|g d |  t
d|g d |  t
d |g d! qd"td"td"td"fD ]'}|  t
d#|g d$ |  t
d%|g d$ |  t
d&|g d' q'dtdfD ]C}| td| d( | td)| d* | td)|d+d | td)|d,d | td)|d,d,d- qUdtdtdtdfD ]C}| td| d( | td.| d/ | td.|d+d | td.|d,d | td.|d,d,d0 qd S )1Nr!   rN   r   Zxaz   yr  s   xyzs   xazr   r   r   r   r   r   r   r   r   r   s   :a:b::c   :)r+  r  r  r+  r  s   :*)r+  r+  r  r+  r  r+  r  r+  s   (:*))r+  r  r+  r+  r  r  r+  r+  r     ::r+  r+  r  r+  r+  )r+  r  r  r  )r+  r  r  r  r  r  r  r   r   r   r   r   r   s
   a:b::c:::ds   :+)r  r  s   :::s   (:+)s   (:)(:*)))r  r+  )r  r  )r  r  r   r   r   r   r2   r   s   (a))r  )r  r  )r&   r'   r[   r   r   	bytearray
memoryviewr   r   r   r)   r%   r9   r   r   )r
   r   r   r   r   test_issue_18468  s~   

  zRegexTests.test_issue_18468c                 C   s  |  tjddddjd |  tjdddd d |  tjddddjd |  tjdddd d |  tjdd	ddd  |  tjd
dddjd |  tjd
ddd d |  tjd
dddjd |  tjd
ddd d |  tjddddjd |  tjddddgdjd |  tjddddgd d |  tjddddgdjd |  tjddddgd d |  tjddddgdjd |  tjddddgd d |  tjddddgdjd |  tjddddgd d |  tjddddgdd  |  tjdddd d |  tjdddd d |  tjdddd d |  tjdddd d |  tjdddd d |  tjdd ddd  |  tjdd!ddd  d S )"Nr   rN   Tpartialr   r  r  r5   Zcatchzabc\w{3}r   Fr  r  r  z\d{4}$1234z	\L<words>post)r  r  r  r   r  POST   poﬆPOSz	[a-z]*4R$r  Zab4Za4Za4RZ4aZa44)r%   r'   r9   r  r8   r:   r   r   r   test_partial  s   zRegexTests.test_partialc              
   C   st5  |  ttjdtjdd |  ttjdtjdd |  tddddg |  td	dddg |  tdd
dg |  tdddg |  tdddg |  dd tddD dg |  tddtjtjB 	dd |  tddtjtjB 	dd |  tddtjtjB 	dd |  tdd
 d |  ttjddtjdd |  tdd 	dd!d" |  td#d$	dd!d% |  td&d'	dd' |  td(d)d  |  td*d+	dd |  td,d-d!d. |  td,d/d!d0 |  td,d1d!d2 |  td3d1	 d1 |  td4d5 d6 |  td7d- d8 |  td7d/ d9 |  td:d	dd |  tjd;d1tjd	dd1 |  td<d=dd!d> |  td?d=dd!d@ |  tdAd=dd!dB |  tdCd=dd!dD |  tdEdF	dd- |  tjdGdHdIdJgdKg dL |  tdMdHg dN |  tdOdHg dL |  tdPdHg dL |  tdQd-	dd!dRdS |  tdTdUdd!dV |  tdWd-	dd!dX |  tdYdZd  |  td[d\d  | tj| jd]d^  |  td_d`dda |  tdbdc	ddc |  tddded  |  tdfdgd  |  tdhdi	dd!dRdj |  tdkdld$dmg |  tdndld$dmg |  tdodld$dmg |  tdpdld$dmg |  tdqdr	 dr |  dsd tdtduD dvdwg |  tdxdydzg d{ | tj| jd|d^  d}}d~}|  t||tjd d |  tdddg |  ttdddtjtd |  tddd  |  tddddd9g |  tddd^ dd tjdtjd}|  |dd  |  |dg  | tj| jdd^  |  tjdddd |  tjdddd |  tdd |  tjdddd |  tjdddd |  tdd |  tdd
 d |  tdd
 d |  tdd
 d tjdtjtjB d}|  dd |dD dg |  |ddg d}|  dd ||D dg |  ||dg tjdtjtjB tjB d}|  dd |dD dg |  |ddg d}|  dd ||D dg |  ||dg tjdkr?|  tddddU n|  tdddd |  tddddU tjdkrg|  tdddd n|  tdddd |  tdddd |  tjdddtjdd |  tddj d |  tddj d |  tddj d |  tddj d |  tddj d |  tddj d |  tddj d |  tddj d |  tddj d |  tdd¡j dá |  tdd¡j dá |  tdd¡j dá |  tddj d |  tddj d |  tddj d |  tddȡg  |  tdddd |  ttd-d-tj!d |  tddˡd dg |  tddˡd dg |  tddˡd dg |  tddˡd dg | tjddd^  |  tdd-	dd!dRdҡ |  tdd-	dd!dRdҡ dԠ"ddք t#d׃D }|  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| t$t#d}|  td"td|td"td| |  td"td|td"td| |  td"td|td"td| |  td"td|td"td| |  td"td|td"td| |  td"td |td"td| |  td"td|td"td| |  td"td|td"td| |  td"td|td"td| |  td"td|td"td	| |  td"td
|td"td| |  td"td|td"td| |  td"td|td"td| |  td"td|td"td| |  ttdd	 td |  tdd
 d |  tdddd |  tdddd |  t%dddd |  t%dddd |  tj&dddd d9 |  tj&ddddj'd |  tjdd dd d! |  tjd"d dd d! |  tjd#d dd d$ |  td%d& d8 |  td'd(d  |  td)d*g d+ |  td,d*g d+ |  d-d td.d/D g d0 |  d1d td2d/D g d0 |  td3d4d d4 |  td3d5d d5 |  td6d7d d7 |  td8d9d d9 |  td:d	dd!d; |  td<d=d>d?g |  td@d=ddAg |  tdBd	dd!dC |  tdDd=dEdg |  tdFd=dAdg |  tdGdHd dH |  tdId-	dJd  |  tdId-dJd-g |  tdKdLd dM |  tdNdLd dM |  tdOdLd  |  tdPdLd dL |  tdQdRd dR |  tdQdSd dT |  tdUdRd dV |  tdUdSd dT |  tdWdSd dS |  tdWdXd dT |  tdYdXd dT |  tdZdXd dT |  td[dLd  |  td\dLd dL |  td]dRd dR |  td]dSd dT |  td^dSd dS |  td^dXd dT |  td_dXd dT |  td`dXd dT |  tdadRd dR |  tdadSd dT |  tdbdRd dV |  tdbdSd dT |  tdcdSd dS |  tdcdXd dT |  tdddXd dT |  tdedXd dT |  tdfdRd dR |  tdfdSd dT |  tdgdSd dS |  tdgdXd dT |  tdhdXd dT |  tdidXd dT dj}|  t(tdk|d! |  tdldm d9 |  tdndod do tdp}dq}	|  drd ||	D dsdtg |  tdudvtj dw |  tdxdvtj dy |  tdzd{ d| |  td}d{d  |  td~d d |  td~dddg |  tdd	dd!d |  tdd	dd!d |  tdddd |  tdddd |  tjdddgd d |  tjdddgd d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d tjdddgd}
t)*|
}t)+|}
|  |
d d6 |  tjddtjd d| |  tjddtjd d |  tjddtjdd  |  tjddtjd d| |  tjddtjd d |  tjddtjdd  | ,tjdd^  | ,tjdd^  |  ttdd |  ttdd |  tddtj-ddg |  tjdddd d d}d}|  ttd| |d |  ttd| |d |  ttd| |d |  ttd| |d |  ttd| |d |  ttd| |d |  ttjddddgdd |  ttjddddgdd |  ttjddddgdd |  ttjddddgdd |  tjddddgd d |  tjddddgd d |  tdd d |  tdd d |  tddá d |  tddġd  |  tdŐdơ dǡ |  tdȐdɡ dʡ d}d}|  tt||d |  ttd͐dd |  ttdΐdd |  ttdϐdd |  ttdАdd |  ttdѐdҡd |  tdӐdԡ
 dա |  td֐dtj d |  td֐dtjj d |  tdؐdtj d |  tdؐdtjj d |  tdِdtj dۡ |  tdِdtjj dܡ |  tjdݐdtjtjB d dߡ |  tdd=dAg |  tdd=dAg |  tddddg |  tddg  |  tdddg |  tddg d |  tdd	 d |  tdd	 d |  tdd	 d |  tdd	 d |  tdd	 d |  tdd	 d |  tdd	 d |  tdd	 d |  tdd	 d |  tdd	 d |  tdd	 d |  tdd	 d |  tjddddd |  tjddddd |  tjddddd |  tjddddd  |  tdd |  tdde d8 |  tdd d8 |  tdd d |  tddԡ d |  tddԡ d |  tdd$
 d |  tdd$. d	d i |  tdd$/ d	d-gi |  td
d$
 d |  td
d$. d	d i |  td
d$/ d	d-gi |  tdd$
 d |  tdd$. d	d i |  tdd$/ d	d-gi |  ttddd |  tjdddd d |  tjdddd d |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttd d!d |  ttd"d!d |  t&d#d$dg d$ |  t&d#d$	dd  |  t&d%d$dg d$ |  t&d%d$	dd& |  tjd'dddj'd |  tjd'd(ddj'd |  tjd)dddj'd |  tjd*dddj'd |  tjd*d(ddj'd |  tjd+dddj'd |  tjd+d(ddj'd |  tjd,dddj'd |  tjd-dddj'd |  tjd-d(ddj'd |  tjd.dddj'd |  tjd.d(ddj'd |  tjd/dddj'd |  tjd0dddj'd |  tjd0d(ddj'd |  tjd1dddj'd |  tjd1d(ddj'd |  tjd2dddj'd |  tjd3dddj'd |  tjd3d(ddj'd |  tjd4dddj'd |  tjd5dddj'd |  tjd6dddj'd |  tjd7dddj'd |  tjd8dddj'd |  tjd9dddj'd |  tjd7d-ddj'd |  tjd8d-ddj'd |  tjd9d-ddj'd |  tjd:dddj'd |  tjd;dddj'd |  tjd<dddj'd |  tjd=dddj'd |  tjd>dddj'd |  tjd?dddj'd |  tjd=d-ddj'd |  tjd>d-ddj'd |  tjd?d-ddj'd |  tjd@dAddj'd dB}dC}tj||tjd}|  |j d |  |j0g dDgg f |  tdEdFj dG |  tdEdHj d |  tdIdJdJg |  ttdKd-d |  ttdLd-d |  t&dMdL d6 |  tdNdO/ dPgg dPgdQ |  ttdRdSd |  ttdTdSd |  tdUdVj0g g g dWf |  tdXd&j dY |  tdXd&j0dgg d!gf |  tdZd&j d[ |  tdZd&j0g g dgf |  td\d&j d[ |  td\d&j0g g dgf |  td]d^j d_ |  td`d^j d |  tdad^j d |  tdbdcj dd |  tdedcj dd |  t&dfdgj d |  t&dhdgj d |  tdidjd  |  ttdkd |  ttdld |  tdmdng do |  tdpdng do |  tjdqdrtj1dj ds |  ttdtdd |  ttdudd |  tdvdw	 dw |  tdvdxd  |  tdydz	 dz |  tdyd{d  |  tdydzj0g d|gg f |  td}dz	 dz |  td~dzj0g d|gg f |  td2dg d |  td2dg d |  tddd  |  tddd  tjdtjtj3B d}|  |d	 d |  |d	 d |  |d	 d |  |d	 d d}d}tj||tjd}|  | d |  |. dddddd tj||tj-d}|  | d |  |. dddddd d}d}tj||tjd}|  |j dG |  |j0g g g f d}tj||tjd}|  |j dd |  |j0ddgg g f |  tdddd |  t%dddd |  tdd4ddf |  tdd5dd |  tddd  |  tjddtjdd  |  tdd d9 |  tdd d9 |  tddd  |  tdd d8 |  tdd$6 d$gg d$f |  tdd$7 d6gg df |  tt&ddd |  tt&ddd |  tdded  |  tdde d. |  tdd d |  tdd d8 |  tdd d9 |  tdd d9 |  tdd d8 d S (  Nz(?>b)r  Tz^((?>\w+)|(?>\s+))*$z\((?:(?>[^()]+)|(?R))*\)za(bcd(e)f)g(h)z	(bcd(e)f)z(h)z\((?:(?:[^()]+)|(?R))*\)za(b(cd)e)f)g)hz(b(cd)e)za(bc(d(e)f)ghz(d(e)f)z(?r)\((?:(?>[^()]+)|(?R))*\)c                 S   r  r   r  r   r   r   r   r   !  r|  z+RegexTests.test_hg_bugs.<locals>.<listcomp>z\((?:[^()]*+|(?0))*\)za(b(c(de)fg)hz	(c(de)fg)za(bc)drs  r   z([\da-f:]+)$rc  r  z^(?=ab(de))(abd)(e)Zabde)rV  r   r  z\ r   z^(a|)\1{2}br   r2   )r   r   z	^(a){0,0}r   r`  z(?>.*/)bza/bz((?i)blah)\s+\1z	blah BLAHz(\()?[^()]+(?(1)\)|)z(abcdz(a*)*rN   r2   r2   r   r   r   r4   r3   r3   z	a(?#xxx)*z(?=abc){3}abcZ	abcabcabcr5   z^(?:a(?:(?:))+)+r   r  za(?x: b c )dza#comment
*z(?V1)(a(?(1)\1)){1}Z
aaaaaaaaaar   z(?V1)(a(?(1)\1)){2})r5   r1   z(?V1)(a(?(1)\1)){3})r  r  z(?V1)(a(?(1)\1)){4})r  )r   rQ   z(?V1)(a)(?<=b(?1))Zbazz(?fi)\L<keywords>u)   POST, Post, post, poſt, poﬆ, and poﬅr  r   )keywords)r  ZPostr  u   poſtr     poﬅz(?fi)pos|post)r  Posr   u   poſr  r  z(?fi)post|posz(?fi)post|anotherz(?V1)((a)(?1)|(?2))r   ru  z(?V1)(\1xx|){6}rL   )r  r  z(a|)+r   z(a|)*\dZPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaz^(?:a?b?)*$r   c                   S   rP  )Nz\N{1}rQ  r   r   r   r   rH     rR  z)RegexTests.test_hg_bugs.<locals>.<lambda>r  za
a
r  z(q1|.)*(q2|.)*(x(a|bc)*y){2,}Zxayxayz(?i)[^a]rX   z(?i)[[:ascii:]]u   Kz((a|b(?1)c){3,5})Zbaaaaca)rP  rP  rN   z(?<=:\S+ )\w+z:9 abc :10 defrI  z(?<=:\S* )\w+z(?<=:\S+? )\w+z(?<=:\S*? )\w+z(?:fe)?maleZfemalec                 S   r  r   r  r   r   r   r   r     r|  z!(fe)?male: h(?(1)(er)|(is)) (\w+)z(female: her dog; male: his cat. asdsasdazfemale: her dogzmale: his catz (?<rec>\((?:[^()]++|(?&rec))*\))zaaa(((1+0)+1)+1)bbbZrec)z(1+0)z	((1+0)+1)z(((1+0)+1)+1)c                   S   ry   )Nr    \r{   r   r   r   r   rH     r|   z%(CAGCCTCCCATTTCAGAATATACATCC){1<e<=2}ZtcagacgagtgcgttgtaaaacgacggccagtCAGCCTCCCATTCAGAATATACATCCcgacggccagttaaaaacaatgccaaggaggtcatagctgtttcctgccagttaaaaacaatgccaaggaggtcatagctgtttcctgacgcactcgtctgagcgggctggcaaggZtCAGCCTCCCATTCAGAATATACATCCzc..+/cz
cA/c
cAb/czcAb/cz(\w+)r>  u#   अन्‍न ന്‍ किनu)   [अन्‍न] [ന്‍] [किन]z.*a.*ba.*aaZababbaz(?<x>a(?<x>b))r   r    r  z(-)c                 S   s
   |  dS )Nr    )r   rF   r   r   r   rH        
 r  Zaxbxcz\bt(est){i<2}z	Some textc                   S   rP  )Nz.???rQ  r   r   r   r   rH     rR  zfoo!?F)special_onlyzfoo\!\?zfoo!\?s   foo!?s   foo\!\?s   foo!\?z^([^z]*(?:WWWi|W))?$WWWi)r  z^([^z]*(?:WWWi|w))?$z^([^z]*?(?:WWWi|W))?$r.   c                 S   r  r   r  r   r    r   r   r   r     r|  Zyxxxc                 S   r  r   r  r  r   r   r   r     r|  c                 S   r  r   r  r  r   r   r   r     r|  c                 S   r  r   r  r  r   r   r   r     r|  r   z(?V0).*rW   z(?V1).*z(?V0).*?r   z	|||||||||z	|t|e|s|t|z(?V1).*?z^(@)\n(?!.*?@)(.*)z\1\n==========\n\2z@
z@
==========
r  Zcazr  r  z(?b)(?:cats|cat){e<=1}z(?:cat){e<=1}z(?e)(?:cat){e<=1}z(?b)(?:cat){e<=1}z(?:cats){e<=2}zc ats)r2   r2   r   z(?e)(?:cats){e<=2}r  z(?b)(?:cats){e<=2}zc a ts)r   r   r   z(?:cats){e<=1}z(?e)(?:cats){e<=1}z(?b)(?:cats){e<=1}z\bof ([a-z]+) of \1\bz#To make use of one of these modulesz\g<0>z(?V1)[[b-e]--cd]r   z(?V1)[b-e--cd]z(?V1)[[bcde]--cd]z(?V1)[bcde--cd]z ^unknown property at position 4$c                   S   rP  )Nz\p{}rQ  r   r   r   r   rH   n  r  z(?:()|(?(1)()|z)){2}(?(2)a|z))rN   r   r   z(?:()|(?(1)()|z)){0,2}(?(2)a|z)r   c                 s   r/  r   r0  r1  r   r   r   r2  }  r3  z*RegexTests.test_hg_bugs.<locals>.<genexpr>i   z[[:alnum:]]+z[\p{Alpha}\p{PosixDigit}]+z[[:alpha:]]+z
\p{Alpha}+z[[:ascii:]]+z[\p{InBasicLatin}]+z[[:blank:]]+z[\p{gc=Space_Separator}\t]+z[[:cntrl:]]+z\p{gc=Control}+z[[:digit:]]+z[0-9]+z[[:graph:]]+z<[^\p{Space}\p{gc=Control}\p{gc=Surrogate}\p{gc=Unassigned}]+z[[:lower:]]+z
\p{Lower}+z[[:print:]]+z%(?V1)[\p{Graph}\p{Blank}--\p{Cntrl}]+z[[:punct:]]+z2(?V1)[\p{gc=Punctuation}\p{gc=Symbol}--\p{Alpha}]+z[[:space:]]+z\p{Whitespace}+z[[:upper:]]+z
\p{Upper}+z[[:word:]]+zL[\p{Alpha}\p{gc=Mark}\p{Digit}\p{gc=Connector_Punctuation}\p{Join_Control}]+z[[:xdigit:]]+z[0-9A-Fa-f]+r%  r+  s   (?a)[[:alnum:]]+s   (?a)[\p{Alpha}\p{PosixDigit}]+s   (?a)[[:alpha:]]+s   (?a)\p{Alpha}+s   (?a)[[:ascii:]]+s   (?a)[\x00-\x7F]+s   (?a)[[:blank:]]+s   (?a)[\p{gc=Space_Separator}\t]+s   (?a)[[:cntrl:]]+s   (?a)\p{gc=Control}+s   (?a)[[:digit:]]+s
   (?a)[0-9]+s   (?a)[[:graph:]]+s@   (?a)[^\p{Space}\p{gc=Control}\p{gc=Surrogate}\p{gc=Unassigned}]+s   (?a)[[:lower:]]+s   (?a)\p{Lower}+s   (?a)[[:print:]]+s&   (?aV1)[\p{Graph}\p{Blank}--\p{Cntrl}]+s   (?a)[[:punct:]]+s3   (?aV1)[\p{gc=Punctuation}\p{gc=Symbol}--\p{Alpha}]+s   (?a)[[:space:]]+s   (?a)\p{Whitespace}+s   (?a)[[:upper:]]+s   (?a)\p{Upper}+s   (?a)[[:word:]]+sP   (?a)[\p{Alpha}\p{gc=Mark}\p{Digit}\p{gc=Connector_Punctuation}\p{Join_Control}]+s   (?a)[[:xdigit:]]+s   (?a)[0-9A-Fa-f]+z\X$u   ab℃u   ℃z([^L]*)([^R]*R)LtR)r   r  r  zx\1yZxayxbyr  zx{1}yz(a)*abcr  ZOXRGZOOGOXr  z.XRGz	.{1,3}XRG)r2   r  zR|RRz(.)(?(1)(?!))r  z(y)?(\d)(?(1)\b\B)Zax1y2z3b))r   r=  )r   2)r   r  z(y)?+(\d)(?(1)\b\B)c                 S   r  r   r8   r   r   r   r   r     r|  z(?i)(?:error){e}zregex failure)r  )r  rQ   )rQ   rS   )rS   rS   c                 S   r  r   r  r   r   r   r   r     r|  z(?fi)(?:error){e}z(?p)\d+(\w(\d*)?|[eE]([+-]\d+))Z10b12z10E+12z(?p)(\w|ae|oe|ue|ss)aez(?p)one(self)?(selfsufficient)?Zoneselfsufficientz(ab\Kcd))r   rs  z
\w\w\K\w\wZabcdefghr   ghz(\w\w\K\w\w)Zefghz(?r)(ab\Kcd))r   rs  z(?r)\w\w\K\w\wr  z(?r)(\w\w\K\w\w)z6(?(DEFINE)(?<quant>\d+)(?<item>\w+))(?&quant) (?&item)z5 elephantsz#(?&routine)(?(DEFINE)(?<routine>.))Zroutinez12(*FAIL)|3123r  z(?r)12(*FAIL)|3z\d+(*PRUNE)\dz\d+(?=(*PRUNE))\dz\d+(*PRUNE)bcd|[3d]Z123bcdZ123zzdr   z\d+?(*PRUNE)bcd|[3d]Z3bcdz\d++(?<=3(*PRUNE))zzd|[4d]$Z124zzdz\d++(?<=(*PRUNE)3)zzd|[4d]$z\d++(?<=2(*PRUNE)3)zzd|[3d]$z(?r)\d(*PRUNE)\d+z(?r)\d(?<=(*PRUNE))\d+z(?r)\d+(*PRUNE)bcd|[3d]z(?r)\d++(?<=3(*PRUNE))zzd|[4d]$z(?r)\d++(?<=(*PRUNE)3)zzd|[4d]$z (?r)\d++(?<=2(*PRUNE)3)zzd|[3d]$z\d+(*SKIP)bcd|[3d]z\d+?(*SKIP)bcd|[3d]z\d++(?<=3(*SKIP))zzd|[4d]$z\d++(?<=(*SKIP)3)zzd|[4d]$z\d++(?<=2(*SKIP)3)zzd|[3d]$z(?r)\d+(*SKIP)bcd|[3d]z(?r)\d++(?<=3(*SKIP))zzd|[4d]$z(?r)\d++(?<=(*SKIP)3)zzd|[4d]$z(?r)\d++(?<=2(*SKIP)3)zzd|[3d]$zJune 30, December 31, 2013 2012
some words follow:
more words and numbers 1,234,567 9,876,542
more words and numbers 1,234,567 9,876,542z(?<!\d)(?>2014|2013 ?2012)z1(?>2)Z12zn(?V1w)(?=(?=[^A-Z]*+[A-Z])(?=[^a-z]*+[a-z]))(?=\D*+\d)(?=\p{Alphanumeric}*+\P{Alphanumeric})\A(?s:.){8,255}+\ZzAAaa11!!z(?smx)
(?(DEFINE)
  (?<subcat>
   ^,[^,]+,
   )
)

# Group 2 is defined on this line
^,([^,]+),

(?:(?!(?&subcat)[\r\n]+(?&subcat)).)+
zP
,Cat 1,
,Brand 1,
some
thing
,Brand 2,
other
things
,Cat 2,
,Brand,
Some
thing
c                 S   s   g | ]}| d dqS r  r  r   r   r   r   r     s    )rH  )r   rU   )rH  )6   ;   z(abcdefgh){e}z******abcdefghijklmnopqrtuvwxyz)r   r  z(abcdefghi){e})r   r  z(?:(?=\d)\d+\b|\w+)rm  r  z(?(?=\d)\d+\b|\w+)z (?(?<=love\s)you|(?<=hate\s)her)z
I love your  z&I love you but I don't hate her eitheryouZherz(?p)a*(.*?)aaabbb)r  bbbz
(?p)a*(.*)rz   r  z(?irV0)\L<kw>21r=  )kwz(?irV1)\L<kw>za|bZ111a222)r3   r   z(?r)a|bz(?if)<(CLI)><\1>z
<cli><cli>r  z
<cli><clI>z(?ifr)<\1><(CLI)>z\L<options>rh  rj  r  z(x{6}){e<=1}ZxxxxxxZxxxxxr  z(?r)(x{6}){e<=1}c                   S   rP  )Ns   00000\0\00\^(\00\U05000000rQ  r   r   r   r   rH     rR  c                   S   rP  )Ns   {e<lrQ  r   r   r   r   rH     r  z	((?0)){e}z	 ?(?0){e}z0((brown)|(lazy)){1<=e<=3} ((dog)|(fox)){1<=e<=3}z+The quick borwn fax jumped over the lzy hog)borwnr  r   faxr   r  )lzyr   r  hogr	  r   z\d\d\d-\d\d-\d\d\d\dz$My SSN is 999-89-76, but don't tell.)$   r
  u   Йu   йz(?ui)z(?ai)z(?afi)z
(?i)\L<aa>Z22Z121)r   z(?ri)\L<aa>z(?fi)\L<aa>z(?fri)\L<aa>z(?r)\1dog..(?<=(\L<aa>))$ZccdogccZbcbccr  z(?ir)\1dog..(?<=(\L<aa>))$z(2)(?:\1{5}){e<=1}Z3222212)r2   rU   z(\d)(?:\1{5}){e<=1}z&\A(?P<whole>(?>\((?&whole)\)|[+\-]))\Zz((-))z((-)+)zx.*? (.).*\1(.*)\1z	x  |y| z|r  z\.sr (.*?) (.)(.*)\2(.*)\2(.*)z#.sr  h |<nw>|<span class="locked">|)r   #   z"\xF9\x80\xAEqdz\x95L\xA7\x89[\xFE \x91)\xF9]\xDB'\x99\x09=\x00\xFD\x98\x22\xDD\xF1\xB6\xC3 Z\xB6gv\xA5x\x93P\xE1r\x14\x8Cv\x0C\xC0w\x15r\xFFc%" z(?P<http_referer>((?>(?<!\\)(?>"(?>\\.|[^\\"]+)+"|""|(?>'(?>\\.|[^\\']+)+')|''|(?>`(?>\\.|[^\\`]+)+`)|``)))) (?P<useragent>((?>(?<!\\)(?>"(?>\\.|[^\\"]+)+"|""|(?>'(?>\\.|[^\\']+)+')|''|(?>`(?>\\.|[^\\`]+)+`)|``))))zfoo(?<=foo)zfoo(?<!foo)zfoo(?<=foo|x)zfoo(?<!foo|x)z0(?(?=.*\!.*)(?P<true>.*\!\w*\:.*)|(?P<false>.*))ro  z\w*(ea)\w*|\w*e(?!a)\w*Zeasier)eaz(^1234$){i,d}Z12234z(^1234$){s,i,d}z(^123$){s,i,d}Zxxxxxxxx123)r   rR   )r   r  r   za?yzZxxxxyz)r   r   z(?:(?![a-d]).)+z.(?(DEFINE)(?P<mydef>(?:(?![a-d]).)))(?&mydef)+z((\w{1,3})(\.{2,10})){1,3}z("Erm....yes. T..T...Thank you for that."zErm....ZErmz....zT...Trr  z((\w{1,3})(\.{2,10})){3}z((\w{1,3})(\.{2,10})){2}z((\w{1,3})(\.{2,10})){1})r  )zT..r  r  r  z(?:ESTONIA(?!\w)){e<=1}zESTONIAN WORKERSZESTONIANz(?:ESTONIA(?=\W)){e<=1}z(?:(?<!\w)ESTONIA){e<=1}zBLUB NESTONIAZNESTONIAz(?:(?<=\W)ESTONIA){e<=1}z(?r)(?:ESTONIA(?!\w)){e<=1}z(?r)(?:ESTONIA(?=\W)){e<=1}z(?r)(?:(?<!\w)ESTONIA){e<=1}z(?r)(?:(?<=\W)ESTONIA){e<=1}z(?:A.*B.*CDE){e<=2}zA B CYZz(?:A.*B.*?CDE){e<=2}z(?:A.*?B.*CDE){e<=2}z(?:A.*?B.*?CDE){e<=2}z ,0A[)r  Zliteral_spacesz\ \,0A\[z \,0A\[z\ ,0A\[z ,0A\[z(?(?=A)A|B)r  z
(?(?=A)A|)r/   z
(?(?=X)X|)z(?(?=X))z(?(DEFINE)(?<func>.))(?&func)r   funcz!(?(DEFINE)(?<func>.))(?=(?&func))z#(?(DEFINE)(?<func>.)).(?<=(?&func))zab(?#comment\))cdz[a-z]+ [a-z]*?:r  z(?r):[a-z]*? [a-z]+z(?u)\p{Script:Beng}u   ৯z(?u)\p{Script:Bengali}z!(?u)\p{Script_Extensions:Bengali}z(?u)\p{Script_Extensions:Beng}z(?u)\p{Script_Extensions:Cakm}z(?u)\p{Script_Extensions:Sylo}z(?u)\p{scx:Latin}rZ  z(?u)\p{scx:Ahom}z(?u)\p{scx:Common}4z(?u)\p{scx:Caucasian_Albanian}z(?u)\p{scx:Arabic}u   تz(?u)\p{scx:Balinese}z(?u)\p{scx:Devanagari}u   जz(?u)\p{scx:Batak}z(?P<x>.)*(?&x)r  z(?P<x>.)(?P<x>.)(?P<x>.)r   z(?:ab)*Zababz(?:ab)*?z(?:ab)*+z(?:ab)+z(?:ab)+?z(?:ab)++z(?r)(?:ab)*z(?r)(?:ab)*?z(?r)(?:ab)*+z(?r)(?:ab)+z(?r)(?:ab)+?z(?r)(?:ab)++r-   za*?za*+r6   za+?za++z(?r)a*z(?r)a*?z(?r)a*+z(?r)a+z(?r)a+?z(?r)a++z(?:\s*\w+'*)+Zwhateveraz  (?P<termini5>GGCGTCACACTTTGCTATGCCATAGCAT[AG]TTTATCCATAAGATTAGCGGATCCTACCTGACGCTTTTTATCGCAACTCTCTACTGTTTCTCCATAACAGAACATATTGACTATCCGGTATTACCCGGCATGACAGGAGTAAAA){e<=1}(?P<gene>[ACGT]{1059}){e<=2}(?P<spacer>TAATCGTCTTGTTTGATACACAAGGGTCGCATCTGCGGCCCTTTTGCTTTTTTAAGTTGTAAGGATATGCCATTCTAGA){e<=0}(?P<barcode>[ACGT]{18}){e<=0}(?P<termini3>AGATCGG[CT]AGAGCGTCGTGTAGGGAAAGAGTGTGG){e<=1}A?  GCACGGCGTCACACTTTGCTATGCCATAGCATATTTATCCATAAGATTAGCGGATCCTACCTGACGCTTTTTATCGCAACTCTCTACTGTTTCTCCATAACAGAACATATTGACTATCCGGTATTACCCGGCATGACAGGAGTAAAAATGGCTATCGACGAAAACAAACAGAAAGCGTTGGCGGCAGCACTGGGCCAGATTGAGAAACAATTTGGTAAAGGCTCCATCATGCGCCTGGGTGAAGACCGTTCCATGGATGTGGAAACCATCTCTACCGGTTCGCTTTCACTGGATATCGCGCTTGGGGCAGGTGGTCTGCCGATGGGCCGTATCGTCGAAATCTACGGACCGGAATCTTCCGGTAAAACCACGCTGACGCTGCAGGTGATCGCCGCAGCGCAGCGTGAAGGTAAAACCTGTGCGTTTATCGATGCTGAACACGCGCTGGACCCAATCTACGCACGTAAACTGGGCGTCGATATCGACAACCTGCTGTGCTCCCAGCCGGACACCGGCGAGCAGGCACTGGAAATCTGTGACGCCCTGGCGCGTTCTGGCGCAGTAGACGTTATCGTCGTTGACTCCGTGGCGGCACTGACGCCGAAAGCGGAAATCGAAGGCGAAATCGGCGACTCTCATATGGGCCTTGCGGCACGTATGATGAGCCAGGCGATGCGTAAGCTGGCGGGTAACCTGAAGCAGTCCAACACGCTGCTGATCTTCATCAACCCCATCCGTATGAAAATTGGTGTGATGTTCGGCAACCCGGAAACCACTTACCGGTGGTAACGCGCTGAAATTCTACGCCTCTGTTCGTCTCGACATCCGTTAAATCGGCGCGGTGAAAGAGGGCGAAAACGTGGTGGGTAGCGAAACCCGCGTGAAAGTGGTGAAGAACAAAATCGCTGCGCCGTTTAAACAGGCTGAATTCCAGATCCTCTACGGCGAAGGTATCAACTTCTACCCCGAACTGGTTGACCTGGGCGTAAAAGAGAAGCTGATCGAGAAAGCAGGCGCGTGGTACAGCTACAAAGGTGAGAAGATCGGTCAGGGTAAAGCGAATGCGACTGCCTGGCTGAAATTTAACCCGGAAACCGCGAAAGAGATCGAGTGAAAAGTACGTGAGTTGCTGCTGAGCAACCCGAACTCAACGCCGGATTTCTCTGTAGATGATAGCGAAGGCGTAGCAGAAACTAACGAAGATTTTTAATCGTCTTGTTTGATACACAAGGGTCGCATCTGCGGCCCTTTTGCTTTTTTAAGTTGTAAGGATATGCCATTCTAGACAGTTAACACACCAACAAAGATCGGTAGAGCGTCGTGTAGGGAAAGAGTGTGGTACCi  z)(?e)(dogf(((oo){e<1})|((00){e<1}))d){e<2}Zdogfoodr  Zdogfootr  u   👨‍👩‍👧‍👦z(?=a)az(?!b)az
((\d)*?)*?zX(?(DEFINE)(?<mydef>(?<wrong>THIS_SHOULD_NOT_MATCHx?)|(?<right>right))).*(?<=(?&mydef).*)zx rightr  )ZmydefZwrongr  z(?:cat){e<=1:[u]}cutz(?:cat){e<=1:u}z?(?be)(AGTGTTCCCCGCGCCAGCGGGGATAAACCG){s<=5,i<=5,d<=5,s+i+d<=10}ZTTCCCCGCGCCAGCGGGGATAAACCG)r   r2   r3   r  z	(?:bc){e})r2   r   r2   z(?e)(?:bc){e}r  z(?b)(?:bc){e}z,(?e)(?:^(\$ )?\d{1,3}(,\d{3})*(\.\d{2})$){e}z$ 10,112.111.12)r   r   r  z/(?e)(?:^(\$ )?\d{1,3}(,\d{3})*(\.\d{2})$){s<=1}z9(?e)(?:^(\$ )?\d{1,3}(,\d{3})*(\.\d{2})$){s<=1,i<=1,d<=1}z/(?e)(?:^(\$ )?\d{1,3}(,\d{3})*(\.\d{2})$){s<=3}z$ 10,1a2.111.12)r   r   r   z/(?e)(?:^(\$ )?\d{1,3}(,\d{3})*(\.\d{2})$){s<=2}z(?e)(?:0?,0(?:,0)?){s<=1,d<=1}z,0;0z(?e)(?:0??,0(?:,0)?){s<=1,d<=1}z#\b(?e)(?:\d{6,20}){i<=5:[\-\\\/]}\bz-cat dog starting at 00:01132.000. hello worldz(?#)z(?x)(?#)z(\d+){i<=2:[ab]}Z123X4Y5)r  r  5z(?i)(\d+){i<=2:[ab]}z^(test){e<=5}$Zterstin)r   r3   r   z(?:(x*)\1\1\1)*x$z(?:(x*)\1{3})*x$zt(?:es){s<=1:\d}tZte5tZteztzt(?:es){i<=1:\d}tZtes5tZtesztr3   zt(es){i<=1,0<e<=1}tzt(?:es){i<=1,0<e<=1:\d}tz(\d+ week|\d+ days)7 days)r   r  r   10 days)r   r  r   z[ ]* Name[ ]*\* z  Name *za|\.*pb\.pyz.geojsa?  (?<=(?:\A|\W|_))(\d+ decades? ago|\d+ minutes ago|\d+ seconds ago|in \d+ decades?|\d+ months ago|in \d+ minutes|\d+ minute ago|in \d+ seconds|\d+ second ago|\d+ years ago|in \d+ months|\d+ month ago|\d+ weeks ago|\d+ hours ago|in \d+ minute|in \d+ second|in \d+ years|\d+ year ago|in \d+ month|in \d+ weeks|\d+ week ago|\d+ days ago|in \d+ hours|\d+ hour ago|in \d+ year|in \d+ week|in \d+ days|\d+ day ago|in \d+ hour|\d+ min ago|\d+ sec ago|\d+ yr ago|\d+ mo ago|\d+ wk ago|in \d+ day|\d+ hr ago|in \d+ min|in \d+ sec|in \d+ yr|in \d+ mo|in \d+ wk|in \d+ hr)(?=(?:\Z|\W|_))z1 month agoz9 hours 1 minute agoz1 minute agoz10 months 1 hour agoz
1 hour agoz1 month 10 hours agoz10 hours agoZ2TTCAGACGTGTGCTCTTCCGATCTCAATACCGACTCCTCACTGTGTGTCTzw(?P<insert>.*)(?P<anchor>CTTCC){e<=1}(?P<umi>([ACGT]){4,6})(?P<sid>CAATACCGACTCCTCACTGTGT){e<=2}(?P<end>([ACGT]){0,6}$))r   2   ZTTCAGACGTGTGCTZCTTCCZGATCTZCAATACCGACTCCTCACTGTGTZGTCT)insertanchorZumiZsidrJ  zt(?P<insert>.*)(?P<anchor>AACACTGG){e<=1}(?P<umi>([AT][CG]){5}){e<=2}(?P<sid>GTAACCGAAG){e<=2}(?P<end>([ACGT]){0,6}$)Z&GGAAAACACTGGTCTCAGTCTCGTAACCGAAGTGGTCGZ&GGAAAACACTGGTCTCAGTCTCGTCCCCGAAGTGGTCGr     z(test1)|(test2)zmatched: \1\2Ztest1zmatched: test1zmatched: {1}{2}z(?:\bha\b){i:[ ]}Zhavingz	(?a:\w)\wu   dжz(?a:\w)(?u:\w)z	^\p{LC}+$u   😺z	^\p{So}+$r  )r   r  r   z\p{HorizSpace}+u4   	   ᠎             　z\p{VertSpace}+u   
  z(?(?<=A)|(?(?![^B])C|D))z^a?(a?)b?c\1$Zabcar  z(?(?=a).|..)z(?(?=b).|..)z(?(?!a).|..)z(?(?!b).|..))8r%   r   r'   r(   ZV1r)   r}  r7   re   r   r   r9   rV   r8   rj   r   UNDEF_CHAR_NAMEr  rv  Z	BESTMATCHr  r[   ZWORDspansry  r'  ZFULLCASEr   r.  r   r   r	  r  DEBUGr  r(  r,  r  r  r  r:  pickledumpsloadsr  ZENHANCEMATCHr   r,  r  r  r   ZV0r   r  ZallcapturesZallspans)r
   Zfzseqrxr   rawr  r%  Z
TEST_REGEXZ	TEST_DATAr  r   Zupper_iZlower_irN   Zpy_regex_patternrg   rG   sequencer   r   r   test_hg_bugs  s  











































  

  








	

""(($"&&zRegexTests.test_hg_bugsc                 C   s  |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttd	dd |  ttd
dd |  ttd	dd |  ttd
dd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttdd d |  ttd!d"d |  ttd!d#d |  ttdd$d |  ttdd%d |  ttd&d'd |  ttd&d(d d S ))Nz(?r)(?:a){e<=1:[a-z]}r  Tz(?:a){e<=1:[a-z]}r   Fr  rG  z(?:ab){e<=1:[a-z]}z(?r)(?:ab){e<=1:[a-z]}z(a)\1{e<=1:[a-z]}z(?r)\1{e<=1:[a-z]}(a)r  rH  z4(?fiu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}tsstz5(?firu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}z-szs-z4(?fiu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}ZssstZsstsz5(?firu)\1{e<=1:[a-z]}(\N{LATIN SMALL LETTER SHARP S})ZstssZtssszss-szsss-z5(?firu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}z(?fiu)(ss)\1{e<=1:[a-z]}u   ßtsu   ßstz(?firu)\1{e<=1:[a-z]}(ss)u   stßu   tsßu   ß-su   ßs-z(?firu)(ss)\1{e<=1:[a-z]}u   s-ßu   -sßr  r:   r   r   r   test_fuzzy_ext  sh  zRegexTests.test_fuzzy_extc                 C   s   |  tdddd |  tdddd |  tdddd |  tdddd |  tdddd |  tdddd d S )Nz	(?P<x>.)+r   z{0} {0[0]} {0[-1]}zabc abc abcz0{1} {1[0]} {1[1]} {1[2]} {1[-1]} {1[-2]} {1[-3]}zc a b c c b az0{x} {x[0]} {x[1]} {x[2]} {x[-1]} {x[-2]} {x[-3]})r%   r'   r9   r  r  r:   r   r   r   test_subscripted_capturesA  s@   




z$RegexTests.test_subscripted_capturesc                 C   s   t jdkrL| tddg d | tdddd | tddg d | dd	 tddD g d
 | dd	 tddD g d d S d S )Nr   z\b|:+za::bc)r   rN   r   r   r   r   r   z-a---bc-)r   r   r   r   r   c                 S   r  r   r  r   r   r   r   r   [  r|  z2RegexTests.test_more_zerowidth.<locals>.<listcomp>)r/   r  r1   r  r  r  c                 S   r  r   r  r   r   r   r   r   ]  r|  z
(?m)^\s*?$z	foo


bar)r  )r   r  r*  )r   r   r%   r'   r   r[   r)   r}  r:   r   r   r   test_more_zerowidthT  s   
zRegexTests.test_more_zerowidthc                 C   s4   |  tddg d |  tddg d d S )Nz\Ru   

  )ra   rJ   r     u    u    s   \Rs   

)s   
rZ            r   r:   r   r   r   test_line_ending`  s   zRegexTests.test_line_endingr   )r   r   r   ro   rl   r   r   r   r   r   r   rt  rv  rE  rS  r  r  r  r  r  r  rs  ru  rw  rx  ry  rz  ZDUPLICATE_GROUPZCANT_TURN_OFFr  r&   r,   r;   r>   r]   r`   rb   rm   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r
  r  r  r  r   r"  r$  r*  r-  r3  r5  rD  rF  rK  rO  rT  rW  r[  r\  rm  rr  rt  rv  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r&  r+  r-  r<  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r%  r(  r)  r+  r2  r   r   r   r   r      s&   
9	3%!X			" 9b:	0*6M     d	6 BG+L5         fXr   c                   C   s   t jdd d S )Nr   )	verbosity)unittestmainr   r   r   r   	test_mainf  r   r6  __main__)weakrefr   r  r  r'   r   r   r4  r=   r   r,  r   ZTestCaser   r6  r   r   r   r   r   <module>   s`                                      v
