U
    9%e\                    @   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re  dS )    )proxyNc                       s   e Zd Z fddZ  ZS )StrSubclassc                    s   t t |S N)r   super__getitem__selfindex	__class__ O/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/regex/test_regex.pyr      s    zStrSubclass.__getitem____name__
__module____qualname__r   __classcell__r   r   r
   r   r   
   s   r   c                       s   e Zd Z fddZ  ZS )BytesSubclassc                    s   t t |S r   )r   r   r   r   r
   r   r   r      s    zBytesSubclass.__getitem__r   r   r   r
   r   r      s   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 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                    sH   t |ttfr.t| |D ]\}}|| qn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   s6   d}t d}t|}|d|dkr2|   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   r/   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   r.   )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 24x100yr/   z9.3 -3 23x99y.c                 S   s   dS )N\nr   mr   r   r   <lambda>Y       z1RegexTests.test_basic_regex_sub.<locals>.<lambda>r@   
(?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:   chrr6   r   r   r   test_basic_regex_subR   sH    zRegexTests.test_basic_regex_subc                 C   s   |  tdddd d S )NrH   z\g<1>\g<1>\brG   zxxxxr!   r#   rV   r6   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\nr@   z
abc
def
zabc
def

rE   rY   r6   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 )Nr?   c                      s   t  dt jS NrS   )r#   r5   Ir   patternr   r   rC      rD   z*RegexTests.test_bug_1661.<locals>.<lambda>c                      s   t  dt jS r]   r#   r3   r^   r   r_   r   r   rC      rD   c                      s   t  dt jS r]   )r#   r%   r^   r   r_   r   r   rC      rD   c                      s   t  t jS r   )r#   r$   r^   r   r_   r   r   rC      rD   )r#   r$   assertRaisesRegex
ValueErrorFLAGS_WITH_COMPILED_PATr6   r   r_   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_CLASSr6   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\111r^   z\117Oz\1111ZI1z\00z\07z\08\09z\0az az\400u   Āz\777u   ǿrT   s   \400    s   \777   c                   S   s   t dddS )Nr   \1r#   rV   r   r   r   r   rC      s    z=RegexTests.test_sub_template_numeric_escape.<locals>.<lambda>c                   S   s   t dddS )Nr   z\8rr   r   r   r   r   rC      s    c                   S   s   t dddS )Nr   z\9rr   r   r   r   r   rC      s    c                   S   s   t dddS )Nr   \11rr   r   r   r   r   rC      s    c                   S   s   t dddS )Nr   z\18rr   r   r   r   r   rC      s    c                   S   s   t dddS )Nr   z\1arr   r   r   r   r   rC      s    c                   S   s   t dddS )Nr   z\90rr   r   r   r   r   rC      s    c                   S   s   t dddS )Nr   z\99rr   r   r   r   r   rC      s    c                   S   s   t dddS )Nr   \118rr   r   r   r   r   rC      s    c                   S   s   t dddS )Nr   \11arr   r   r   r   r   rC      s    c                   S   s   t dddS )Nr   z\181rr   r   r   r   r   rC      s    c                   S   s   t dddS )Nr   z\800rr   r   r   r   r   rC      s    z(((((((((((x)))))))))))rs   z((((((((((y))))))))))(.)rt   xyzZxz8ru   Zxza)r!   r#   rV   rb   errorINVALID_GROUP_REFr6   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 )NrI   baaaaaZbbbbbr.   ZbaaaarY   r6   r   r   r   test_qualified_re_sub   s    z RegexTests.test_qualified_re_subc                 C   s   |  tdddd d S )Nz(\S)\s+(\S)z\1 \2zhello  therezhello thererY   r6   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r/   rP   r   z(?V0)x*-Zabxdz-a-b--d-z-a-b-d-z(?V1)x*r,   zab-dsysversion_infor!   r#   rV   r6   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)abcrI   )r!   r#   r3   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   s   t dddS )NrF   z\g<arG   rr   r   r   r   r   rC      s    z/RegexTests.test_symbolic_refs.<locals>.<lambda>c                   S   s   t dddS )NrF   z\g<rG   rr   r   r   r   r   rC      s    c                   S   s   t dddS )NrF   \grG   rr   r   r   r   r   rC      s    c                   S   s   t dddS )NrF   z\g<a a>rG   rr   r   r   r   r   rC      s    c                   S   s   t dddS )NrF   z\g<1a1>rG   rr   r   r   r   r   rC      s    c                   S   s   t dddS )NrF   z\g<ab>rG   rr   r   r   r   r   rC      s    z(?P<a>x)|(?P<b>y)z\g<b>rG    z\2c                   S   s   t dddS )NrF   z\g<-1>rG   rr   r   r   r   r   rC      s    )rb   r#   rw   
MISSING_GTMISSING_GROUP_NAME
MISSING_LTBAD_GROUP_NAME
IndexErrorUNKNOWN_GROUP_Ir!   rV   r6   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<   )r=      zb+)zx BBBBr.   rv   )rv   r   zb*)Zxxxyxzx   r   )Zxxxyzr   )r!   r#   subnr6   r   r   r   test_re_subn   s
    zRegexTests.test_re_subnc                 C   sR  |  tdddddddg tjdkr|  tddddddddddg |  td	ddddddddddd
dddddg |  tddddddddddg |  tdddddd dddd dddd dd dg n||  tddddddg |  td	ddddddd
dg |  tddddddg |  tdddddddddg |  tdddddddg |  tdddd ddd dddd dd d
dg |  tdddddddg |  tddddddg |  dd tddD ddddg |  tddddddg |  dd tddD ddddg |  tddddd ddd ddd dg
 |  dd tddD ddd ddd ddd dg
 |  tddddd ddd ddd dg
 |  dd tddD ddd ddd ddd dg
 |  tdddddddddg |  tddddd dg |  td!ddd"d#dg d S )$N::a:b::cr   rI   rz   cr~   :*(:*)::z(?::*)z(:)*z([b:]+)z:b::z(b)|(:+)z(?:b)|(?::+)r   xaxbxcc                 S   s   g | ]}|qS r   r   .0rB   r   r   r   
<listcomp>  s     z,RegexTests.test_re_split.<locals>.<listcomp>z(?r)xc                 S   s   g | ]}|qS r   r   r   r   r   r   r     s     z(x)|(y)c                 S   s   g | ]}|qS r   r   r   r   r   r   r   $  s     z(?r)(x)|(y)c                 S   s   g | ]}|qS r   r   r   r   r   r   r   )  s     (?V1)\bza b c z(?V1)\ma zb z(?V1)\M bz c)r!   r#   splitr   r   	splititerr6   r   r   r   test_re_split   s    
                                                             zRegexTests.test_re_splitc                 C   s   |  tddddddg |  tdddddd	g |  td
dddddddg tjdkr|  tddddddddg n |  tddddddddg d S )Nr   r   r   r   rI   zb::cza:b:c:drz   zc:dz(:)r~   r   za:b::c)r!   r#   r   r   r   r6   r   r   r   test_qualified_re_split3  s    
  z"RegexTests.test_qualified_re_splitc                 C   s  |  tddg  |  tdddddg |  tdddddg |  tdd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 |  tdddg d S )N:+r   
a:b::c:::dr   r   :::(:+)(:)(:*)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%   r6   r   r   r   test_re_findall@  sF     



zRegexTests.test_re_findallc                 C   s   |  tdddddg d S )Nz(a|(b))abarI   r   )rz   rz   r   r6   r   r   r   test_bug_117612Y  s    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 )NrI   rI   (a)rI   rI   r   r.   z((a)|(b))(c)?)rI   rI   rI   NNrz   )rz   rz   Nrz   Nac)r   rI   rI   Nr   bc)r   rz   Nrz   r   z!(?:(?P<a1>a)|(?P<b2>b))(?P<c3>c)?r   r/   )rI   NNZa1b2c3)Nrz   NrI   Nr   )r!   r#   r5   r   r$   )r   patrB   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   (rI   rI   rI   NrI   za)z(az^(?:(a)|c)((?(1)b|d))$ab)r   rI   rz   cd)r   Ndz^(?:(a)|c)((?(1)|d))$)rI   rI   r   z(?P<g1>a)(?P<g2>b)?((?(g2)c|d))r   )r   rI   rz   r   ad)r   rI   Nr   abdr   )r!   r#   r5   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   |rI   z^(\|)?([^()]+)\1?$rI   r   za|z|az^(?:(a)|c)(\1)$aa)r   rI   rI   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)ZTESTz BESTz LESTr   z123 )r!   r#   r5   r%   r6   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#   r5   	groupdictr6   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#   r5   expandr6   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}$r.   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#   r5   boolr6   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)r.   )r   otherr   rI   r   zb(c)abcdef   r-   r   r/   r   r.   r   zabc(?P<n>def)n)r!   r#   r$   r`   flagsr^   UDEFAULT_VERSIONrS   groups
groupindexr5   posendposr3   r4   stringregsrf   r   rerg   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 bxr.   Z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#   r3   LOCALEUNICODEMr6   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   ∢r.   r   r?   u   eèéêëēěėr   z%[e\xe8\xe9\xea\xeb\u0113\u011b\u0117]z*e|\xe8|\xe9|\xea|\xeb|\u0113|\u011b|\u0117)r!   r#   r5   r   joinr%   r6   r   r   r   test_bigcharset  s8       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#   r5   DOTALLr6   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 br.   rI   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#   r5   r6   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 bbr.   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#   r5   r^   r4   r   r6   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|   qq|  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SSTr-   z(?fi)FFIu   ﬃu   ﬀiu   fﬁz!(?fi)\N{LATIN SMALL LIGATURE FFI}ZFFIr1   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#   r3   r4   r5   r&   r   r%   )r   sigmach1ch2r   r   r   test_case_foldingH  sN   





















 zRegexTests.test_case_foldingc                 C   s   |  tddd d d S )Nz(\s)r   r.   r   r6   r   r   r   test_category  s    zRegexTests.test_categoryc                 C   s4   |  tddd d |  tddd d d S )Nz\s([^a])r   r.   rz   z	\s([^a]*)z bbZbbr!   r#   r3   r6   r   r   r   test_not_literal  s    zRegexTests.test_not_literalc                 C   s4   |  tddd d |  tddd d d S )Nz\s(b)r   r.   rz   za\sr   r   r  r6   r   r   r   test_search_coverage  s    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rangerW   r   r5   r4   r$   )r   r   ir   r   r   r   test_re_escape  s      zRegexTests.test_re_escapec              	   C   s   d}|  t|| tddD ]R}t|g}||7 }|  ttt||d |  tt|| d q tt|}|  || d d S )NrD   r   r  Tr   r  )	r!   r#   r  r  bytesr   r5   r4   r$   )r   r   r  rz   r   r   r   r   test_re_escape_byte  s    
 zRegexTests.test_re_escape_bytec                 C   sh   t jt jkr|   t jt jkr(|   t jt jkr<|   t jt j	krP|   t j
t jkrd|   d S r   )r#   r^   
IGNORECASEr&   Lr   r   	MULTILINESr   rQ   VERBOSEr6   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#   r^   r   rQ   r  r  r!   rf   r   r$   rg   )r   flagr   r   r   
test_flags  s    zRegexTests.test_flagsc              	   C   s   dD ]}|  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   s   t ddS )Nz\911r   r#   r5   r   r   r   r   rC     s    z8RegexTests.test_sre_character_literals.<locals>.<lambda>)r!   r   r#   r5   rW   rb   rw   rx   r   r  r   r   r   test_sre_character_literals  s       z&RegexTests.test_sre_character_literalsc              	   C   s   d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 |  ttd| t|d q| tj| jd	d
  d S )Nr!  z[\%03o]Tz[\%03o0]z[\%03o8]z[\x%02x]z	[\x%02x0]z	[\x%02xz]c                   S   s   t ddS )Nz[\911]r   r+  r   r   r   r   rC     s    z>RegexTests.test_sre_character_class_literals.<locals>.<lambda>)r!   r   r#   r5   rW   rb   rw   BAD_OCTAL_ESCAPEr,  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)rz   r.   r0  r0  )r!   r#   r5   startendr4   r6   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)?arI   z(a)(b)?br   r.   z(?P<a>a)(?P<b>b)?bz(?P<a>a(b))((a)))r!   r#   r5   	lastindex	lastgroupr6   r   r   r   test_bug_527371  s    zRegexTests.test_bug_527371c                 C   s   |  tj| jdd  d S )Nc                   S   s
   t dS )Nzfoo[a-r#   r$   r   r   r   r   rC     s    z,RegexTests.test_bug_545855.<locals>.<lambda>)rb   r#   rw   BAD_SETr6   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#   r5   r3  r3   r6   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   ‹]r.   )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   r.   z(x)*yr   z(x)*?yr   r6   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dddddddddg	df d S )Nc                 S   s   |S r   r   scannertokenr   r   r   s_ident   rD   z(RegexTests.test_scanner.<locals>.s_identc                 S   s   d| S )Nzop%sr   rD  r   r   r   
s_operator!  rD   z+RegexTests.test_scanner.<locals>.s_operatorc                 S   s   t |S r   )floatrD  r   r   r   s_float"  rD   z(RegexTests.test_scanner.<locals>.s_floatc                 S   s   t |S r   )r8   rD  r   r   r   s_int#  rD   z&RegexTests.test_scanner.<locals>.s_intz[a-zA-Z_]\w*z\d+\.\d*r>   z=|\+|-|\*|/)z\s+Nr   zsum = 3*foo + 312.50 + barsumzop=r/   zop*foozop+g     s@bar)	r#   Scannerr!   rf   r   rE  r`   rg   scan)r   rG  rH  rJ  rK  rE  r   r   r   test_scanner  s4             zRegexTests.test_scannerc                 C   sN   d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)rT  za:rI   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   rz   rI   z^(([ab])|c)*)r   r   rz   z^((d)|[ab])*)r   rz   Nz^((a)c|[ab])*z^((a)|b)*?c)r   rz   rI   z^(([ab])|c)*?dabcd)rW  r   rz   z^((d)|[ab])*?c)r   rz   Nz^((a)c|[ab])*?cr   r6   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rI   rI   Nz(a)((?!(b)*))*)rI   rI   NNr   r6   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    r[  r   rv   )r9   r#   r$   r!   r5   )r   r[  r   r   r   r   test_bug_764548Q  s    zRegexTests.test_bug_764548c                 C   s,   t dd}| dd |D dddg d S )Nr   r   c                 S   s   g | ]}|d  qS r   r   )r   itemr   r   r   r   Y  s     z,RegexTests.test_finditer.<locals>.<listcomp>r   r   r   )r#   finditerr!   )r   itr   r   r   test_finditerW  s    zRegexTests.test_finditerc                 C   s    t dt dkr|   d S )NZ
bug_926075s
   bug_926075)r#   r$   r&   r6   r   r   r   test_bug_926075[  s    zRegexTests.test_bug_926075c                 C   s&   d}|  t|ddddg d S )Nu   [.。．｡]za.b.crI   rz   r   )r!   r#   r$   r   r   r`   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   r.   r   c                      s   t  S r   nextr   r`  r   r   rC   g  rD   z,RegexTests.test_bug_581080.<locals>.<lambda>)
r#   r_  r!   rh  r4   assertRaisesStopIterationr$   rE  r3   )r   rE  r   ri  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                      s   t  S r   rg  r   ri  r   r   rC   q  rD   z,RegexTests.test_bug_817234.<locals>.<lambda>)r#   r_  r!   rh  r4   rj  rk  r6   r   ri  r   test_bug_817234m  s    zRegexTests.test_bug_817234c                 C   sX   dd l }dD ]F}| |}| td|d  | td|dd  d qd S )Nr   ZbBuhHiIlLfds   blarD   r.   r   )arrayr!   r#   r$   r5   )r   ro  typecoderI   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tddd | ttd	dd | td
dd  d S )Ni  i  Tz(?i)z(?iu)(?i)arS   za(?i)z(?iV1)aza(?iV1))rW   r#   r$   r^   r   r!   r   r5   )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#rE   z#
#za#
b#
#za#
b#
c#)r#   r$   r!   rV   r  rc  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 )Nr?      .c                      s
     dS )N   br5   r   r   r   r   rC     s    z2RegexTests.test_bytes_str_mixing.<locals>.<lambda>c                      s
     dS )Nrz   ry  r   bpatr   r   rC     s    c                      s     ddS Nrx  r   rV   r   rz  r   r   rC     s    c                      s     ddS Nrz      cr~  r   rz  r   r   rC     s    c                      s     ddS )Nrx  r  r~  r   rz  r   r   rC     s    c                      s     ddS r}  r~  r   r{  r   r   rC     s    c                      s     ddS r  r~  r   r{  r   r   rC     s    c                      s     ddS Nrz   r   r~  r   r{  r   r   rC     s    c                   S   s   t dt jS )N   \wr#   r$   r   r   r   r   r   rC     s    c                   S   s
   t dS )Ns   (?u)\wr9  r   r   r   r   rC     s    c                   S   s   t dt jt jB S )N\w)r#   r$   r   ASCIIr   r   r   r   rC     s    c                   S   s   t dt jS )Nz(?u)\w)r#   r$   r  r   r   r   r   rC     s    c                   S   s   t dt jS )N(?a)\wr  r   r   r   r   rC     s    c                   S   s
   t dS Nz(?au)\wr9  r   r   r   r   rC     s    )r#   r$   rb   	TypeErrorSTR_PAT_ON_BYTESBYTES_PAT_ON_STRSTR_PAT_BYTES_TEMPLBYTES_PAT_STR_TEMPLrc   BYTES_PAT_UNI_FLAGMIXED_FLAGSr6   r   )r|  r   r   test_bytes_str_mixing  s     

z RegexTests.test_bytes_str_mixingc                 C   sD  dt jfD ]N}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 ]D}t d|t jB }| |d	d  t d
}| |d	d  q| t	| j
dd  d S )Nr      À   àTr  u   (?a)Àr        r  c                   S   s
   t dS r  r9  r   r   r   r   rC     s    z8RegexTests.test_ascii_and_unicode_flag.<locals>.<lambda>)r#   r   r$   r  r!   r   r5   r  rb   rc   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 n2|rD|d |dksD|d |dkrN| d |s^| d n,|d d  dkr| dt|d d   d S )	N(?<a>\w)xyz(Failed: expected match but returned Noner   r.   Failed)r   r   z0Failed: expected "('x', 'x')" but got {} instead)r#   r5   r&   r   formatasciir   rB   r   r   r   test_subscripting_match  s    (
z"RegexTests.test_subscripting_matchc                 C   sF   t dd}t dd}|r8|r8|d d  |d d  ksB| d d S )Nz	(?P<a>\w)r   r  r  )r#   r5   r&   )r   Zm0m1r   r   r   test_new_named_groups  s     z RegexTests.test_new_named_groupsc           	   0   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@d7dd>dAdBdCg |  tdDd@dEdFg |  td<dGdHdIdJdKg |  ttd9d7d dL}dM}tdN }d|dOfdP|dOfd5|dQfdR|dQfd.|dSfdT|dSfd3|dUfdV|dUfdW|dXfdY|dZfd[|d\fd]|d^fd_|d`fda|dbfdcdddedfd|dgfdh|dgfd|difdj|difd|dkfdl|dkfd|dmfdn|dmfdo|dpfdq|drfds|dtfdu|dvfdw|dxfdy|dzfd|dgfd{|dgfd||difd}|difd~|dkfd|dkfd|dmfd|dmfd|dpfd|drfd|dtfd|dvfd|dxfd|dzfg.}|D ]|\}}}z4|d d t|||kr| 	d
| W n: tk
r4 } z| 	d
|t| W 5 d }~X Y nX q|  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}rS   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(  re  r   rR  z\Dz\Sz\Wz\p{L}rI   z\p{Lu}\p{Ll}rr  r   \Xr      àr      aààeéée   é   é\X{3}   aàà   eéé   
́Ár[      ́   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árI   )z\P{InBasicLatin}r     á)z(?i)\p{InBasicLatin}r  rI   )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#   r5   r   r4   r%   setr   r   r&   r  	Exceptionr  )	r   Zchars_uZchars_bZword_settestsr`   charsexpectedr  r   r   r   test_properties  s   
 

2 ,zRegexTests.test_propertiesc                 C   sp   |  tdddg |  tddddg |  tdddddg |  tddd	d
dddddd	g d S )N\w+u    हिन्दी,u   हिन्दीz\W+r   ,r   z(?V1)\Br   u    हu   िu   नu   ्u   दu   ी,)r!   r#   r%   r   r6   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   r6   r   r   r   test_search_anchor  s    zRegexTests.test_search_anchorc              	   C   s  |  tdddddg |  tjdddddddg |  tdd	d
dg |  tjdd	ddd
dddg |  tjddddddg |  dd tddD dddg |  dd tjdd	ddD d
dddg |  dd tddD dddg |  dd tjdd	ddD d
dddg |  tdddddg |  tdddddg |  tdddddg |  tdddddg |  dd tddD dddg |  d d tddD dddg |  d!d tddD dddg |  d"d tddD dddg |  td#d$ddg |  td%d&ddg |  td'd$g  |  td(d$d)g |  td*d+d,dddg |  td-d+d,dddg |  td.d+ddd,dg |  td/d+ddd,dg |  tjd0d&d1d2d3ddg |  tjd0d&d1d4d3ddg |  d5d tjd0d&d1d2d3D ddg |  d6d tjd0d&d1d4d3D ddg |  d7d tjdd&d1d2d3D ddg |  d8d tjdd&d1d4d3D ddg |  tjdd&d1d2d3ddg |  tjdd&d1d4d3ddg |  td9d: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>d?d@dAg |  tdBd?dCdDg |  dEd td=dD dg |  dFd tjd=dddD ddg |  dGd td>d?D dHdIg |  dJd tdBd?D dKdLg |  tdMdM dN |  tdOdM dN |  tdPdQ dN |  tdRdQ dN |  tdSdTdd |  tdUdTdd d S )VNz(?r).r   r   rz   rI   TZ
overlapped(?r)..abcder=  r   r   r   (?r)(.)(-)(.)a-b-crz   r   r   rI   r   rz   c                 S   s   g | ]}|d  qS r]  r   r   r   r   r   r     s     z2RegexTests.test_search_reverse.<locals>.<listcomp>c                 S   s   g | ]}|d  qS r]  r   r   r   r   r   r     s     c                 S   s   g | ]}|d  qS r]  r   r   r   r   r   r     s     c                 S   s   g | ]}|d  qS r]  r   r   r   r   r   r     s     ^|\w+foo barr   rM  rN  
(?V1)^|\w+	(?r)^|\w+(?rV1)^|\w+c                 S   s   g | ]}|d  qS r]  r   r   r   r   r   r     s     c                 S   s   g | ]}|d  qS r]  r   r   r   r   r   r     s     c                 S   s   g | ]}|d  qS r]  r   r   r   r   r   r     s     c                 S   s   g | ]}|d  qS r]  r   r   r   r   r   r     s     r  r  z.{2}(?<=\G.*)rW  z(?r)\G\w{2}z(?r)\w{2}\Gefzq*ZqqweZqqz(?V1)q*z(?r)q*z(?rV1)q*r?   r.   r/   r   r   r0  c                 S   s   g | ]}|d  qS r]  r   r   r   r   r   r     s     c                 S   s   g | ]}|d  qS r]  r   r   r   r   r   r     s     c                 S   s   g | ]}|d  qS r]  r   r   r   r   r   r     s     c                 S   s   g | ]}|d  qS r]  r   r   r   r   r   r     s     z[ab]ZaB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   s   g | ]}|d  qS r]  r   r   r   r   r   r     s     c                 S   s   g | ]}|d  qS r]  r   r   r   r   r   r   
  s     c                 S   s   g | ]}|d  qS r]  r   r   r   r   r   r     s     r   zthird fourthc                 S   s   g | ]}|d  qS r]  r   r   r   r   r   r     s     zfourth fifthzsecond thirdr   r  z
(?r)abcdefz
(?i)abcdefABCDEFz(?ir)abcdef(.)rq   (?r)(.))r!   r#   r%   r_  r^   r3   r4   rV   r6   r   r   r   test_search_reverse  s*    
 
 
 

zRegexTests.test_search_reversec                 C   s   |  tddd  d S )Nz(?>a*)ar   r  r6   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?arI   r   za*ar0   r1   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#   r3   r4   r6   r   r   r   test_possessive  s     zRegexTests.test_possessivec                 C   s*  t jdkr*| tdddddddg n| tdddg | tdddddddg | td	d
dddg | dd td	d
D dddg | tdd
dddg | dd tdd
D dddg | tdd
dddg | dd tdd
D dddg | tdd
dddg | dd tdd
D dddg t jdkr| tddddddddddg | dd tddD ddddddddg n6| tdddg | dd tddD dg t jdkrL| tddddddddddg | dd tddD ddddddddg n6| tdddg | dd tddD dg | tddddddddddg | dd tddD ddddddddg | tddddddddddg | d d tddD ddddddddg d S )!Nr~   z\br   r   rI   r   rz   r   r  r  rM  rN  c                 S   s   g | ]}|d  qS r]  r   r   r   r   r   r   F  s     z-RegexTests.test_zerowidth.<locals>.<listcomp>r  c                 S   s   g | ]}|d  qS r]  r   r   r   r   r   r   J  s     r  c                 S   s   g | ]}|d  qS r]  r   r   r   r   r   r   N  s     r  c                 S   s   g | ]}|d  qS r]  r   r   r   r   r   r   R  s     r   r   r   c                 S   s   g | ]}|qS r   r   r   r   r   r   r   X  s     c                 S   s   g | ]}|qS r   r   r   r   r   r   r   \  s     z(?r)c                 S   s   g | ]}|qS r   r   r   r   r   r   r   b  s     c                 S   s   g | ]}|qS r   r   r   r   r   r   r   f  s     z(?V1)c                 S   s   g | ]}|qS r   r   r   r   r   r   r   k  s     z(?rV1)c                 S   s   g | ]}|qS r   r   r   r   r   r   r   p  s     )r   r   r!   r#   r   r%   r_  r   r6   r   r   r   test_zerowidth9  s    
                                zRegexTests.test_zerowidthc                 C   s   |  tdd d |  tdd d |  tdd d |  tddd  | tj| j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A(?iV1)bc                   S   s   t jddt jdS )Nz	(?V0-i)Abr   r   ra   r   r   r   r   rC   z  s    z9RegexTests.test_scoped_and_inline_flags.<locals>.<lambda>z(?V0)Abz(?V1)Abz	(?V1-i)Abr   z(?-i:A)bz	A(?V1-i)b)r!   r#   r3   r4   rb   rw   CANT_TURN_OFFr^   r6   r   r   r   test_scoped_and_inline_flagss  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+)+r0   r1   z(?:(?:ab)+c)+abcabcr  z
(?:a+){2,}r  r6   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r.   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#   r3   r4   r   r5   rf   r   r$   rg   r6   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rp| 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   r6   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   s   d| j  d S N<>r7  rA   r   r   r   rC     rD   z+RegexTests.test_bug_10328.<locals>.<lambda>zfoobar )z%foobar<trailing_ws><no_final_newline>r   c                 S   s   d| j  d S r  r  rA   r   r   r   rC     rD   )zfoobar<trailing_ws>r.   c                 S   s   g | ]}|  qS r   r   r   r   r   r   r     s     z-RegexTests.test_bug_10328.<locals>.<listcomp>r   r   zD(?mV1)(?P<trailing_ws>[ \t]+\r*$)|(?P<no_final_newline>(?<=[^\n])\Z)c                 S   s   d| j  d S r  r  rA   r   r   r   rC     rD   c                 S   s   g | ]}|  qS r   r  r   r   r   r   r     s     )r#   r$   r   r   r!   r   r_  rA  r   r   r   test_bug_10328  s0    


zRegexTests.test_bug_10328c                 C   st  |  tddddg |  tjddddddddg |  td	dddg |  tjd	dddddddg |  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 ddddg |  dd td	dD ddg |  dd tjd	dddD ddddg |  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  z	(.)(-)(.)r  r  r  c                 S   s   g | ]}|d  qS r]  r   r   r   r   r   r     s     z.RegexTests.test_overlapped.<locals>.<listcomp>c                 S   s   g | ]}|d  qS r]  r   r   r   r   r   r     s     c                 S   s   g | ]}|d  qS r]  r   r   r   r   r   r     s     c                 S   s   g | ]}|d  qS r]  r   r   r   r   r   r     s     c                 S   s   g | ]}|  qS r   r   r   r   r   r   r     s     c                 S   s   g | ]}|  qS r   r  r   r   r   r   r     s     r  )r!   r#   r%   r_  r6   r   r   r   test_overlapped  sR      


  zRegexTests.test_overlappedc                 C   sJ   |  tdddddddg |  dd tddD dddddg d S )	Nr  za,b,,c,rI   rz   r   r   c                 S   s   g | ]}|qS r   r   r   r   r   r   r     s     z-RegexTests.test_splititer.<locals>.<listcomp>)r!   r#   r   r   r6   r   r   r   test_splititer  s       zRegexTests.test_splititerc              	   C   s   |  tdd d |  tdd d |  tddddddd	d
g |  tddddg |  tddddddg d S )Nr  r  r   r  r   r  rI   r  r  r  r  r  r  r  r  r[   r  r  )r!   r#   r5   r4   r%   r6   r   r   r   test_grapheme   s$    
 

zRegexTests.test_graphemec                 C   s$  d}|  td|ddddddd	d
dddddddddddddddg |  td|dddddddddddd
dddddddddddddg d}|  td|dddd
dg |  td|dddd
dg d}|  td|dddddd dd!dd"dd#dg |  td|dddd$dd%dg d S )&Nz4The quick ("brown") fox can't jump 32.3 feet, right?r   r   ZTher   Zquickz ("Zbrownz") ZfoxZcan'tZjumpZ32r?   3feet, rightrR  z(?V1w)\br   ")zcan'tz32.3r  zThe  foxz  zcan't aujourd'hui l'objectifZaujourdZhuilZobjectifzaujourd'huiz
l'objectif)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)^abcr.   z	(?mw)^abc(?m)abc$z	(?mw)abc$)r!   r#   r%   r3   r2  r6   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   )rI   rz   Nr   Zacd)rI   Nr   r   z(a)(?:(b)|(c))(d)z(a)(?|(b)|(b))(d))rI   rz   r   z(?|(?<a>a)|(?<b>b))(c)z(?|(?<a>a)|(?<a>b))(c))rI   r   )rz   r   z$(?|(?<a>a)(?<b>b)|(?<b>c)(?<a>d))(e)Zabe)rI   rz   r  r<  )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)rI   rz   )rI   rz   )r   Nr  r   r   )r!   r#   r5   r   capturesdictr6   r   r   r   test_branch_resetN  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dddg |  tdd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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.d/ td0D }|  ttd1|d2 |  ttd3|d4 |  ttd5|d6 |  ttd7|d8 |  ttd9|d8 |  ttd:|d6 |  ttd;|d< |  ttd=|d> |  ttd?|d@ |  ttdA|dB |  ttdC|dB |  ttdD|dE |  ttdF|dG |  ttdH|dG |  t	t
tdI| j |  tdJdKddLg |  tdMdKddLg |  tdNdKddLg |  tdOdKddLg d S )PNz[a]rI   r   z(?i)[a]rS   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ab0rz   z[a\P{Alpha}]r(  z(?i)[a\p{Alpha}]z(?i)[a\P{Alpha}]z[a-b\p{Alpha}]ZabC0Cz(?i)[a-b\p{Alpha}]ZAbC0z[\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   s   | ]}t |V  qd S r   rW   r   r   r   r   r   	<genexpr>  s     z&RegexTests.test_set.<locals>.<genexpr>r  z	\p{ASCII}r&  z
\p{Letter}u   z	\p{Digit}rL   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}]rO   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#   r5   r4   rV   r%   r   r  lenrf   r   r$   rg   )r   	all_charsr   r   r   test_set  s      zRegexTests.test_setc                C   s#  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dEfdKdEdtd fdLdEdtdEfdMdGdtdGfdNdGdtd fdOdGdtdGfdPdGdtdGfdQddt j| j	fdRdSdSdtdSfdSdTdtd fdSdUdtd fdSdVdtd fdSdWdtdSfdSdXdtdSfdYdSdtdSfdZdSdtdSfdZd[dtd[fdZd\dtd\fd]d[dtd[fd]dSdtd fd]d^dtd fd]d\dtd\fd_d[dtd[fd_dSdtdSfd_d\dtd fd`dSdtdSfdadSdtdSfdadbdtd fdcdbdtdSfdadddtd fdedddtdSfdfdSdtdfdgdSdtdfdhdSdtdSfdhdUdtdUfdidjdtdjfdidkdtd fdldSdtd fdldmdtdmfdndmdtd fdndodtdofdpdqdtdrfdsdtdtdtfdudtdtdtfdvdtdtdtfdwdxdt j| j
fdydxdt j| j
fdzdxdt j| jfd{dxdt j| j	fd|dxdt j| jfd}d}dtd}fd~ddtdfd~ddtdfdddtdfddmdtd fdddtdfdddtd fdddtd fdddtdfddtd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ddtd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ddSd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ddSdtdfddSdtdfdddtdSfdddtdfdddtdfdddtdfddxdt j| j	fdddtdfdSd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ddSdtdσfddSdtdуfdddtdӃfdddtdӃfdddtdփfdddtd؃fdddtd fddSdt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ddrdtdrfddd	tdSfddd	tdSfddd	tdfdd dt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(dSdtd fd+d)dtd,fd-dqdtd.fd/ddt j| jfd0dd1td2fd3dd1td4fd5ddt j| jfd6d7dtd7fd8d7dt j| jfd9d:dtd:fd9d:dtd;fd<d=dtd=fd>d
dtd
fd?d@dtd@fdAd
dtd
fdBdCdtdCfdDd@dtd@fdSdSdtdSfdSdTdtd fdSdUdtd fdSdVdtd fdSdWdtdSfdSdXdtdSfdYdSdtdSfdZdSdtdSfdZd[dtd[fdZd\dtd\fdEd\dtd\fd]d[dtd[fd]dSdtd fd]d^dtd fdFd^dtd fd]d\dtd\fdFd\dtd\fdGd\dtd\fdHd\dtd\fdId\dtd fd_d[dtd[fd_dSdtdSfdJdSdtdSfd_d\dtd fd`dSdtdSfdKdSdtdSfdadSdtdSfdadbdtd fdcdbdtdSfdadddtd fdedddtdSfdfdSdtdfdgdSdtdfdhdSdtdSfdhdUdtdUfdidjdtdjfdidkdtd fdldSdtd fdldmdtdmfdndmdtd fdndodtdofdpdqdtdrfdsdtdtdtfdvdtdtdtfdLdxdt j| jfdwdxdt j| j
fdydxdt j| j
fd}d}dtd}fd~ddtdfdddtdfddmdtd fdddtdfdddtd fdddtd fdddtdfddSdtdfdddtdfdddtdfdMdxdt j| jfdNdxdt j| jfdddtd fdzdxdt j| jfdddtdfdddtdfdddtdfdddtdfd{dxdt j| j	fd|dxdt j| jfddSdtdfddSdtdfdddtdSfdOddtdSfdPdxdt j| jfdQddtdSfdddtdfdRddtdfdddtdfdSddtdfdddtdfdTddtdfddxdt j| j	fdddtdfdSddtd fdddtdfdUdVdtdWfdXddtdY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ddSdtdσfddSdtdуfdddtdӃfdddtdӃfdddtdփfdddtd؃fdddtd fddSdt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dZd
d[td
fd\d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ddrdtdrfddd	tdSfddd	tdSfd_d`dtd`fd_dadtd fd_dbdtd fd_dcdtd fd_dddtd`fd_dedtd`fdfd`dtd`fdgd`dtd`fdgdhdtdhfdidjdtdjfdkdjdtdjfdldhdtdhfdmd`dtd fdmdndtd fdodndtd fdmdjdtdjfdpdjdtdjfdqdjdtdjfdrdjdtdjfdsdjdtd fdtdhdtdhfdtd`dtd`fdud`dtd`fdtdjdtd fdvd`dtd`fdwd`dtd`fdxd`dtd`fdxdydtd fdzdydtd`fdx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dbdtdbfddd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ddxdt j| jfddxdt j| j
fddxd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ddxdt j| jfddxdt j| jfdddtd fddxdt j| jfdddtdfdddtdfdddtdfdddtdfddxdt j| j	fddxdt j| jfdd`dtdfdd`dtdfdddtd`fdddtd`fddxd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ddxd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d[tdfdd d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
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dod	tdfddod	tdfddod	tdfddo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d.d,dtd,fd/d,dtd,fd0d*dtd*fdcd1dtd fd2d1dtdSfd3d4dtdSfdCdEdtd fdLdEdtdEfd5d6dtd7fd8d6dtd7fd9d:dtdSfd;d:dtdSfd<d=dtd=fd>d?d@tdAfdBd?d@tdAfdCdDdEtdFfdGddt j| jfdHdIdtdmfdJddt j| jfdKdLdtdLfdMddtdfdNdOdtdOfdPdOdtd fdQdOdtdOfdRdOdtdOfdSdOdtdOfdTdOdtdOfdUdVdtdWfdXdYdtdY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dadbdtdbfdcdbdtdbfdddbdtdbfdedbdtdbfdfdgdtdgfdhdidtd fdjdkdtd fdldOdtd fdmddEtdnfdodSdtdpfdqdSdtdpfdrdSdtdpfdsd
dtd
fdsdtdtdtfdudtdtdtfg}|D ]l}d }z0t|dvk"r|\}}}}n|\}}}}}W nT tk
"r   dwdxdy |d dz D d{g }| d|| Y nX g }	|#r:|d}D ]:}
z|	t|
 W n  tk
#r4   |	|
 Y nX "q|d k	#rv| j||d~ | ||t j|| W 5 Q R X nNt ||}|#r|	#rt|j|	 }nt|d d  }nt|}| || "qXd S (  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)1rI   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>rq   )[\1]rk   r(  z'\x01'rn   r   9r(  z\141z((a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\119abcdefghijklk9z0,11)r  kri   rj   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\arJ   rK   rL   rM   rN   rO   rP   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	a.b(?sV1)z(?s)a.bza.*(?s)bz
a.*(?sV1)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  ^rt  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yzrv   zx\bzx\Br   z\Bzr*  zz\Bz\Bxz\Ba\Bz\By\Bz\By\br   z\by\Bzab|cdr   rW  z()efdefz0,1)r  r   z$brz   za\(ba(b)r  za\(*bza((bza\\bza\br5  z0,1,2)rI   rI   rI   z(a)b(c))r   rI   r   za+b+cZaabbabcz(a+|b)*)r   rz   z(a+|b)+z(a+|b)?r   z)(z[^ab]*r<  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  )r<  r   z[abhgefdc]ijZhijz	^(ab|cd)ez(abc|)efr   z(a|b)c*d)Zbcdrz   z
(ab|ab*)bc)r   rI   z
a([bc]*)c*)r   r   za([bc]*)(c*d))rW  r   r   za([bc]+)(c*d)za([bc]*)(c+d))rW  rz   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   rI   rz   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)r  r  Nij)r  r  jZeffgZbcddZreffgzz(((((((((a)))))))))zmultiple words of textzuh-uhzmultiple wordszmultiple words, yeahz	(.*)c(.*))r  r   r=  z\((.*), (.*)\)z(a, b)z2,1)rz   rI   z[k]za[-]?cz(abc)\1r  z
([a-c]*)\1z^(.+)?BABrS   z(a+).\1$r{   )r{   r   z	^(a+).\1$aaaa)r  r   z
([a-c]+)\1z(a)\1)r   rI   z(a+)\1z(a+)+\1z(a).+\1r   )r   rI   z(a)ba*\1z
(aa|a)a\1$r0   )r0   rI   z
(a|aa)a\1$z(a+)a\1$z
([abc]*)\1z
(a)(b)c|ab)r   NNz(a)+xaaax)r   rI   z([ac])+xaacx)r!  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)r"  Ztrack1titlezBlah blah blahz	([^N]*N)+abNNxyzN)r$  ZxyzNZabNNxyz)ZabNNNz	([abc]*)xabcx)r&  r   z	([xyz]*)x)r   r   z	(a)+b|aac)r  Nz(?P<i d>aaa)az(?P<id>aaa)az0,id)r  r0   z(?P<id>aa)(?P=id))r  r   z(?P<id>aa)(?P=xd)r   gz\g<1>z(.)\g<1>gg)r(  r'  z\Nr%  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)rW  rI   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)))rS   rS   rS   z(?i)(a)b(c))r   rS   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)*)r  r  z(?i)(a+|b){0,}z(?i)(a+|b)+z(?i)(a+|b){1,}z(?i)(a+|b)?)rS   rS   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)r1  r  z(?i)([abc])*bcd)r,  rS   z(?i)a|b|c|d|eEz(?i)(a|b|c|d|e)fr-  )r-  r2  z(?i)abcd*efgZABCDEFGz(?i)ab*Z	XABYABBBZZXAYABBBZz(?i)(ab|cd)eABCDE)r0  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   rS   z(?i)a([bc]*)c*)r   BCz(?i)a([bc]*)(c*d))r,  r5  Dz(?i)a([bc]+)(c*d)z(?i)a([bc]*)(c+d))r,  r  r4  z(?i)a[bcd]*dcdcdeZADCDCDEz(?i)a[bcd]+dcdcdez(?i)(ab|a)b*c)r   r  z(?i)((a)(b)c)(d))r   rS   r  r6  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)r7  r7  NIJ)r8  r8  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(.*))r3  r  ZDEz(?i)\((.*), (.*)\)z(A, B))r  rS   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w(?iV1)z(?i)wz(?iV1)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)NNr=  z((.)\1+)z.*dzabc
abdr   z[\41]!z(x?)?z	 (?x)foo rM  z (?V1x)foo z	(?x) foo z(?V1x) foo z(?x)foo z
(?V1x)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   	  s     z+RegexTests.test_various.<locals>.<listcomp>r/   ...z%Incorrect number of test fields: ({})r  )r`   r   )r#   rw   r   r   MISSING_RPARENr  UNKNOWN_GROUPrx   rW   TRAILING_CHARSr:  
BAD_ESCAPEBAD_CHAR_RANGENOTHING_TO_REPEATMULTIPLE_REPEAT
OPEN_GROUPr	  rc   r   r&   r  r   appendr8   ZsubTestrb   r3   r   r!   )r   r  r  Zexcvalr`   r   r   r  fieldsZ
group_listr   rB   r   r   r   r   test_various  s   





  
 

     

          I
,
 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   rG   z\\1\\1c                 S   s   dS )NrM  r   rA   r   r   r   rC   	  rD   z-RegexTests.test_replacement.<locals>.<lambda>)r!   r#   rV   r  r6   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!   rf   r   r#   r$   rg   )r   allZsideregexpr   r   r   test_common_prefix	  s    zRegexTests.test_common_prefixc              	   C   s*  |  tddddddg |  tddd	ddgdd
gf |  tdddddgdddgf |  tddddddddgdddddgf |  tdddddd gd!d"d#d$g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   r.   rI   rz   r   z(\w{3})+r   r   r  z^(\d{1,3})(?:\.(\d{1,3})){3}$z192.168.0.1r   Z192Z168r(  r  z^([0-9A-F]{2}){4} ([a-z]\d){5}$z3FB52A0C a2c4g3k9d3Z3FZB5Z2AZ0CZa2Zc4Zg3Zk9Zd3z([a-z]W)([a-z]X)+([a-z]Y)ZaWbXcXdXeXfYr/   ZaWZbXZcXZdXZeXZfYz.*?(?=(.)+)br   z.*?(?>(.){0,2})drW  (.)+)r!   r#   r3   capturesr5   r6   r   r   r   test_captures	  sT    
 
 

  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   r.   r   ))r/      rO      r"     z(X.*?Y\s*){3,}(X\s*)+AB:))r   rX  rY  r[  z\d{4}(\s*\w)?\W*((?!\d)\w){2}Z9999XX)r  r1  )   r   zA\s*?.*?(\n+.*?\s*?){0,2}\(Xz
A
1
S
1 (X)r   rL   )r]  r  z	Derde\s*:zaaaaaa:
Derde:)r     zaaaaa:
Derde:)rP   rN   )r#   r3   r!   r4   r  r   r   r   test_guards	  s     zRegexTests.test_guardsc              	   C   s   d}t  }t  }|dD ]X}|d\}}|||f |||f |||f |||f |||f q|D ]t}|D ]j}td| d |}|r||f|kr| dt|t| q||f|kr| dt|t| qqxd S )Nu   I=i;I=ı;i=İ;=z(?i)\A\Zz{} matching {}z{} not matching {})	r  r   updateaddr#   r5   r&   r  r  )r   pairsr
  Zmatchingpairr
  r  rB   r   r   r   test_turkic	  s,    zRegexTests.test_turkicc              	   C   s  dddg}|  tjdd|d d |  tjdd|d d |  tjdd	|dd  d
ddg}|  tjdd|d d |  tjdd|d d |  tjdd|dd  |  tttjddddgd| j |  tjddt	dddgdg  |  tjddt	dddg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)rN  z(?i)333\L<bar>444Z	333TWO444Z
333four444s   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 QWERTZgoodZ	brilliantz	+s\ol[i}dr  z+solid QWERTz+solidZSTRASSE(?fi)\L<words>u   straßewordsr  Zstressr   rP   Zkitz(?i)\L<words>ZSKITSr  u   SKİTSz(?fi)\b(\w+) +\1\bu    straße STRASSE )r.   rZ  u    STRASSE straße z^\L<options>$r   r+   )r!   r#   r5   r   rf   r   r$   rg   r%   r  r4   r3   )r   r  r   r   r   test_named_lists
  s    


 
 


zRegexTests.test_named_listsc                 C   sP  |  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d
dddg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   r.   )rK      rq  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})rK   rL   rs  z(fuu){i<=2,d<=2,e<=5})rP   rL   rt  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})r1   r1   z(?b)(foobar){e})rM   r"  ru  z(foobar){e<=2}Zxirefoabrzlfd)r   rK   rv  Zxirefoabzlfdz(foobar){i<=2,s<=2,e<=2}Zoobargoobaploowap)r]  rM   rw  z\b(foobar){e}\bZzfoobarz)r   r  rx  zboing zfoobarz goobar woopz(?b)\b(foobar){e}\b)rZ  rX  ry  z^(foobar){e<=1}$ZfoobarZxfoobar)ro  ro  ZfoobarxZfooxbarZfoxbarZxoobarZfoobaxZoobar)r   r]  rz  ZfobarZfoobaZxfoobarxZfoobarxxZxxfoobarZxfoxbarZfoxbarxz (foobar){i<=1,d<=2,s<=3,2d+1s<4}Z(3oifaowefbaoraofuiebofasebfaobfaorfeoaro)r   rN   r{  z$(?b)(foobar){i<=1,d<=2,s<=3,2d+1s<4})"   '   r|  zfoo(bar){e<=1}zapZ	foobarzap)r   rK   r/   r   ZfobarzapZfoobrzap)rx  r/   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 dogrm  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)rM  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   r"  zservice detect)r   r_  zservice detecti)r   rZ  zservice detectionzin service detection)r      (?:cats|cat){e<=1}catr   r   r.   (?e)(?:cats|cat){e<=1}r   r   r   z(?:cat|cats){e<=1}catsr   r.   r   z(?e)(?:cat|cats){e<=1}z(?:cat){e<=1} (?:cat){e<=1}zcat cotr.   r   r   z/(?e)(GTTTTCATTCCTCATA){i<=4,d<=4,s<=4,i+d+s<=8}ZATTATTTATTTTTCATAr   rL   rM   r/   z(?:fo){e<=1}|(?:fo){e<=2}ZFOT)r!   rf   r   r#   r$   rg   r3   r4   r%   r   r   r5   	fullmatchfuzzy_countsfuzzy_changesr   r  r   r   r   
test_fuzzyA
  s   
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 












zRegexTests.test_fuzzyc                 C   sB  |  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ddddg |  tddd d  d |  tdddddddg |  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|d0d( |  t|d1d* |  t|d2d( |  t|d3d( |  t|d4d( d S )5Nz(\w)(?:(?R)|(\w?))\1rG   )rG   r   r   r   )r   rI   rz   abba)r  rI   Nkayak)r  r  NZpaper)papr   rI   Zdontmatchmez(?r)\2(?:(\w?)|(?R))(\w))rG   r   r   )r   rz   rI   )r  NrI   )r  Nr  )r  rI   r   z\(((?>[^()]+)|(?R))*\)
(ab(cd)ef))r  r  r.   r   r   z(cd)r  z(?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  rI   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#   r3   rV  r$   r   )r   Zrgxr   r   r   test_recursive  s    















zRegexTests.test_recursivec                 C   s  t d}| t||k | t||k |d}| t||k	 | t||k	 | |jd k	 t|}|  | |jd k	 | |jd k 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 )NrI   r?   r   rz   r   r   )r#   r$   
assertTruecopydeepcopyr5   r   Zdetach_stringr_  r!   rh  r   r   )r   rrB   m2r`  Zit2r   r   r   	test_copyI  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  r.   )r  r.   )r!   r#   subfZsubfnr5   expandfr6   r   r   r   test_formatt  s:    
 
 
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   Tr&  Fr/   )r   Zxabcr.   )r   r  r   r  z(?r)abcr!   r   r#   r  r6   r   r   r   test_fullmatch  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 ]}|  td
|dddddg tj	dkr6|  td|ddddddddg |  td|dd
dddd
dddddddddg q|  td|ddddg |  td|dd
dd
dddg qdtdtdtdfD ]}|  td|dddddg tj	dkr|  td|ddddddddg |  td|dddddddddddddddg n>|  td|ddddg |  td|dddddddg qdtdfD ]T}|  t
d|d
ddg |  t
d|d
ddg |  t
d|dd d!g qbd"td"td"td"fD ]T}|  t
d#|ddd$g |  t
d%|ddd$g |  t
d&|d'd(d)g qdtdfD ]}| td| d* | td+| d, | td+|d-d | td+|d.d | td+|d.d.d/ q2dtdtdtdfD ]}| td| d* | td0| d1 | td0|d-d | td0|d.d | td0|d.d.d2 qd S )3Nr   rI   rv   Zxaz   yr  s   xyzs   xazr   r   r   rz   r   r~   r   r   r   s   :a:b::c   :rD   rx  r  s   :*s   (:*)   ::r   r   r   r   r   r   r   r   s
   a:b::c:::ds   :+s   :::s   (:+)s   (:)(:*))r  rD   )r  r  )r  r  r   r   r   r   r.   r   s   (a))r  )r  r  )r"   r#   rV   r   r   	bytearray
memoryviewr   r   r   r%   r!   r5   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   rI   Tpartialr   r  r  r1   Zcatchzabc\w{3}r   Fr  r  rz  z\d{4}$1234z	\L<words>post)r  rn  r  r   rl  POST   poﬆPOSz	[a-z]*4R$r   Zab4Za4Za4RZ4aZa44)r!   r#   r5   r  r4   r6   r   r   r   test_partial  s     zRegexTests.test_partialc              
   C   s
6  |  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d!d* |  td+d)d  |  td,d-	dd |  td.d/d!d0 |  td.d1d!d2 |  td.d3d!d4 |  td5d3	 d3 |  td6d7 d8 |  td9d/ d: |  td9d1 d; |  td<d	dd |  tjd=d3tjd	dd3 |  td>d?dd!d@ |  tdAd?dd!dB |  tdCd?dd!dD |  tdEd?dd!dF |  tdGdH	dd/ |  tjdIdJdKdLgdMdNdOdKdPdQdRg |  tdSdJdTdUdLdVdQdRg |  tdWdJdNdOdKdPdQdRg |  tdXdJdNdOdKdPdQdRg |  tdYd/	dd!dZd[ |  td\d]dd!d^ |  td_d/	dd!d` |  tdadbd  |  tdcddd  | tj| jdedf  |  tdgdhddi |  tdjdk	ddk |  tdldmd  |  tdndod  |  tdpdq	dd!dZdr |  tdsdtd$dug |  tdvdtd$dug |  tdwdtd$dug |  tdxdtd$dug |  tdydz	 dz |  d{d td|d}D d~dg |  tddddddg | tj| jddf  d}d}|  t||tjd d |  tdddg |  ttdddtjtd |  tddd  |  tddddd;g |  tdddf dd tjdtjd}|  |dd  |  |dg  | tj| jddf  |  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d] n|  tdddd |  tdddd] tjdk	r|  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dddf  |  tdd/	dd!dZdܡ |  tdd/	dd!dZ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( d; |  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/d0 d: |  td1d2d  |  td3d4d5d6d7g |  td8d4d5d6d7g |  d9d td:d;D d<d=d>d?g |  d@d tdAd;D d<d=d>d?g |  tdBdCd dC |  tdBdDd dD |  tdEdFd dF |  tdGdHd dH |  tdId	dd!dJ |  tdKdLdMdNg |  tdOdLddPg |  tdQd	dd!dR |  tdSdLdTdg |  tdUdLdPdg |  tdVdWd dW |  tdXd/	dYd  |  tdXd/dYd/g |  tdZd[d d\ |  td]d[d d\ |  td^d[d  |  td_d[d d[ |  td`dad da |  td`dbd dc |  tdddad de |  tdddbd dc |  tdfdbd db |  tdfdgd dc |  tdhdgd dc |  tdidgd dc |  tdjd[d  |  tdkd[d d[ |  tdldad da |  tdldbd dc |  tdmdbd db |  tdmdgd dc |  tdndgd dc |  tdodgd dc |  tdpdad da |  tdpdbd dc |  tdqdad de |  tdqdbd dc |  tdrdbd db |  tdrdgd dc |  tdsdgd dc |  tdtdgd dc |  tdudad da |  tdudbd dc |  tdvdbd db |  tdvdgd dc |  tdwdgd dc |  tdxdgd dc dy}|  t(tdz|d! |  td{d| d; |  td}d~d d~ td}d}	|  dd ||	D ddg |  tddtj d |  tddtj d |  td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 d8 |  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ddf  | ,tjddf  |  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dLdPg |  tddLdPg |  tddddg |  tddg  |  tdddg |  tdddddg |  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d	ddd
d |  tjd	ddd
d |  tjd	ddd
d |  tjd	ddd
d |  td	d |  tddm 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 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d0d/d |  t&d1d$dd/d d2g |  t&d1d$	dd  |  t&d3d$dd/d d2g |  t&d3d$	dd2 |  tjd4ddd(j'd |  tjd4d5dd(j'd |  tjd6ddd(j'd |  tjd7ddd(j'd |  tjd7d5dd(j'd |  tjd8ddd(j'd |  tjd8d5dd(j'd |  tjd9ddd(j'd |  tjd:ddd(j'd |  tjd:d5dd(j'd |  tjd;ddd(j'd |  tjd;d5dd(j'd |  tjd<ddd(j'd |  tjd=ddd(j'd |  tjd=d5dd(j'd |  tjd>ddd(j'd |  tjd>d5dd(j'd |  tjd?ddd(j'd |  tjd@ddd(j'd |  tjd@d5dd(j'd |  tjdAddd(j'd |  tjdBddd(j'd |  tjdCddd(j'd |  tjdDddd(j'd |  tjdEddd(j'd |  tjdFddd(j'd |  tjdDd/dd(j'd |  tjdEd/dd(j'd |  tjdFd/dd(j'd |  tjdGddd(j'd |  tjdHddd(j'd |  tjdIddd(j'd |  tjdJddd(j'd |  tjdKddd(j'd |  tjdLddd(j'd |  tjdJd/dd(j'd |  tjdKd/dd(j'd |  tjdLd/dd(j'd |  tjdMdNdd(j'd dO}dP}tj||tjd}|  |j dʡ |  |j0g dQgg f |  tdRdSj dT |  tdRdUj d |  tdVdWdWg |  ttdXd/d |  ttdYd/d |  t&dZd[ d8 |  td[d\/ d]gg d]gd^ |  ttd_d`d |  ttdad`d |  tdbdcj0g g dd!dddegf |  tdfd2j dg |  tdfd2j0dgg d!gf |  tdhd2j di |  tdhd2j0g g dgf |  tdjd2j di |  tdjd2j0g g dgf |  tdkdlj dm |  tdndlj d |  tdodlj d |  tdpdqj dr |  tdsdqj dr |  t&dtduj d |  t&dvduj d |  tdwdxd  |  ttdyd |  ttdzd |  td{d|d[d)d}g |  td~d|d[d)d}g |  tjddtj1dj 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j0g ddgg f |  tdd	 d |  tddj0g ddgg f |  td2ddސddg |  td2ddސddg |  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 dT |  |j0g g g f d}tj||tjd}|  |j dr |  |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 d; |  tdd d; |  tddd  |  tdd d: |  tdd$6 d$gd/d d2gf |  tdd$7 d8gd:ddgf |  tt&ddd |  tt&ddd |  tddmd  |  tddm d0 |  tdd d |  tdd d: |  tdd d; |  tdd d; |  tdd d: 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   s   g | ]}|  qS r   r  r   r   r   r   r   .  s     z+RegexTests.test_hg_bugs.<locals>.<listcomp>z\((?:[^()]*+|(?0))*\)za(b(c(de)fg)hz	(c(de)fg)za(bc)drW  r   z([\da-f:]+)$r2  r  z^(?=ab(de))(abd)(e)Zabde)r=  r   r  z\ r   z^(a|)\1{2}brz   r.   )rz   r   z	^(a){0,0}r   r/  z(?>.*/)bza/bz(?V0)((?i)blah)\s+\1	blah BLAH)r  Zblahz(?V1)((?i)blah)\s+\1z(\()?[^()]+(?(1)\)|)z(abcdz(a*)*rI   r.   r.   r   r   r   r0   r/   r/   z	a(?#xxx)*z(?=abc){3}abcZ	abcabcabcr1   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})r1   r-   z(?V1)(a(?(1)\1)){3})r  r  z(?V1)(a(?(1)\1)){4})r^  )r   rL   z(?V1)(a)(?<=b(?1))Zbazz(?fi)\L<keywords>u)   POST, Post, post, poſt, poﬆ, and poﬅr  r   )keywordsr  ZPostu   poſtr  u   poﬅz(?fi)pos|postr  Posu   poſz(?fi)post|posz(?fi)post|anotherz(?V1)((a)(?1)|(?2))r   rY  z(?V1)(\1xx|){6}rG   )r   r  z(a|)+r   z(a|)*\dZPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaz^(?:a?b?)*$r   c                   S   s
   t dS )Nz\N{1}r9  r   r   r   r   rC     s    z)RegexTests.test_hg_bugs.<locals>.<lambda>rc  za
a
rm  z(q1|.)*(q2|.)*(x(a|bc)*y){2,}Zxayxayz(?i)[^a]rS   z(?i)[[:ascii:]]u   Kz((a|b(?1)c){3,5})Zbaaaaca)r  r  rI   z(?<=:\S+ )\w+z:9 abc :10 defr  z(?<=:\S* )\w+z(?<=:\S+? )\w+z(?<=:\S*? )\w+z(?:fe)?maleZfemalec                 S   s   g | ]}|  qS r   r  r   r   r   r   r     s     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recz(1+0)z	((1+0)+1)z(((1+0)+1)+1)c                   S   s   t dddS )Nr   \rr   r   r   r   r   rC     s    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   rf  z(-)c                 S   s
   |  dS )Nr   )r   rA   r   r   r   rC     rD   r  Zaxbxcz\bt(est){i<2}z	Some textc                   S   s
   t dS )Nz.???r9  r   r   r   r   rC     s    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   s   g | ]}|  qS r   r  r   r   r   r   r   r   !  s     Zyxxxc                 S   s   g | ]}|  qS r   r  r  r   r   r   r   %  s     c                 S   s   g | ]}|  qS r   r  r  r   r   r   r   *  s     c                 S   s   g | ]}|  qS r   r  r  r   r   r   r   .  s     r~   z(?V0).*rR   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)r.   r.   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   s
   t dS )Nz\p{}r9  r   r   r   r   rC   }  rD   z(?:()|(?(1)()|z)){2}(?(2)a|z))rI   r   r   z(?:()|(?(1)()|z)){0,2}(?(2)a|z)r   c                 s   s   | ]}t |V  qd S r   r   r  r   r   r   r    s     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  rD   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)r.   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   s   g | ]}|  qS r   r4   r   r   r   r   r     s     z(?i)(?:error){e}zregex failurerz  )r]  rL   )rL   rN   )rN   rN   c                 S   s   g | ]}|  qS r   r  r   r   r   r   r   	  s     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   rW  z
\w\w\K\w\wZabcdefghr   ghz(\w\w\K\w\w)Zefghz(?r)(ab\Kcd))r   rW  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)|3Z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 rf  r  r   r   r   r   r     s     )r1  )r   rP   )r1  )6   ;   z(abcdefgh){e}z******abcdefghijklmnopqrtuvwxyz)r   r_  z(abcdefghi){e})r   rZ  z(?:(?=\d)\d+\b|\w+)r<  r  z(?(?=\d)\d+\b|\w+)z (?(?<=love\s)you|(?<=hate\s)her)z
I love yourt  z&I love you but I don't hate her eitheryouZherz(?p)a*(.*?)aaabbb)r  bbbz
(?p)a*(.*)rq   r  z(?irV0)\L<kw>21r  )kwz(?irV1)\L<kw>za|bZ111a222)r/   r   z(?r)a|bz(?if)<(CLI)><\1>z
<cli><cli>r^  z
<cli><clI>z(?ifr)<\1><(CLI)>z\L<options>rM  rN  r  z(x{6}){e<=1}ZxxxxxxZxxxxxz(?r)(x{6}){e<=1}c                   S   s
   t dS )Ns   00000\0\00\^(\00\U05000000r9  r   r   r   r   rC     s    c                   S   s
   t dS )Ns   {e<lr9  r   r   r   r   rC     rD   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ccro  z(?ir)\1dog..(?<=(\L<aa>))$z(2)(?:\1{5}){e<=1}Z3222212)r.   rP   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>.*))r>  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   rM   )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...TrA  z((\w{1,3})(\.{2,10})){3}z((\w{1,3})(\.{2,10})){2}z((\w{1,3})(\.{2,10})){1})zT..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}r)  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>.)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*+r2   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TTCCCCGCGCCAGCGGGGATAAACCGr/   r]  z	(?:bc){e})r.   r   r.   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5z(?i)(\d+){i<=2:[ab]}z^(test){e<=5}$Zterstin)r   r/   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tesztzt(es){i<=1,0<e<=1}tzt(?:es){i<=1,0<e<=1:\d}tz(\d+ week|\d+ days)z7 daysz10 daysz[ ]* 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sidr3  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}+$rU  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_  r3   r^   r   r   r5   rQ   r4   rb   rw   UNDEF_CHAR_NAMErV  rE  Z	BESTMATCHr  rV   ZWORDspansrH  r  ZFULLCASEr   r  r   r   r   r  DEBUGr   r  r  r  r  r  r	  pickledumpsloadsrj  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_irI   Zpy_regex_patternr`   rB   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  r  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  r  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  r6   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#   r5   r  r  r6   r   r   r   test_subscripted_capturesP  sL    



 
 z$RegexTests.test_subscripted_capturesc              	   C   s   t jdkr| tddddddddg | tdddd | tddddd	ddg | d
d tddD dddddg | dd tddD dddg d S )Nr~   z\b|:+za::bcr   rI   r   r   z-a---bc-r   c                 S   s   g | ]}|  qS r   r  r   r   r   r   r   j  s     z2RegexTests.test_more_zerowidth.<locals>.<listcomp>r+   r  r-   r  )r]  r]  c                 S   s   g | ]}|  qS r   r  r   r   r   r   r   l  s     z
(?m)^\s*?$z	foo


barrm  )r   r]  )r   r   r!   r#   r   rV   r%   r_  r6   r   r   r   test_more_zerowidthc  s(    
  zRegexTests.test_more_zerowidth)N)r   r   r   rg   rd   rx   r   r   r   r   r   rC  rE  r.  r:  r  r  r  r  r  r  rB  rD  rF  rG  rH  rI  ZDUPLICATE_GROUPr  r  r"   r(   r7   r:   rX   rZ   r\   re   rh   ry   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/  r4  r8  r;  r>  rB  rC  rQ  rV  rX  rZ  r\  ra  rb  rd  rl  rn  rq  rs  rv  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rL  rN  rT  rW  r`  rh  rp  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r      s"  
9	3%!X			" 9b:	0*6M     m	6 BG+L5         hXr   c                   C   s   t jdd d S )Nr   )	verbosity)unittestmainr   r   r   r   	test_maino  s    r  __main__)weakrefr   r  r  r#   r   r   r  r9   r   r  r   ZTestCaser   r  r   r   r   r   r   <module>   s^                                       