 36af74cb25
			
		
	
	36af74cb25
	
	
	
		
			
			Some manual changes done to the library were lost with this update. They will be added in the next commit.
		
			
				
	
	
		
			5835 lines
		
	
	
		
			100 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			5835 lines
		
	
	
		
			100 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # This set of tests is for features that are compatible with all versions of
 | |
| # Perl >= 5.10, in non-UTF mode. It should run clean for the 8-bit, 16-bit, and
 | |
| # 32-bit PCRE libraries, and also using the perltest.pl script.
 | |
|     
 | |
| #forbid_utf
 | |
| #newline_default lf any anycrlf
 | |
| #perltest
 | |
| 
 | |
| /the quick brown fox/
 | |
|     the quick brown fox
 | |
|     What do you know about the quick brown fox?
 | |
| \= Expect no match
 | |
|     The quick brown FOX
 | |
|     What do you know about THE QUICK BROWN FOX?
 | |
| 
 | |
| /The quick brown fox/i
 | |
|     the quick brown fox
 | |
|     The quick brown FOX
 | |
|     What do you know about the quick brown fox?
 | |
|     What do you know about THE QUICK BROWN FOX?
 | |
| 
 | |
| /abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
 | |
|     abcd\t\n\r\f\a\e9;\$\\?caxyz
 | |
| 
 | |
| /a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
 | |
|     abxyzpqrrrabbxyyyypqAzz
 | |
|     abxyzpqrrrabbxyyyypqAzz
 | |
|     aabxyzpqrrrabbxyyyypqAzz
 | |
|     aaabxyzpqrrrabbxyyyypqAzz
 | |
|     aaaabxyzpqrrrabbxyyyypqAzz
 | |
|     abcxyzpqrrrabbxyyyypqAzz
 | |
|     aabcxyzpqrrrabbxyyyypqAzz
 | |
|     aaabcxyzpqrrrabbxyyyypAzz
 | |
|     aaabcxyzpqrrrabbxyyyypqAzz
 | |
|     aaabcxyzpqrrrabbxyyyypqqAzz
 | |
|     aaabcxyzpqrrrabbxyyyypqqqAzz
 | |
|     aaabcxyzpqrrrabbxyyyypqqqqAzz
 | |
|     aaabcxyzpqrrrabbxyyyypqqqqqAzz
 | |
|     aaabcxyzpqrrrabbxyyyypqqqqqqAzz
 | |
|     aaaabcxyzpqrrrabbxyyyypqAzz
 | |
|     abxyzzpqrrrabbxyyyypqAzz
 | |
|     aabxyzzzpqrrrabbxyyyypqAzz
 | |
|     aaabxyzzzzpqrrrabbxyyyypqAzz
 | |
|     aaaabxyzzzzpqrrrabbxyyyypqAzz
 | |
|     abcxyzzpqrrrabbxyyyypqAzz
 | |
|     aabcxyzzzpqrrrabbxyyyypqAzz
 | |
|     aaabcxyzzzzpqrrrabbxyyyypqAzz
 | |
|     aaaabcxyzzzzpqrrrabbxyyyypqAzz
 | |
|     aaaabcxyzzzzpqrrrabbbxyyyypqAzz
 | |
|     aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
 | |
|     aaabcxyzpqrrrabbxyyyypABzz
 | |
|     aaabcxyzpqrrrabbxyyyypABBzz
 | |
|     >>>aaabxyzpqrrrabbxyyyypqAzz
 | |
|     >aaaabxyzpqrrrabbxyyyypqAzz
 | |
|     >>>>abcxyzpqrrrabbxyyyypqAzz
 | |
| \= Expect no match
 | |
|     abxyzpqrrabbxyyyypqAzz
 | |
|     abxyzpqrrrrabbxyyyypqAzz
 | |
|     abxyzpqrrrabxyyyypqAzz
 | |
|     aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
 | |
|     aaaabcxyzzzzpqrrrabbbxyyypqAzz
 | |
|     aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
 | |
| 
 | |
| /^(abc){1,2}zz/
 | |
|     abczz
 | |
|     abcabczz
 | |
| \= Expect no match
 | |
|     zz
 | |
|     abcabcabczz
 | |
|     >>abczz
 | |
| 
 | |
| /^(b+?|a){1,2}?c/
 | |
|     bc
 | |
|     bbc
 | |
|     bbbc
 | |
|     bac
 | |
|     bbac
 | |
|     aac
 | |
|     abbbbbbbbbbbc
 | |
|     bbbbbbbbbbbac
 | |
| \= Expect no match
 | |
|     aaac
 | |
|     abbbbbbbbbbbac
 | |
| 
 | |
| /^(b+|a){1,2}c/
 | |
|     bc
 | |
|     bbc
 | |
|     bbbc
 | |
|     bac
 | |
|     bbac
 | |
|     aac
 | |
|     abbbbbbbbbbbc
 | |
|     bbbbbbbbbbbac
 | |
| \= Expect no match
 | |
|     aaac
 | |
|     abbbbbbbbbbbac
 | |
| 
 | |
| /^(b+|a){1,2}?bc/
 | |
|     bbc
 | |
| 
 | |
| /^(b*|ba){1,2}?bc/
 | |
|     babc
 | |
|     bbabc
 | |
|     bababc
 | |
| \= Expect no match
 | |
|     bababbc
 | |
|     babababc
 | |
| 
 | |
| /^(ba|b*){1,2}?bc/
 | |
|     babc
 | |
|     bbabc
 | |
|     bababc
 | |
| \= Expect no match
 | |
|     bababbc
 | |
|     babababc
 | |
| 
 | |
| /^\ca\cA\c[;\c:/
 | |
|     \x01\x01\e;z
 | |
| 
 | |
| /^[ab\]cde]/
 | |
|     athing
 | |
|     bthing
 | |
|     ]thing
 | |
|     cthing
 | |
|     dthing
 | |
|     ething
 | |
| \= Expect no match
 | |
|     fthing
 | |
|     [thing
 | |
|     \\thing
 | |
| 
 | |
| /^[]cde]/
 | |
|     ]thing
 | |
|     cthing
 | |
|     dthing
 | |
|     ething
 | |
| \= Expect no match
 | |
|     athing
 | |
|     fthing
 | |
| 
 | |
| /^[^ab\]cde]/
 | |
|     fthing
 | |
|     [thing
 | |
|     \\thing
 | |
| \= Expect no match
 | |
|     athing
 | |
|     bthing
 | |
|     ]thing
 | |
|     cthing
 | |
|     dthing
 | |
|     ething
 | |
| 
 | |
| /^[^]cde]/
 | |
|     athing
 | |
|     fthing
 | |
| \= Expect no match
 | |
|     ]thing
 | |
|     cthing
 | |
|     dthing
 | |
|     ething
 | |
| 
 | |
| /^\�/
 | |
|     �
 | |
| 
 | |
| /^�/
 | |
|     �
 | |
| 
 | |
| /^[0-9]+$/
 | |
|     0
 | |
|     1
 | |
|     2
 | |
|     3
 | |
|     4
 | |
|     5
 | |
|     6
 | |
|     7
 | |
|     8
 | |
|     9
 | |
|     10
 | |
|     100
 | |
| \= Expect no match
 | |
|     abc
 | |
| 
 | |
| /^.*nter/
 | |
|     enter
 | |
|     inter
 | |
|     uponter
 | |
| 
 | |
| /^xxx[0-9]+$/
 | |
|     xxx0
 | |
|     xxx1234
 | |
| \= Expect no match
 | |
|     xxx
 | |
| 
 | |
| /^.+[0-9][0-9][0-9]$/
 | |
|     x123
 | |
|     x1234
 | |
|     xx123
 | |
|     123456
 | |
| \= Expect no match
 | |
|     123
 | |
| 
 | |
| /^.+?[0-9][0-9][0-9]$/
 | |
|     x123
 | |
|     x1234
 | |
|     xx123
 | |
|     123456
 | |
| \= Expect no match
 | |
|     123
 | |
| 
 | |
| /^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
 | |
|     abc!pqr=apquxz.ixr.zzz.ac.uk
 | |
| \= Expect no match
 | |
|     !pqr=apquxz.ixr.zzz.ac.uk
 | |
|     abc!=apquxz.ixr.zzz.ac.uk
 | |
|     abc!pqr=apquxz:ixr.zzz.ac.uk
 | |
|     abc!pqr=apquxz.ixr.zzz.ac.ukk
 | |
| 
 | |
| /:/
 | |
|     Well, we need a colon: somewhere
 | |
| \= Expect no match
 | |
|     Fail without a colon
 | |
| 
 | |
| /([\da-f:]+)$/i
 | |
|     0abc
 | |
|     abc
 | |
|     fed
 | |
|     E
 | |
|     ::
 | |
|     5f03:12C0::932e
 | |
|     fed def
 | |
|     Any old stuff
 | |
| \= Expect no match
 | |
|     0zzz
 | |
|     gzzz
 | |
|     fed\x20
 | |
|     Any old rubbish
 | |
| 
 | |
| /^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
 | |
|     .1.2.3
 | |
|     A.12.123.0
 | |
| \= Expect no match
 | |
|     .1.2.3333
 | |
|     1.2.3
 | |
|     1234.2.3
 | |
| 
 | |
| /^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
 | |
|     1 IN SOA non-sp1 non-sp2(
 | |
|     1    IN    SOA    non-sp1    non-sp2   (
 | |
| \= Expect no match
 | |
|     1IN SOA non-sp1 non-sp2(
 | |
| 
 | |
| /^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
 | |
|     a.
 | |
|     Z.
 | |
|     2.
 | |
|     ab-c.pq-r.
 | |
|     sxk.zzz.ac.uk.
 | |
|     x-.y-.
 | |
| \= Expect no match
 | |
|     -abc.peq.
 | |
| 
 | |
| /^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
 | |
|     *.a
 | |
|     *.b0-a
 | |
|     *.c3-b.c
 | |
|     *.c-a.b-c
 | |
| \= Expect no match
 | |
|     *.0
 | |
|     *.a-
 | |
|     *.a-b.c-
 | |
|     *.c-a.0-c
 | |
| 
 | |
| /^(?=ab(de))(abd)(e)/
 | |
|     abde
 | |
| 
 | |
| /^(?!(ab)de|x)(abd)(f)/
 | |
|     abdf
 | |
| 
 | |
| /^(?=(ab(cd)))(ab)/
 | |
|     abcd
 | |
| 
 | |
| /^[\da-f](\.[\da-f])*$/i
 | |
|     a.b.c.d
 | |
|     A.B.C.D
 | |
|     a.b.c.1.2.3.C
 | |
| 
 | |
| /^\".*\"\s*(;.*)?$/
 | |
|     \"1234\"
 | |
|     \"abcd\" ;
 | |
|     \"\" ; rhubarb
 | |
| \= Expect no match
 | |
|     \"1234\" : things
 | |
| 
 | |
| /^$/
 | |
|     \
 | |
| \= Expect no match
 | |
|     A non-empty line
 | |
| 
 | |
| /   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/x
 | |
|     ab c
 | |
| \= Expect no match
 | |
|     abc
 | |
|     ab cde
 | |
| 
 | |
| /(?x)   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/
 | |
|     ab c
 | |
| \= Expect no match
 | |
|     abc
 | |
|     ab cde
 | |
| 
 | |
| /^   a\ b[c ]d       $/x
 | |
|     a bcd
 | |
|     a b d
 | |
| \= Expect no match
 | |
|     abcd
 | |
|     ab d
 | |
| 
 | |
| /^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
 | |
|     abcdefhijklm
 | |
| 
 | |
| /^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
 | |
|     abcdefhijklm
 | |
| 
 | |
| /^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
 | |
|     a+ Z0+\x08\n\x1d\x12
 | |
| 
 | |
| /^[.^$|()*+?{,}]+/
 | |
|     .^\$(*+)|{?,?}
 | |
| 
 | |
| /^a*\w/
 | |
|     z
 | |
|     az
 | |
|     aaaz
 | |
|     a
 | |
|     aa
 | |
|     aaaa
 | |
|     a+
 | |
|     aa+
 | |
| 
 | |
| /^a*?\w/
 | |
|     z
 | |
|     az
 | |
|     aaaz
 | |
|     a
 | |
|     aa
 | |
|     aaaa
 | |
|     a+
 | |
|     aa+
 | |
| 
 | |
| /^a+\w/
 | |
|     az
 | |
|     aaaz
 | |
|     aa
 | |
|     aaaa
 | |
|     aa+
 | |
| 
 | |
| /^a+?\w/
 | |
|     az
 | |
|     aaaz
 | |
|     aa
 | |
|     aaaa
 | |
|     aa+
 | |
| 
 | |
| /^\d{8}\w{2,}/
 | |
|     1234567890
 | |
|     12345678ab
 | |
|     12345678__
 | |
| \= Expect no match
 | |
|     1234567
 | |
| 
 | |
| /^[aeiou\d]{4,5}$/
 | |
|     uoie
 | |
|     1234
 | |
|     12345
 | |
|     aaaaa
 | |
| \= Expect no match
 | |
|     123456
 | |
| 
 | |
| /^[aeiou\d]{4,5}?/
 | |
|     uoie
 | |
|     1234
 | |
|     12345
 | |
|     aaaaa
 | |
|     123456
 | |
| 
 | |
| /\A(abc|def)=(\1){2,3}\Z/
 | |
|     abc=abcabc
 | |
|     def=defdefdef
 | |
| \= Expect no match
 | |
|     abc=defdef
 | |
| 
 | |
| /^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
 | |
|     abcdefghijkcda2
 | |
|     abcdefghijkkkkcda2
 | |
| 
 | |
| /(cat(a(ract|tonic)|erpillar)) \1()2(3)/
 | |
|     cataract cataract23
 | |
|     catatonic catatonic23
 | |
|     caterpillar caterpillar23
 | |
| 
 | |
| 
 | |
| /^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/
 | |
|     From abcd  Mon Sep 01 12:33:02 1997
 | |
| 
 | |
| /^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
 | |
|     From abcd  Mon Sep 01 12:33:02 1997
 | |
|     From abcd  Mon Sep  1 12:33:02 1997
 | |
| \= Expect no match
 | |
|     From abcd  Sep 01 12:33:02 1997
 | |
| 
 | |
| /^12.34/s
 | |
|     12\n34
 | |
|     12\r34
 | |
| 
 | |
| /\w+(?=\t)/
 | |
|     the quick brown\t fox
 | |
| 
 | |
| /foo(?!bar)(.*)/
 | |
|     foobar is foolish see?
 | |
| 
 | |
| /(?:(?!foo)...|^.{0,2})bar(.*)/
 | |
|     foobar crowbar etc
 | |
|     barrel
 | |
|     2barrel
 | |
|     A barrel
 | |
| 
 | |
| /^(\D*)(?=\d)(?!123)/
 | |
|     abc456
 | |
| \= Expect no match
 | |
|     abc123
 | |
| 
 | |
| /^1234(?# test newlines
 | |
|   inside)/
 | |
|     1234
 | |
| 
 | |
| /^1234 #comment in extended re
 | |
|   /x
 | |
|     1234
 | |
| 
 | |
| /#rhubarb
 | |
|   abcd/x
 | |
|     abcd
 | |
| 
 | |
| /^abcd#rhubarb/x
 | |
|     abcd
 | |
| 
 | |
| /^(a)\1{2,3}(.)/
 | |
|     aaab
 | |
|     aaaab
 | |
|     aaaaab
 | |
|     aaaaaab
 | |
| 
 | |
| /(?!^)abc/
 | |
|     the abc
 | |
| \= Expect no match
 | |
|     abc
 | |
| 
 | |
| /(?=^)abc/
 | |
|     abc
 | |
| \= Expect no match
 | |
|     the abc
 | |
| 
 | |
| /^[ab]{1,3}(ab*|b)/
 | |
|     aabbbbb
 | |
| 
 | |
| /^[ab]{1,3}?(ab*|b)/
 | |
|     aabbbbb
 | |
| 
 | |
| /^[ab]{1,3}?(ab*?|b)/
 | |
|     aabbbbb
 | |
| 
 | |
| /^[ab]{1,3}(ab*?|b)/
 | |
|     aabbbbb
 | |
| 
 | |
| /  (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*                          # optional leading comment
 | |
| (?:    (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| |
 | |
| " (?:                      # opening quote...
 | |
| [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
 | |
| |                     #    or
 | |
| \\ [^\x80-\xff]           #   Escaped something (something != CR)
 | |
| )* "  # closing quote
 | |
| )                    # initial word
 | |
| (?:  (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*  \.  (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*   (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| |
 | |
| " (?:                      # opening quote...
 | |
| [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
 | |
| |                     #    or
 | |
| \\ [^\x80-\xff]           #   Escaped something (something != CR)
 | |
| )* "  # closing quote
 | |
| )  )* # further okay, if led by a period
 | |
| (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*  @  (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*    (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| |   \[                         # [
 | |
| (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
 | |
| \]                        #           ]
 | |
| )                           # initial subdomain
 | |
| (?:                                  #
 | |
| (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*  \.                        # if led by a period...
 | |
| (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*   (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| |   \[                         # [
 | |
| (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
 | |
| \]                        #           ]
 | |
| )                     #   ...further okay
 | |
| )*
 | |
| # address
 | |
| |                     #  or
 | |
| (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| |
 | |
| " (?:                      # opening quote...
 | |
| [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
 | |
| |                     #    or
 | |
| \\ [^\x80-\xff]           #   Escaped something (something != CR)
 | |
| )* "  # closing quote
 | |
| )             # one word, optionally followed by....
 | |
| (?:
 | |
| [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037]  |  # atom and space parts, or...
 | |
| \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)       |  # comments, or...
 | |
| 
 | |
| " (?:                      # opening quote...
 | |
| [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
 | |
| |                     #    or
 | |
| \\ [^\x80-\xff]           #   Escaped something (something != CR)
 | |
| )* "  # closing quote
 | |
| # quoted strings
 | |
| )*
 | |
| <  (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*                     # leading <
 | |
| (?:  @  (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*    (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| |   \[                         # [
 | |
| (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
 | |
| \]                        #           ]
 | |
| )                           # initial subdomain
 | |
| (?:                                  #
 | |
| (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*  \.                        # if led by a period...
 | |
| (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*   (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| |   \[                         # [
 | |
| (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
 | |
| \]                        #           ]
 | |
| )                     #   ...further okay
 | |
| )*
 | |
| 
 | |
| (?:  (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*  ,  (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*  @  (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*    (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| |   \[                         # [
 | |
| (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
 | |
| \]                        #           ]
 | |
| )                           # initial subdomain
 | |
| (?:                                  #
 | |
| (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*  \.                        # if led by a period...
 | |
| (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*   (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| |   \[                         # [
 | |
| (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
 | |
| \]                        #           ]
 | |
| )                     #   ...further okay
 | |
| )*
 | |
| )* # further okay, if led by comma
 | |
| :                                # closing colon
 | |
| (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*  )? #       optional route
 | |
| (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| |
 | |
| " (?:                      # opening quote...
 | |
| [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
 | |
| |                     #    or
 | |
| \\ [^\x80-\xff]           #   Escaped something (something != CR)
 | |
| )* "  # closing quote
 | |
| )                    # initial word
 | |
| (?:  (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*  \.  (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*   (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| |
 | |
| " (?:                      # opening quote...
 | |
| [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
 | |
| |                     #    or
 | |
| \\ [^\x80-\xff]           #   Escaped something (something != CR)
 | |
| )* "  # closing quote
 | |
| )  )* # further okay, if led by a period
 | |
| (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*  @  (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*    (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| |   \[                         # [
 | |
| (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
 | |
| \]                        #           ]
 | |
| )                           # initial subdomain
 | |
| (?:                                  #
 | |
| (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*  \.                        # if led by a period...
 | |
| (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*   (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| |   \[                         # [
 | |
| (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
 | |
| \]                        #           ]
 | |
| )                     #   ...further okay
 | |
| )*
 | |
| #       address spec
 | |
| (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*  > #                  trailing >
 | |
| # name and address
 | |
| )  (?: [\040\t] |  \(
 | |
| (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
 | |
| \)  )*                       # optional trailing comment
 | |
| /x
 | |
|     Alan Other <user\@dom.ain>
 | |
|     <user\@dom.ain>
 | |
|     user\@dom.ain
 | |
|     \"A. Other\" <user.1234\@dom.ain> (a comment)
 | |
|     A. Other <user.1234\@dom.ain> (a comment)
 | |
|     \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
 | |
|     A missing angle <user\@some.where
 | |
| \= Expect no match
 | |
|     The quick brown fox
 | |
| 
 | |
| /[\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| # optional leading comment
 | |
| (?:
 | |
| (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| # Atom
 | |
| |                       #  or
 | |
| "                                     # "
 | |
| [^\\\x80-\xff\n\015"] *                            #   normal
 | |
| (?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
 | |
| "                                     #        "
 | |
| # Quoted string
 | |
| )
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| (?:
 | |
| \.
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| # Atom
 | |
| |                       #  or
 | |
| "                                     # "
 | |
| [^\\\x80-\xff\n\015"] *                            #   normal
 | |
| (?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
 | |
| "                                     #        "
 | |
| # Quoted string
 | |
| )
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| # additional words
 | |
| )*
 | |
| @
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| |
 | |
| \[                            # [
 | |
| (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
 | |
| \]                           #           ]
 | |
| )
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| # optional trailing comments
 | |
| (?:
 | |
| \.
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| |
 | |
| \[                            # [
 | |
| (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
 | |
| \]                           #           ]
 | |
| )
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| # optional trailing comments
 | |
| )*
 | |
| # address
 | |
| |                             #  or
 | |
| (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| # Atom
 | |
| |                       #  or
 | |
| "                                     # "
 | |
| [^\\\x80-\xff\n\015"] *                            #   normal
 | |
| (?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
 | |
| "                                     #        "
 | |
| # Quoted string
 | |
| )
 | |
| # leading word
 | |
| [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] *               # "normal" atoms and or spaces
 | |
| (?:
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| |
 | |
| "                                     # "
 | |
| [^\\\x80-\xff\n\015"] *                            #   normal
 | |
| (?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
 | |
| "                                     #        "
 | |
| ) # "special" comment or quoted string
 | |
| [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] *            #  more "normal"
 | |
| )*
 | |
| <
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| # <
 | |
| (?:
 | |
| @
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| |
 | |
| \[                            # [
 | |
| (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
 | |
| \]                           #           ]
 | |
| )
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| # optional trailing comments
 | |
| (?:
 | |
| \.
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| |
 | |
| \[                            # [
 | |
| (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
 | |
| \]                           #           ]
 | |
| )
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| # optional trailing comments
 | |
| )*
 | |
| (?: ,
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| @
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| |
 | |
| \[                            # [
 | |
| (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
 | |
| \]                           #           ]
 | |
| )
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| # optional trailing comments
 | |
| (?:
 | |
| \.
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| |
 | |
| \[                            # [
 | |
| (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
 | |
| \]                           #           ]
 | |
| )
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| # optional trailing comments
 | |
| )*
 | |
| )*  # additional domains
 | |
| :
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| # optional trailing comments
 | |
| )?     #       optional route
 | |
| (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| # Atom
 | |
| |                       #  or
 | |
| "                                     # "
 | |
| [^\\\x80-\xff\n\015"] *                            #   normal
 | |
| (?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
 | |
| "                                     #        "
 | |
| # Quoted string
 | |
| )
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| (?:
 | |
| \.
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| # Atom
 | |
| |                       #  or
 | |
| "                                     # "
 | |
| [^\\\x80-\xff\n\015"] *                            #   normal
 | |
| (?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
 | |
| "                                     #        "
 | |
| # Quoted string
 | |
| )
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| # additional words
 | |
| )*
 | |
| @
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| |
 | |
| \[                            # [
 | |
| (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
 | |
| \]                           #           ]
 | |
| )
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| # optional trailing comments
 | |
| (?:
 | |
| \.
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| (?:
 | |
| [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
 | |
| (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
 | |
| |
 | |
| \[                            # [
 | |
| (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
 | |
| \]                           #           ]
 | |
| )
 | |
| [\040\t]*                    # Nab whitespace.
 | |
| (?:
 | |
| \(                              #  (
 | |
| [^\\\x80-\xff\n\015()] *                             #     normal*
 | |
| (?:                                 #       (
 | |
| (?:  \\ [^\x80-\xff]  |
 | |
| \(                            #  (
 | |
| [^\\\x80-\xff\n\015()] *                            #     normal*
 | |
| (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
 | |
| \)                           #                       )
 | |
| )    #         special
 | |
| [^\\\x80-\xff\n\015()] *                         #         normal*
 | |
| )*                                  #            )*
 | |
| \)                             #                )
 | |
| [\040\t]* )*    # If comment found, allow more spaces.
 | |
| # optional trailing comments
 | |
| )*
 | |
| #       address spec
 | |
| >                    #                 >
 | |
| # name and address
 | |
| )
 | |
| /x
 | |
|     Alan Other <user\@dom.ain>
 | |
|     <user\@dom.ain>
 | |
|     user\@dom.ain
 | |
|     \"A. Other\" <user.1234\@dom.ain> (a comment)
 | |
|     A. Other <user.1234\@dom.ain> (a comment)
 | |
|     \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
 | |
|     A missing angle <user\@some.where
 | |
| \= Expect no match
 | |
|     The quick brown fox
 | |
| 
 | |
| /abc\0def\00pqr\000xyz\0000AB/
 | |
|     abc\0def\00pqr\000xyz\0000AB
 | |
|     abc456 abc\0def\00pqr\000xyz\0000ABCDE
 | |
| 
 | |
| /abc\x0def\x00pqr\x000xyz\x0000AB/
 | |
|     abc\x0def\x00pqr\x000xyz\x0000AB
 | |
|     abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
 | |
| 
 | |
| /^[\000-\037]/
 | |
|     \0A
 | |
|     \01B
 | |
|     \037C
 | |
| 
 | |
| /\0*/
 | |
|     \0\0\0\0
 | |
| 
 | |
| /A\x0{2,3}Z/
 | |
|     The A\x0\x0Z
 | |
|     An A\0\x0\0Z
 | |
| \= Expect no match
 | |
|     A\0Z
 | |
|     A\0\x0\0\x0Z
 | |
| 
 | |
| /^(cow|)\1(bell)/
 | |
|     cowcowbell
 | |
|     bell
 | |
| \= Expect no match
 | |
|     cowbell
 | |
| 
 | |
| /^\s/
 | |
|     \040abc
 | |
|     \x0cabc
 | |
|     \nabc
 | |
|     \rabc
 | |
|     \tabc
 | |
| \= Expect no match
 | |
|     abc
 | |
| 
 | |
| /^a	b
 | |
|       c/x
 | |
|     abc
 | |
| 
 | |
| /^(a|)\1*b/
 | |
|     ab
 | |
|     aaaab
 | |
|     b
 | |
| \= Expect no match
 | |
|     acb
 | |
| 
 | |
| /^(a|)\1+b/
 | |
|     aab
 | |
|     aaaab
 | |
|     b
 | |
| \= Expect no match
 | |
|     ab
 | |
| 
 | |
| /^(a|)\1?b/
 | |
|     ab
 | |
|     aab
 | |
|     b
 | |
| \= Expect no match
 | |
|     acb
 | |
| 
 | |
| /^(a|)\1{2}b/
 | |
|     aaab
 | |
|     b
 | |
| \= Expect no match
 | |
|     ab
 | |
|     aab
 | |
|     aaaab
 | |
| 
 | |
| /^(a|)\1{2,3}b/
 | |
|     aaab
 | |
|     aaaab
 | |
|     b
 | |
| \= Expect no match
 | |
|     ab
 | |
|     aab
 | |
|     aaaaab
 | |
| 
 | |
| /ab{1,3}bc/
 | |
|     abbbbc
 | |
|     abbbc
 | |
|     abbc
 | |
| \= Expect no match
 | |
|     abc
 | |
|     abbbbbc
 | |
| 
 | |
| /([^.]*)\.([^:]*):[T ]+(.*)/
 | |
|     track1.title:TBlah blah blah
 | |
| 
 | |
| /([^.]*)\.([^:]*):[T ]+(.*)/i
 | |
|     track1.title:TBlah blah blah
 | |
| 
 | |
| /([^.]*)\.([^:]*):[t ]+(.*)/i
 | |
|     track1.title:TBlah blah blah
 | |
| 
 | |
| /^[W-c]+$/
 | |
|     WXY_^abc
 | |
| \= Expect no match
 | |
|     wxy
 | |
| 
 | |
| /^[W-c]+$/i
 | |
|     WXY_^abc
 | |
|     wxy_^ABC
 | |
| 
 | |
| /^[\x3f-\x5F]+$/i
 | |
|     WXY_^abc
 | |
|     wxy_^ABC
 | |
| 
 | |
| /^abc$/m
 | |
|     abc
 | |
|     qqq\nabc
 | |
|     abc\nzzz
 | |
|     qqq\nabc\nzzz
 | |
| 
 | |
| /^abc$/
 | |
|     abc
 | |
| \= Expect no match
 | |
|     qqq\nabc
 | |
|     abc\nzzz
 | |
|     qqq\nabc\nzzz
 | |
| 
 | |
| /\Aabc\Z/m
 | |
|     abc
 | |
|     abc\n 
 | |
| \= Expect no match
 | |
|     qqq\nabc
 | |
|     abc\nzzz
 | |
|     qqq\nabc\nzzz
 | |
|     
 | |
| /\A(.)*\Z/s
 | |
|     abc\ndef
 | |
| 
 | |
| /\A(.)*\Z/m
 | |
| \= Expect no match
 | |
|     abc\ndef
 | |
| 
 | |
| /(?:b)|(?::+)/
 | |
|     b::c
 | |
|     c::b
 | |
| 
 | |
| /[-az]+/
 | |
|     az-
 | |
| \= Expect no match
 | |
|     b
 | |
| 
 | |
| /[az-]+/
 | |
|     za-
 | |
| \= Expect no match
 | |
|     b
 | |
| 
 | |
| /[a\-z]+/
 | |
|     a-z
 | |
| \= Expect no match
 | |
|     b
 | |
| 
 | |
| /[a-z]+/
 | |
|     abcdxyz
 | |
| 
 | |
| /[\d-]+/
 | |
|     12-34
 | |
| \= Expect no match
 | |
|     aaa
 | |
| 
 | |
| /[\d-z]+/
 | |
|     12-34z
 | |
| \= Expect no match
 | |
|     aaa
 | |
| 
 | |
| /\x5c/
 | |
|     \\
 | |
| 
 | |
| /\x20Z/
 | |
|     the Zoo
 | |
| \= Expect no match
 | |
|     Zulu
 | |
| 
 | |
| /(abc)\1/i
 | |
|     abcabc
 | |
|     ABCabc
 | |
|     abcABC
 | |
| 
 | |
| /abc$/
 | |
|     abc
 | |
|     abc\n
 | |
| \= Expect no match
 | |
|     abc\ndef
 | |
| 
 | |
| /(abc)\123/
 | |
|     abc\x53
 | |
| 
 | |
| /(abc)\223/
 | |
|     abc\x93
 | |
| 
 | |
| /(abc)\323/
 | |
|     abc\xd3
 | |
| 
 | |
| /(abc)\100/
 | |
|     abc\x40
 | |
|     abc\100
 | |
| 
 | |
| /(abc)\1000/
 | |
|     abc\x400
 | |
|     abc\x40\x30
 | |
|     abc\1000
 | |
|     abc\100\x30
 | |
|     abc\100\060
 | |
|     abc\100\60
 | |
|     
 | |
| /^(A)(B)(C)(D)(E)(F)(G)(H)(I)\8\9$/
 | |
|     ABCDEFGHIHI 
 | |
| 
 | |
| /^[A\8B\9C]+$/
 | |
|     A8B9C
 | |
| \= Expect no match 
 | |
|     A8B9C\x00
 | |
| 
 | |
| /(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
 | |
|     abcdefghijkllS
 | |
| 
 | |
| /(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
 | |
|     abcdefghijk\12S
 | |
| 
 | |
| /a{0}bc/
 | |
|     bc
 | |
| 
 | |
| /(a|(bc)){0,0}?xyz/
 | |
|     xyz
 | |
| 
 | |
| /abc[\10]de/
 | |
|     abc\010de
 | |
| 
 | |
| /abc[\1]de/
 | |
|     abc\1de
 | |
| 
 | |
| /(abc)[\1]de/
 | |
|     abc\1de
 | |
| 
 | |
| /(?s)a.b/
 | |
|     a\nb
 | |
| 
 | |
| /^([^a])([^\b])([^c]*)([^d]{3,4})/
 | |
|     baNOTccccd
 | |
|     baNOTcccd
 | |
|     baNOTccd
 | |
|     bacccd
 | |
| \= Expect no match
 | |
|     anything
 | |
|     b\bc   
 | |
|     baccd
 | |
| 
 | |
| /[^a]/
 | |
|     Abc
 | |
|   
 | |
| /[^a]/i
 | |
|     Abc 
 | |
| 
 | |
| /[^a]+/
 | |
|     AAAaAbc
 | |
|   
 | |
| /[^a]+/i
 | |
|     AAAaAbc 
 | |
| 
 | |
| /[^a]+/
 | |
|     bbb\nccc
 | |
|    
 | |
| /[^k]$/
 | |
|     abc
 | |
| \= Expect no match
 | |
|     abk   
 | |
|    
 | |
| /[^k]{2,3}$/
 | |
|     abc
 | |
|     kbc
 | |
|     kabc 
 | |
| \= Expect no match
 | |
|     abk
 | |
|     akb
 | |
|     akk 
 | |
| 
 | |
| /^\d{8,}\@.+[^k]$/
 | |
|     12345678\@a.b.c.d
 | |
|     123456789\@x.y.z
 | |
| \= Expect no match
 | |
|     12345678\@x.y.uk
 | |
|     1234567\@a.b.c.d       
 | |
| 
 | |
| /(a)\1{8,}/
 | |
|     aaaaaaaaa
 | |
|     aaaaaaaaaa
 | |
| \= Expect no match
 | |
|     aaaaaaa   
 | |
| 
 | |
| /[^a]/
 | |
|     aaaabcd
 | |
|     aaAabcd 
 | |
| 
 | |
| /[^a]/i
 | |
|     aaaabcd
 | |
|     aaAabcd 
 | |
| 
 | |
| /[^az]/
 | |
|     aaaabcd
 | |
|     aaAabcd 
 | |
| 
 | |
| /[^az]/i
 | |
|     aaaabcd
 | |
|     aaAabcd 
 | |
| 
 | |
| /\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377/
 | |
|  \000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377
 | |
| 
 | |
| /P[^*]TAIRE[^*]{1,6}?LL/
 | |
|     xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
 | |
| 
 | |
| /P[^*]TAIRE[^*]{1,}?LL/
 | |
|     xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
 | |
| 
 | |
| /(\.\d\d[1-9]?)\d+/
 | |
|     1.230003938
 | |
|     1.875000282   
 | |
|     1.235  
 | |
|                   
 | |
| /(\.\d\d((?=0)|\d(?=\d)))/
 | |
|     1.230003938      
 | |
|     1.875000282
 | |
| \= Expect no match 
 | |
|     1.235 
 | |
|     
 | |
| /a(?)b/
 | |
|     ab 
 | |
|  
 | |
| /\b(foo)\s+(\w+)/i
 | |
|     Food is on the foo table
 | |
|     
 | |
| /foo(.*)bar/
 | |
|     The food is under the bar in the barn.
 | |
|     
 | |
| /foo(.*?)bar/
 | |
|     The food is under the bar in the barn.
 | |
| 
 | |
| /(.*)(\d*)/
 | |
|     I have 2 numbers: 53147
 | |
|     
 | |
| /(.*)(\d+)/
 | |
|     I have 2 numbers: 53147
 | |
|  
 | |
| /(.*?)(\d*)/
 | |
|     I have 2 numbers: 53147
 | |
| 
 | |
| /(.*?)(\d+)/
 | |
|     I have 2 numbers: 53147
 | |
| 
 | |
| /(.*)(\d+)$/
 | |
|     I have 2 numbers: 53147
 | |
| 
 | |
| /(.*?)(\d+)$/
 | |
|     I have 2 numbers: 53147
 | |
| 
 | |
| /(.*)\b(\d+)$/
 | |
|     I have 2 numbers: 53147
 | |
| 
 | |
| /(.*\D)(\d+)$/
 | |
|     I have 2 numbers: 53147
 | |
| 
 | |
| /^\D*(?!123)/
 | |
|     ABC123
 | |
|      
 | |
| /^(\D*)(?=\d)(?!123)/
 | |
|     ABC445
 | |
| \= Expect no match
 | |
|     ABC123
 | |
|     
 | |
| /^[W-]46]/
 | |
|     W46]789 
 | |
|     -46]789
 | |
| \= Expect no match
 | |
|     Wall
 | |
|     Zebra
 | |
|     42
 | |
|     [abcd] 
 | |
|     ]abcd[
 | |
|        
 | |
| /^[W-\]46]/
 | |
|     W46]789 
 | |
|     Wall
 | |
|     Zebra
 | |
|     Xylophone  
 | |
|     42
 | |
|     [abcd] 
 | |
|     ]abcd[
 | |
|     \\backslash 
 | |
| \= Expect no match
 | |
|     -46]789
 | |
|     well
 | |
|     
 | |
| /\d\d\/\d\d\/\d\d\d\d/
 | |
|     01/01/2000
 | |
| 
 | |
| /word (?:[a-zA-Z0-9]+ ){0,10}otherword/
 | |
|     word cat dog elephant mussel cow horse canary baboon snake shark otherword
 | |
| \= Expect no match
 | |
|     word cat dog elephant mussel cow horse canary baboon snake shark
 | |
| 
 | |
| /word (?:[a-zA-Z0-9]+ ){0,300}otherword/
 | |
| \= Expect no match
 | |
|     word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
 | |
| 
 | |
| /^(a){0,0}/
 | |
|     bcd
 | |
|     abc
 | |
|     aab     
 | |
| 
 | |
| /^(a){0,1}/
 | |
|     bcd
 | |
|     abc
 | |
|     aab  
 | |
| 
 | |
| /^(a){0,2}/
 | |
|     bcd
 | |
|     abc
 | |
|     aab  
 | |
| 
 | |
| /^(a){0,3}/
 | |
|     bcd
 | |
|     abc
 | |
|     aab
 | |
|     aaa   
 | |
| 
 | |
| /^(a){0,}/
 | |
|     bcd
 | |
|     abc
 | |
|     aab
 | |
|     aaa
 | |
|     aaaaaaaa    
 | |
| 
 | |
| /^(a){1,1}/
 | |
|     abc
 | |
|     aab  
 | |
| \= Expect no match
 | |
|     bcd
 | |
| 
 | |
| /^(a){1,2}/
 | |
|     abc
 | |
|     aab  
 | |
| \= Expect no match
 | |
|     bcd
 | |
| 
 | |
| /^(a){1,3}/
 | |
|     abc
 | |
|     aab
 | |
|     aaa   
 | |
| \= Expect no match
 | |
|     bcd
 | |
| 
 | |
| /^(a){1,}/
 | |
|     abc
 | |
|     aab
 | |
|     aaa
 | |
|     aaaaaaaa    
 | |
| \= Expect no match
 | |
|     bcd
 | |
| 
 | |
| /.*\.gif/
 | |
|     borfle\nbib.gif\nno
 | |
| 
 | |
| /.{0,}\.gif/
 | |
|     borfle\nbib.gif\nno
 | |
| 
 | |
| /.*\.gif/m
 | |
|     borfle\nbib.gif\nno
 | |
| 
 | |
| /.*\.gif/s
 | |
|     borfle\nbib.gif\nno
 | |
| 
 | |
| /.*\.gif/ms
 | |
|     borfle\nbib.gif\nno
 | |
|     
 | |
| /.*$/
 | |
|     borfle\nbib.gif\nno
 | |
| 
 | |
| /.*$/m
 | |
|     borfle\nbib.gif\nno
 | |
| 
 | |
| /.*$/s
 | |
|     borfle\nbib.gif\nno
 | |
| 
 | |
| /.*$/ms
 | |
|     borfle\nbib.gif\nno
 | |
|     
 | |
| /.*$/
 | |
|     borfle\nbib.gif\nno\n
 | |
| 
 | |
| /.*$/m
 | |
|     borfle\nbib.gif\nno\n
 | |
| 
 | |
| /.*$/s
 | |
|     borfle\nbib.gif\nno\n
 | |
| 
 | |
| /.*$/ms
 | |
|     borfle\nbib.gif\nno\n
 | |
|     
 | |
| /(.*X|^B)/
 | |
|     abcde\n1234Xyz
 | |
|     BarFoo 
 | |
| \= Expect no match
 | |
|     abcde\nBar  
 | |
| 
 | |
| /(.*X|^B)/m
 | |
|     abcde\n1234Xyz
 | |
|     BarFoo 
 | |
|     abcde\nBar  
 | |
| 
 | |
| /(.*X|^B)/s
 | |
|     abcde\n1234Xyz
 | |
|     BarFoo 
 | |
| \= Expect no match
 | |
|     abcde\nBar  
 | |
| 
 | |
| /(.*X|^B)/ms
 | |
|     abcde\n1234Xyz
 | |
|     BarFoo 
 | |
|     abcde\nBar  
 | |
| 
 | |
| /(?s)(.*X|^B)/
 | |
|     abcde\n1234Xyz
 | |
|     BarFoo 
 | |
| \= Expect no match 
 | |
|     abcde\nBar  
 | |
| 
 | |
| /(?s:.*X|^B)/
 | |
|     abcde\n1234Xyz
 | |
|     BarFoo 
 | |
| \= Expect no match 
 | |
|     abcde\nBar  
 | |
| 
 | |
| /^.*B/
 | |
| \= Expect no match
 | |
|     abc\nB
 | |
|      
 | |
| /(?s)^.*B/
 | |
|     abc\nB
 | |
| 
 | |
| /(?m)^.*B/
 | |
|     abc\nB
 | |
|      
 | |
| /(?ms)^.*B/
 | |
|     abc\nB
 | |
| 
 | |
| /(?ms)^B/
 | |
|     abc\nB
 | |
| 
 | |
| /(?s)B$/
 | |
|     B\n
 | |
| 
 | |
| /^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
 | |
|     123456654321
 | |
|   
 | |
| /^\d\d\d\d\d\d\d\d\d\d\d\d/
 | |
|     123456654321 
 | |
| 
 | |
| /^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
 | |
|     123456654321
 | |
|   
 | |
| /^[abc]{12}/
 | |
|     abcabcabcabc
 | |
|     
 | |
| /^[a-c]{12}/
 | |
|     abcabcabcabc
 | |
|     
 | |
| /^(a|b|c){12}/
 | |
|     abcabcabcabc 
 | |
| 
 | |
| /^[abcdefghijklmnopqrstuvwxy0123456789]/
 | |
|     n
 | |
| \= Expect no match 
 | |
|     z 
 | |
| 
 | |
| /abcde{0,0}/
 | |
|     abcd
 | |
| \= Expect no match
 | |
|     abce  
 | |
| 
 | |
| /ab[cd]{0,0}e/
 | |
|     abe
 | |
| \= Expect no match
 | |
|     abcde 
 | |
|     
 | |
| /ab(c){0,0}d/
 | |
|     abd
 | |
| \= Expect no match
 | |
|     abcd   
 | |
| 
 | |
| /a(b*)/
 | |
|     a
 | |
|     ab
 | |
|     abbbb
 | |
| \= Expect no match
 | |
|     bbbbb    
 | |
|     
 | |
| /ab\d{0}e/
 | |
|     abe
 | |
| \= Expect no match
 | |
|     ab1e   
 | |
|     
 | |
| /"([^\\"]+|\\.)*"/
 | |
|     the \"quick\" brown fox
 | |
|     \"the \\\"quick\\\" brown fox\" 
 | |
| 
 | |
| /.*?/g,aftertext
 | |
|     abc
 | |
|   
 | |
| /\b/g,aftertext
 | |
|     abc 
 | |
| 
 | |
| /\b/g,aftertext
 | |
|     abc 
 | |
| 
 | |
| //g
 | |
|     abc
 | |
| 
 | |
| /<tr([\w\W\s\d][^<>]{0,})><TD([\w\W\s\d][^<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][^<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><\/TR>/is
 | |
|   <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
 | |
| 
 | |
| /a[^a]b/
 | |
|     acb
 | |
|     a\nb
 | |
|     
 | |
| /a.b/
 | |
|     acb
 | |
| \= Expect no match 
 | |
|     a\nb   
 | |
|     
 | |
| /a[^a]b/s
 | |
|     acb
 | |
|     a\nb  
 | |
|     
 | |
| /a.b/s
 | |
|     acb
 | |
|     a\nb  
 | |
| 
 | |
| /^(b+?|a){1,2}?c/
 | |
|     bac
 | |
|     bbac
 | |
|     bbbac
 | |
|     bbbbac
 | |
|     bbbbbac 
 | |
| 
 | |
| /^(b+|a){1,2}?c/
 | |
|     bac
 | |
|     bbac
 | |
|     bbbac
 | |
|     bbbbac
 | |
|     bbbbbac 
 | |
|     
 | |
| /(?!\A)x/m
 | |
|     a\bx\n
 | |
|     a\nx\n
 | |
| \= Expect no match     
 | |
|     x\nb\n
 | |
|     
 | |
| /(A|B)*?CD/
 | |
|     CD 
 | |
|     
 | |
| /(A|B)*CD/
 | |
|     CD 
 | |
| 
 | |
| /(AB)*?\1/
 | |
|     ABABAB
 | |
| 
 | |
| /(AB)*\1/
 | |
|     ABABAB
 | |
|     
 | |
| /(?<!bar)foo/
 | |
|     foo
 | |
|     catfood
 | |
|     arfootle
 | |
|     rfoosh
 | |
| \= Expect no match
 | |
|     barfoo
 | |
|     towbarfoo
 | |
| 
 | |
| /\w{3}(?<!bar)foo/
 | |
|     catfood
 | |
| \= Expect no match
 | |
|     foo
 | |
|     barfoo
 | |
|     towbarfoo
 | |
| 
 | |
| /(?<=(foo)a)bar/
 | |
|     fooabar
 | |
| \= Expect no match
 | |
|     bar
 | |
|     foobbar
 | |
|       
 | |
| /\Aabc\z/m
 | |
|     abc
 | |
| \= Expect no match
 | |
|     abc\n   
 | |
|     qqq\nabc
 | |
|     abc\nzzz
 | |
|     qqq\nabc\nzzz
 | |
| 
 | |
| "(?>.*/)foo"
 | |
|     /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
 | |
| \= Expect no match     
 | |
|     /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
 | |
| 
 | |
| /(?>(\.\d\d[1-9]?))\d+/
 | |
|     1.230003938
 | |
|     1.875000282
 | |
| \= Expect no match 
 | |
|     1.235 
 | |
| 
 | |
| /^((?>\w+)|(?>\s+))*$/
 | |
|     now is the time for all good men to come to the aid of the party
 | |
| \= Expect no match
 | |
|     this is not a line with only words and spaces!
 | |
|     
 | |
| /(\d+)(\w)/
 | |
|     12345a
 | |
|     12345+ 
 | |
| 
 | |
| /((?>\d+))(\w)/
 | |
|     12345a
 | |
| \= Expect no match
 | |
|     12345+ 
 | |
| 
 | |
| /(?>a+)b/
 | |
|     aaab
 | |
| 
 | |
| /((?>a+)b)/
 | |
|     aaab
 | |
| 
 | |
| /(?>(a+))b/
 | |
|     aaab
 | |
| 
 | |
| /(?>b)+/
 | |
|     aaabbbccc
 | |
| 
 | |
| /(?>a+|b+|c+)*c/
 | |
|     aaabbbbccccd
 | |
| 
 | |
| /((?>[^()]+)|\([^()]*\))+/
 | |
|     ((abc(ade)ufh()()x
 | |
|     
 | |
| /\(((?>[^()]+)|\([^()]+\))+\)/
 | |
|     (abc)
 | |
|     (abc(def)xyz)
 | |
| \= Expect no match
 | |
|     ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   
 | |
| 
 | |
| /a(?-i)b/i
 | |
|     ab
 | |
|     Ab
 | |
| \= Expect no match 
 | |
|     aB
 | |
|     AB
 | |
|         
 | |
| /(a (?x)b c)d e/
 | |
|     a bcd e
 | |
| \= Expect no match
 | |
|     a b cd e
 | |
|     abcd e   
 | |
|     a bcde 
 | |
|  
 | |
| /(a b(?x)c d (?-x)e f)/
 | |
|     a bcde f
 | |
| \= Expect no match
 | |
|     abcdef  
 | |
| 
 | |
| /(a(?i)b)c/
 | |
|     abc
 | |
|     aBc
 | |
| \= Expect no match
 | |
|     abC
 | |
|     aBC  
 | |
|     Abc
 | |
|     ABc
 | |
|     ABC
 | |
|     AbC
 | |
|     
 | |
| /a(?i:b)c/
 | |
|     abc
 | |
|     aBc
 | |
| \= Expect no match 
 | |
|     ABC
 | |
|     abC
 | |
|     aBC
 | |
|     
 | |
| /a(?i:b)*c/
 | |
|     aBc
 | |
|     aBBc
 | |
| \= Expect no match 
 | |
|     aBC
 | |
|     aBBC
 | |
|     
 | |
| /a(?=b(?i)c)\w\wd/
 | |
|     abcd
 | |
|     abCd
 | |
| \= Expect no match
 | |
|     aBCd
 | |
|     abcD     
 | |
|     
 | |
| /(?s-i:more.*than).*million/i
 | |
|     more than million
 | |
|     more than MILLION
 | |
|     more \n than Million 
 | |
| \= Expect no match
 | |
|     MORE THAN MILLION    
 | |
|     more \n than \n million 
 | |
| 
 | |
| /(?:(?s-i)more.*than).*million/i
 | |
|     more than million
 | |
|     more than MILLION
 | |
|     more \n than Million 
 | |
| \= Expect no match
 | |
|     MORE THAN MILLION    
 | |
|     more \n than \n million 
 | |
|     
 | |
| /(?>a(?i)b+)+c/
 | |
|     abc
 | |
|     aBbc
 | |
|     aBBc 
 | |
| \= Expect no match
 | |
|     Abc
 | |
|     abAb    
 | |
|     abbC 
 | |
|     
 | |
| /(?=a(?i)b)\w\wc/
 | |
|     abc
 | |
|     aBc
 | |
| \= Expect no match
 | |
|     Ab 
 | |
|     abC
 | |
|     aBC     
 | |
|     
 | |
| /(?<=a(?i)b)(\w\w)c/
 | |
|     abxxc
 | |
|     aBxxc
 | |
| \= Expect no match
 | |
|     Abxxc
 | |
|     ABxxc
 | |
|     abxxC      
 | |
| 
 | |
| /(?:(a)|b)(?(1)A|B)/
 | |
|     aA
 | |
|     bB
 | |
| \= Expect no match
 | |
|     aB
 | |
|     bA    
 | |
| 
 | |
| /^(a)?(?(1)a|b)+$/
 | |
|     aa
 | |
|     b
 | |
|     bb  
 | |
| \= Expect no match
 | |
|     ab   
 | |
|     
 | |
| # Perl gets this next one wrong if the pattern ends with $; in that case it
 | |
| # fails to match "12". 
 | |
| 
 | |
| /^(?(?=abc)\w{3}:|\d\d)/
 | |
|     abc:
 | |
|     12
 | |
|     123
 | |
| \= Expect no match
 | |
|     xyz    
 | |
| 
 | |
| /^(?(?!abc)\d\d|\w{3}:)$/
 | |
|     abc:
 | |
|     12
 | |
| \= Expect no match
 | |
|     123
 | |
|     xyz    
 | |
|     
 | |
| /(?(?<=foo)bar|cat)/
 | |
|     foobar
 | |
|     cat
 | |
|     fcat
 | |
|     focat   
 | |
| \= Expect no match
 | |
|     foocat  
 | |
| 
 | |
| /(?(?<!foo)cat|bar)/
 | |
|     foobar
 | |
|     cat
 | |
|     fcat
 | |
|     focat   
 | |
| \= Expect no match
 | |
|     foocat  
 | |
| 
 | |
| /( \( )? [^()]+ (?(1) \) |) /x
 | |
|     abcd
 | |
|     (abcd)
 | |
|     the quick (abcd) fox
 | |
|     (abcd   
 | |
| 
 | |
| /( \( )? [^()]+ (?(1) \) ) /x
 | |
|     abcd
 | |
|     (abcd)
 | |
|     the quick (abcd) fox
 | |
|     (abcd   
 | |
| 
 | |
| /^(?(2)a|(1)(2))+$/
 | |
|     12
 | |
|     12a
 | |
|     12aa
 | |
| \= Expect no match
 | |
|     1234    
 | |
| 
 | |
| /((?i)blah)\s+\1/
 | |
|     blah blah
 | |
|     BLAH BLAH
 | |
|     Blah Blah
 | |
|     blaH blaH
 | |
| \= Expect no match
 | |
|     blah BLAH
 | |
|     Blah blah      
 | |
|     blaH blah 
 | |
| 
 | |
| /((?i)blah)\s+(?i:\1)/
 | |
|     blah blah
 | |
|     BLAH BLAH
 | |
|     Blah Blah
 | |
|     blaH blaH
 | |
|     blah BLAH
 | |
|     Blah blah      
 | |
|     blaH blah 
 | |
| 
 | |
| /(?>a*)*/
 | |
|     a
 | |
|     aa
 | |
|     aaaa
 | |
|     
 | |
| /(abc|)+/
 | |
|     abc
 | |
|     abcabc
 | |
|     abcabcabc
 | |
|     xyz      
 | |
| 
 | |
| /([a]*)*/
 | |
|     a
 | |
|     aaaaa 
 | |
|  
 | |
| /([ab]*)*/
 | |
|     a
 | |
|     b
 | |
|     ababab
 | |
|     aaaabcde
 | |
|     bbbb    
 | |
|  
 | |
| /([^a]*)*/
 | |
|     b
 | |
|     bbbb
 | |
|     aaa   
 | |
|  
 | |
| /([^ab]*)*/
 | |
|     cccc
 | |
|     abab  
 | |
|  
 | |
| /([a]*?)*/
 | |
|     a
 | |
|     aaaa 
 | |
|  
 | |
| /([ab]*?)*/
 | |
|     a
 | |
|     b
 | |
|     abab
 | |
|     baba   
 | |
|  
 | |
| /([^a]*?)*/
 | |
|     b
 | |
|     bbbb
 | |
|     aaa   
 | |
|  
 | |
| /([^ab]*?)*/
 | |
|     c
 | |
|     cccc
 | |
|     baba   
 | |
|  
 | |
| /(?>a*)*/
 | |
|     a
 | |
|     aaabcde 
 | |
|  
 | |
| /((?>a*))*/
 | |
|     aaaaa
 | |
|     aabbaa 
 | |
|  
 | |
| /((?>a*?))*/
 | |
|     aaaaa
 | |
|     aabbaa 
 | |
| 
 | |
| /(?(?=[^a-z]+[a-z])  \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} ) /x
 | |
|     12-sep-98
 | |
|     12-09-98
 | |
| \= Expect no match
 | |
|     sep-12-98
 | |
|         
 | |
| /(?<=(foo))bar\1/
 | |
|     foobarfoo
 | |
|     foobarfootling 
 | |
| \= Expect no match
 | |
|     foobar
 | |
|     barfoo   
 | |
| 
 | |
| /(?i:saturday|sunday)/
 | |
|     saturday
 | |
|     sunday
 | |
|     Saturday
 | |
|     Sunday
 | |
|     SATURDAY
 | |
|     SUNDAY
 | |
|     SunDay
 | |
|     
 | |
| /(a(?i)bc|BB)x/
 | |
|     abcx
 | |
|     aBCx
 | |
|     bbx
 | |
|     BBx
 | |
| \= Expect no match
 | |
|     abcX
 | |
|     aBCX
 | |
|     bbX
 | |
|     BBX               
 | |
| 
 | |
| /^([ab](?i)[cd]|[ef])/
 | |
|     ac
 | |
|     aC
 | |
|     bD
 | |
|     elephant
 | |
|     Europe 
 | |
|     frog
 | |
|     France
 | |
| \= Expect no match
 | |
|     Africa     
 | |
| 
 | |
| /^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
 | |
|     ab
 | |
|     aBd
 | |
|     xy
 | |
|     xY
 | |
|     zebra
 | |
|     Zambesi
 | |
| \= Expect no match
 | |
|     aCD  
 | |
|     XY  
 | |
| 
 | |
| /(?<=foo\n)^bar/m
 | |
|     foo\nbar
 | |
| \= Expect no match
 | |
|     bar
 | |
|     baz\nbar   
 | |
| 
 | |
| /(?<=(?<!foo)bar)baz/
 | |
|     barbaz
 | |
|     barbarbaz 
 | |
|     koobarbaz 
 | |
| \= Expect no match
 | |
|     baz
 | |
|     foobarbaz 
 | |
| 
 | |
| # The cases of aaaa and aaaaaa are missed out below because Perl does things
 | |
| # differently. We know that odd, and maybe incorrect, things happen with
 | |
| # recursive references in Perl, as far as 5.11.3 - see some stuff in test #2.
 | |
| 
 | |
| /^(a\1?){4}$/
 | |
|     aaaaa
 | |
|     aaaaaaa
 | |
|     aaaaaaaaaa
 | |
| \= Expect no match
 | |
|     a
 | |
|     aa
 | |
|     aaa
 | |
|     aaaaaaaa
 | |
|     aaaaaaaaa
 | |
|     aaaaaaaaaaa
 | |
|     aaaaaaaaaaaa
 | |
|     aaaaaaaaaaaaa
 | |
|     aaaaaaaaaaaaaa
 | |
|     aaaaaaaaaaaaaaa
 | |
|     aaaaaaaaaaaaaaaa
 | |
| 
 | |
| /^(a\1?)(a\1?)(a\2?)(a\3?)$/
 | |
|     aaaa
 | |
|     aaaaa
 | |
|     aaaaaa
 | |
|     aaaaaaa
 | |
|     aaaaaaaaaa
 | |
| \= Expect no match
 | |
|     a
 | |
|     aa
 | |
|     aaa
 | |
|     aaaaaaaa
 | |
|     aaaaaaaaa
 | |
|     aaaaaaaaaaa
 | |
|     aaaaaaaaaaaa
 | |
|     aaaaaaaaaaaaa
 | |
|     aaaaaaaaaaaaaa
 | |
|     aaaaaaaaaaaaaaa
 | |
|     aaaaaaaaaaaaaaaa               
 | |
| 
 | |
| # The following tests are taken from the Perl 5.005 test suite; some of them
 | |
| # are compatible with 5.004, but I'd rather not have to sort them out.
 | |
| 
 | |
| /abc/
 | |
|     abc
 | |
|     xabcy
 | |
|     ababc
 | |
| \= Expect no match
 | |
|     xbc
 | |
|     axc
 | |
|     abx
 | |
| 
 | |
| /ab*c/
 | |
|     abc
 | |
| 
 | |
| /ab*bc/
 | |
|     abc
 | |
|     abbc
 | |
|     abbbbc
 | |
| 
 | |
| /.{1}/
 | |
|     abbbbc
 | |
| 
 | |
| /.{3,4}/
 | |
|     abbbbc
 | |
| 
 | |
| /ab{0,}bc/
 | |
|     abbbbc
 | |
| 
 | |
| /ab+bc/
 | |
|     abbc
 | |
| \= Expect no match
 | |
|     abc
 | |
|     abq
 | |
| 
 | |
| /ab{1,}bc/
 | |
| 
 | |
| /ab+bc/
 | |
|     abbbbc
 | |
| 
 | |
| /ab{1,}bc/
 | |
|     abbbbc
 | |
| 
 | |
| /ab{1,3}bc/
 | |
|     abbbbc
 | |
| 
 | |
| /ab{3,4}bc/
 | |
|     abbbbc
 | |
| 
 | |
| /ab{4,5}bc/
 | |
| \= Expect no match
 | |
|     abq
 | |
|     abbbbc
 | |
| 
 | |
| /ab?bc/
 | |
|     abbc
 | |
|     abc
 | |
| 
 | |
| /ab{0,1}bc/
 | |
|     abc
 | |
| 
 | |
| /ab?bc/
 | |
| 
 | |
| /ab?c/
 | |
|     abc
 | |
| 
 | |
| /ab{0,1}c/
 | |
|     abc
 | |
| 
 | |
| /^abc$/
 | |
|     abc
 | |
| \= Expect no match
 | |
|     abbbbc
 | |
|     abcc
 | |
| 
 | |
| /^abc/
 | |
|     abcc
 | |
| 
 | |
| /^abc$/
 | |
| 
 | |
| /abc$/
 | |
|     aabc
 | |
| \= Expect no match
 | |
|     aabcd
 | |
| 
 | |
| /^/
 | |
|     abc
 | |
| 
 | |
| /$/
 | |
|     abc
 | |
| 
 | |
| /a.c/
 | |
|     abc
 | |
|     axc
 | |
| 
 | |
| /a.*c/
 | |
|     axyzc
 | |
| 
 | |
| /a[bc]d/
 | |
|     abd
 | |
| \= Expect no match
 | |
|     axyzd
 | |
|     abc
 | |
| 
 | |
| /a[b-d]e/
 | |
|     ace
 | |
| 
 | |
| /a[b-d]/
 | |
|     aac
 | |
| 
 | |
| /a[-b]/
 | |
|     a-
 | |
| 
 | |
| /a[b-]/
 | |
|     a-
 | |
| 
 | |
| /a]/
 | |
|     a]
 | |
| 
 | |
| /a[]]b/
 | |
|     a]b
 | |
| 
 | |
| /a[^bc]d/
 | |
|     aed
 | |
| \= Expect no match
 | |
|     abd
 | |
|     abd
 | |
| 
 | |
| /a[^-b]c/
 | |
|     adc
 | |
| 
 | |
| /a[^]b]c/
 | |
|     adc
 | |
|     a-c
 | |
| \= Expect no match
 | |
|     a]c
 | |
| 
 | |
| /\ba\b/
 | |
|     a-
 | |
|     -a
 | |
|     -a-
 | |
| 
 | |
| /\by\b/
 | |
| \= Expect no match
 | |
|     xy
 | |
|     yz
 | |
|     xyz
 | |
| 
 | |
| /\Ba\B/
 | |
| \= Expect no match
 | |
|     a-
 | |
|     -a
 | |
|     -a-
 | |
| 
 | |
| /\By\b/
 | |
|     xy
 | |
| 
 | |
| /\by\B/
 | |
|     yz
 | |
| 
 | |
| /\By\B/
 | |
|     xyz
 | |
| 
 | |
| /\w/
 | |
|     a
 | |
| 
 | |
| /\W/
 | |
|     -
 | |
| \= Expect no match
 | |
|     a
 | |
| 
 | |
| /a\sb/
 | |
|     a b
 | |
| 
 | |
| /a\Sb/
 | |
|     a-b
 | |
| \= Expect no match
 | |
|     a b
 | |
| 
 | |
| /\d/
 | |
|     1
 | |
| 
 | |
| /\D/
 | |
|     -
 | |
| \= Expect no match
 | |
|     1
 | |
| 
 | |
| /[\w]/
 | |
|     a
 | |
| 
 | |
| /[\W]/
 | |
|     -
 | |
| \= Expect no match
 | |
|     a
 | |
| 
 | |
| /a[\s]b/
 | |
|     a b
 | |
| 
 | |
| /a[\S]b/
 | |
|     a-b
 | |
| \= Expect no match
 | |
|     a b
 | |
| 
 | |
| /[\d]/
 | |
|     1
 | |
| 
 | |
| /[\D]/
 | |
|     -
 | |
| \= Expect no match
 | |
|     1
 | |
| 
 | |
| /ab|cd/
 | |
|     abc
 | |
|     abcd
 | |
| 
 | |
| /()ef/
 | |
|     def
 | |
| 
 | |
| /$b/
 | |
| 
 | |
| /a\(b/
 | |
|     a(b
 | |
| 
 | |
| /a\(*b/
 | |
|     ab
 | |
|     a((b
 | |
| 
 | |
| /a\\b/
 | |
|     a\\b
 | |
| 
 | |
| /((a))/
 | |
|     abc
 | |
| 
 | |
| /(a)b(c)/
 | |
|     abc
 | |
| 
 | |
| /a+b+c/
 | |
|     aabbabc
 | |
| 
 | |
| /a{1,}b{1,}c/
 | |
|     aabbabc
 | |
| 
 | |
| /a.+?c/
 | |
|     abcabc
 | |
| 
 | |
| /(a+|b)*/
 | |
|     ab
 | |
| 
 | |
| /(a+|b){0,}/
 | |
|     ab
 | |
| 
 | |
| /(a+|b)+/
 | |
|     ab
 | |
| 
 | |
| /(a+|b){1,}/
 | |
|     ab
 | |
| 
 | |
| /(a+|b)?/
 | |
|     ab
 | |
| 
 | |
| /(a+|b){0,1}/
 | |
|     ab
 | |
| 
 | |
| /[^ab]*/
 | |
|     cde
 | |
| 
 | |
| /abc/
 | |
| \= Expect no match
 | |
|     b
 | |
| 
 | |
| /a*/
 | |
|     \
 | |
| 
 | |
| /([abc])*d/
 | |
|     abbbcd
 | |
| 
 | |
| /([abc])*bcd/
 | |
|     abcd
 | |
| 
 | |
| /a|b|c|d|e/
 | |
|     e
 | |
| 
 | |
| /(a|b|c|d|e)f/
 | |
|     ef
 | |
| 
 | |
| /abcd*efg/
 | |
|     abcdefg
 | |
| 
 | |
| /ab*/
 | |
|     xabyabbbz
 | |
|     xayabbbz
 | |
| 
 | |
| /(ab|cd)e/
 | |
|     abcde
 | |
| 
 | |
| /[abhgefdc]ij/
 | |
|     hij
 | |
| 
 | |
| /^(ab|cd)e/
 | |
| 
 | |
| /(abc|)ef/
 | |
|     abcdef
 | |
| 
 | |
| /(a|b)c*d/
 | |
|     abcd
 | |
| 
 | |
| /(ab|ab*)bc/
 | |
|     abc
 | |
| 
 | |
| /a([bc]*)c*/
 | |
|     abc
 | |
| 
 | |
| /a([bc]*)(c*d)/
 | |
|     abcd
 | |
| 
 | |
| /a([bc]+)(c*d)/
 | |
|     abcd
 | |
| 
 | |
| /a([bc]*)(c+d)/
 | |
|     abcd
 | |
| 
 | |
| /a[bcd]*dcdcde/
 | |
|     adcdcde
 | |
| 
 | |
| /a[bcd]+dcdcde/
 | |
| \= Expect no match
 | |
|     abcde
 | |
|     adcdcde
 | |
| 
 | |
| /(ab|a)b*c/
 | |
|     abc
 | |
| 
 | |
| /((a)(b)c)(d)/
 | |
|     abcd
 | |
| 
 | |
| /[a-zA-Z_][a-zA-Z0-9_]*/
 | |
|     alpha
 | |
| 
 | |
| /^a(bc+|b[eh])g|.h$/
 | |
|     abh
 | |
| 
 | |
| /(bc+d$|ef*g.|h?i(j|k))/
 | |
|     effgz
 | |
|     ij
 | |
|     reffgz
 | |
| \= Expect no match
 | |
|     effg
 | |
|     bcdd
 | |
| 
 | |
| /((((((((((a))))))))))/
 | |
|     a
 | |
| 
 | |
| /((((((((((a))))))))))\10/
 | |
|     aa
 | |
| 
 | |
| /(((((((((a)))))))))/
 | |
|     a
 | |
| 
 | |
| /multiple words of text/
 | |
| \= Expect no match
 | |
|     aa
 | |
|     uh-uh
 | |
| 
 | |
| /multiple words/
 | |
|     multiple words, yeah
 | |
| 
 | |
| /(.*)c(.*)/
 | |
|     abcde
 | |
| 
 | |
| /\((.*), (.*)\)/
 | |
|     (a, b)
 | |
| 
 | |
| /[k]/
 | |
| 
 | |
| /abcd/
 | |
|     abcd
 | |
| 
 | |
| /a(bc)d/
 | |
|     abcd
 | |
| 
 | |
| /a[-]?c/
 | |
|     ac
 | |
| 
 | |
| /(abc)\1/
 | |
|     abcabc
 | |
| 
 | |
| /([a-c]*)\1/
 | |
|     abcabc
 | |
| 
 | |
| /(a)|\1/
 | |
|     a
 | |
|     ab
 | |
| \= Expect no match
 | |
|     x
 | |
| 
 | |
| /(([a-c])b*?\2)*/
 | |
|     ababbbcbc
 | |
| 
 | |
| /(([a-c])b*?\2){3}/
 | |
|     ababbbcbc
 | |
| 
 | |
| /((\3|b)\2(a)x)+/
 | |
|     aaaxabaxbaaxbbax
 | |
| 
 | |
| /((\3|b)\2(a)){2,}/
 | |
|     bbaababbabaaaaabbaaaabba
 | |
| 
 | |
| /abc/i
 | |
|     ABC
 | |
|     XABCY
 | |
|     ABABC
 | |
| \= Expect no match
 | |
|     aaxabxbaxbbx
 | |
|     XBC
 | |
|     AXC
 | |
|     ABX
 | |
| 
 | |
| /ab*c/i
 | |
|     ABC
 | |
| 
 | |
| /ab*bc/i
 | |
|     ABC
 | |
|     ABBC
 | |
| 
 | |
| /ab*?bc/i
 | |
|     ABBBBC
 | |
| 
 | |
| /ab{0,}?bc/i
 | |
|     ABBBBC
 | |
| 
 | |
| /ab+?bc/i
 | |
|     ABBC
 | |
| 
 | |
| /ab+bc/i
 | |
| \= Expect no match
 | |
|     ABC
 | |
|     ABQ
 | |
| 
 | |
| /ab{1,}bc/i
 | |
| 
 | |
| /ab+bc/i
 | |
|     ABBBBC
 | |
| 
 | |
| /ab{1,}?bc/i
 | |
|     ABBBBC
 | |
| 
 | |
| /ab{1,3}?bc/i
 | |
|     ABBBBC
 | |
| 
 | |
| /ab{3,4}?bc/i
 | |
|     ABBBBC
 | |
| 
 | |
| /ab{4,5}?bc/i
 | |
| \= Expect no match
 | |
|     ABQ
 | |
|     ABBBBC
 | |
| 
 | |
| /ab??bc/i
 | |
|     ABBC
 | |
|     ABC
 | |
| 
 | |
| /ab{0,1}?bc/i
 | |
|     ABC
 | |
| 
 | |
| /ab??bc/i
 | |
| 
 | |
| /ab??c/i
 | |
|     ABC
 | |
| 
 | |
| /ab{0,1}?c/i
 | |
|     ABC
 | |
| 
 | |
| /^abc$/i
 | |
|     ABC
 | |
| \= Expect no match
 | |
|     ABBBBC
 | |
|     ABCC
 | |
| 
 | |
| /^abc/i
 | |
|     ABCC
 | |
| 
 | |
| /^abc$/i
 | |
| 
 | |
| /abc$/i
 | |
|     AABC
 | |
| 
 | |
| /^/i
 | |
|     ABC
 | |
| 
 | |
| /$/i
 | |
|     ABC
 | |
| 
 | |
| /a.c/i
 | |
|     ABC
 | |
|     AXC
 | |
| 
 | |
| /a.*?c/i
 | |
|     AXYZC
 | |
| 
 | |
| /a.*c/i
 | |
|     AABC
 | |
| \= Expect no match
 | |
|     AXYZD
 | |
| 
 | |
| /a[bc]d/i
 | |
|     ABD
 | |
| 
 | |
| /a[b-d]e/i
 | |
|     ACE
 | |
| \= Expect no match
 | |
|     ABC
 | |
|     ABD
 | |
| 
 | |
| /a[b-d]/i
 | |
|     AAC
 | |
| 
 | |
| /a[-b]/i
 | |
|     A-
 | |
| 
 | |
| /a[b-]/i
 | |
|     A-
 | |
| 
 | |
| /a]/i
 | |
|     A]
 | |
| 
 | |
| /a[]]b/i
 | |
|     A]B
 | |
| 
 | |
| /a[^bc]d/i
 | |
|     AED
 | |
| 
 | |
| /a[^-b]c/i
 | |
|     ADC
 | |
| \= Expect no match
 | |
|     ABD
 | |
|     A-C
 | |
| 
 | |
| /a[^]b]c/i
 | |
|     ADC
 | |
| 
 | |
| /ab|cd/i
 | |
|     ABC
 | |
|     ABCD
 | |
| 
 | |
| /()ef/i
 | |
|     DEF
 | |
| 
 | |
| /$b/i
 | |
| \= Expect no match
 | |
|     A]C
 | |
|     B
 | |
| 
 | |
| /a\(b/i
 | |
|     A(B
 | |
| 
 | |
| /a\(*b/i
 | |
|     AB
 | |
|     A((B
 | |
| 
 | |
| /a\\b/i
 | |
|     A\\b
 | |
|     a\\B 
 | |
| 
 | |
| /((a))/i
 | |
|     ABC
 | |
| 
 | |
| /(a)b(c)/i
 | |
|     ABC
 | |
| 
 | |
| /a+b+c/i
 | |
|     AABBABC
 | |
| 
 | |
| /a{1,}b{1,}c/i
 | |
|     AABBABC
 | |
| 
 | |
| /a.+?c/i
 | |
|     ABCABC
 | |
| 
 | |
| /a.*?c/i
 | |
|     ABCABC
 | |
| 
 | |
| /a.{0,5}?c/i
 | |
|     ABCABC
 | |
| 
 | |
| /(a+|b)*/i
 | |
|     AB
 | |
| 
 | |
| /(a+|b){0,}/i
 | |
|     AB
 | |
| 
 | |
| /(a+|b)+/i
 | |
|     AB
 | |
| 
 | |
| /(a+|b){1,}/i
 | |
|     AB
 | |
| 
 | |
| /(a+|b)?/i
 | |
|     AB
 | |
| 
 | |
| /(a+|b){0,1}/i
 | |
|     AB
 | |
| 
 | |
| /(a+|b){0,1}?/i
 | |
|     AB
 | |
| 
 | |
| /[^ab]*/i
 | |
|     CDE
 | |
| 
 | |
| /([abc])*d/i
 | |
|     ABBBCD
 | |
| 
 | |
| /([abc])*bcd/i
 | |
|     ABCD
 | |
| 
 | |
| /a|b|c|d|e/i
 | |
|     E
 | |
| 
 | |
| /(a|b|c|d|e)f/i
 | |
|     EF
 | |
| 
 | |
| /abcd*efg/i
 | |
|     ABCDEFG
 | |
| 
 | |
| /ab*/i
 | |
|     XABYABBBZ
 | |
|     XAYABBBZ
 | |
| 
 | |
| /(ab|cd)e/i
 | |
|     ABCDE
 | |
| 
 | |
| /[abhgefdc]ij/i
 | |
|     HIJ
 | |
| 
 | |
| /^(ab|cd)e/i
 | |
| \= Expect no match
 | |
|     ABCDE
 | |
| 
 | |
| /(abc|)ef/i
 | |
|     ABCDEF
 | |
| 
 | |
| /(a|b)c*d/i
 | |
|     ABCD
 | |
| 
 | |
| /(ab|ab*)bc/i
 | |
|     ABC
 | |
| 
 | |
| /a([bc]*)c*/i
 | |
|     ABC
 | |
| 
 | |
| /a([bc]*)(c*d)/i
 | |
|     ABCD
 | |
| 
 | |
| /a([bc]+)(c*d)/i
 | |
|     ABCD
 | |
| 
 | |
| /a([bc]*)(c+d)/i
 | |
|     ABCD
 | |
| 
 | |
| /a[bcd]*dcdcde/i
 | |
|     ADCDCDE
 | |
| 
 | |
| /a[bcd]+dcdcde/i
 | |
| 
 | |
| /(ab|a)b*c/i
 | |
|     ABC
 | |
| 
 | |
| /((a)(b)c)(d)/i
 | |
|     ABCD
 | |
| 
 | |
| /[a-zA-Z_][a-zA-Z0-9_]*/i
 | |
|     ALPHA
 | |
| 
 | |
| /^a(bc+|b[eh])g|.h$/i
 | |
|     ABH
 | |
| 
 | |
| /(bc+d$|ef*g.|h?i(j|k))/i
 | |
|     EFFGZ
 | |
|     IJ
 | |
|     REFFGZ
 | |
| \= Expect no match
 | |
|     ADCDCDE
 | |
|     EFFG
 | |
|     BCDD
 | |
| 
 | |
| /((((((((((a))))))))))/i
 | |
|     A
 | |
| 
 | |
| /((((((((((a))))))))))\10/i
 | |
|     AA
 | |
| 
 | |
| /(((((((((a)))))))))/i
 | |
|     A
 | |
| 
 | |
| /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
 | |
|     A
 | |
| 
 | |
| /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
 | |
|     C
 | |
| 
 | |
| /multiple words of text/i
 | |
| \= Expect no match
 | |
|     AA
 | |
|     UH-UH
 | |
| 
 | |
| /multiple words/i
 | |
|     MULTIPLE WORDS, YEAH
 | |
| 
 | |
| /(.*)c(.*)/i
 | |
|     ABCDE
 | |
| 
 | |
| /\((.*), (.*)\)/i
 | |
|     (A, B)
 | |
| 
 | |
| /[k]/i
 | |
| 
 | |
| /abcd/i
 | |
|     ABCD
 | |
| 
 | |
| /a(bc)d/i
 | |
|     ABCD
 | |
| 
 | |
| /a[-]?c/i
 | |
|     AC
 | |
| 
 | |
| /(abc)\1/i
 | |
|     ABCABC
 | |
| 
 | |
| /([a-c]*)\1/i
 | |
|     ABCABC
 | |
| 
 | |
| /a(?!b)./
 | |
|     abad
 | |
| 
 | |
| /a(?=d)./
 | |
|     abad
 | |
| 
 | |
| /a(?=c|d)./
 | |
|     abad
 | |
| 
 | |
| /a(?:b|c|d)(.)/
 | |
|     ace
 | |
| 
 | |
| /a(?:b|c|d)*(.)/
 | |
|     ace
 | |
| 
 | |
| /a(?:b|c|d)+?(.)/
 | |
|     ace
 | |
|     acdbcdbe
 | |
| 
 | |
| /a(?:b|c|d)+(.)/
 | |
|     acdbcdbe
 | |
| 
 | |
| /a(?:b|c|d){2}(.)/
 | |
|     acdbcdbe
 | |
| 
 | |
| /a(?:b|c|d){4,5}(.)/
 | |
|     acdbcdbe
 | |
| 
 | |
| /a(?:b|c|d){4,5}?(.)/
 | |
|     acdbcdbe
 | |
| 
 | |
| /((foo)|(bar))*/
 | |
|     foobar
 | |
| 
 | |
| /a(?:b|c|d){6,7}(.)/
 | |
|     acdbcdbe
 | |
| 
 | |
| /a(?:b|c|d){6,7}?(.)/
 | |
|     acdbcdbe
 | |
| 
 | |
| /a(?:b|c|d){5,6}(.)/
 | |
|     acdbcdbe
 | |
| 
 | |
| /a(?:b|c|d){5,6}?(.)/
 | |
|     acdbcdbe
 | |
| 
 | |
| /a(?:b|c|d){5,7}(.)/
 | |
|     acdbcdbe
 | |
| 
 | |
| /a(?:b|c|d){5,7}?(.)/
 | |
|     acdbcdbe
 | |
| 
 | |
| /a(?:b|(c|e){1,2}?|d)+?(.)/
 | |
|     ace
 | |
| 
 | |
| /^(.+)?B/
 | |
|     AB
 | |
| 
 | |
| /^([^a-z])|(\^)$/
 | |
|     .
 | |
| 
 | |
| /^[<>]&/
 | |
|     <&OUT
 | |
| 
 | |
| /^(a\1?){4}$/
 | |
|     aaaaaaaaaa
 | |
| \= Expect no match
 | |
|     AB
 | |
|     aaaaaaaaa
 | |
|     aaaaaaaaaaa
 | |
| 
 | |
| /^(a(?(1)\1)){4}$/
 | |
|     aaaaaaaaaa
 | |
| \= Expect no match
 | |
|     aaaaaaaaa
 | |
|     aaaaaaaaaaa
 | |
| 
 | |
| /(?:(f)(o)(o)|(b)(a)(r))*/
 | |
|     foobar
 | |
| 
 | |
| /(?<=a)b/
 | |
|     ab
 | |
| \= Expect no match
 | |
|     cb
 | |
|     b
 | |
| 
 | |
| /(?<!c)b/
 | |
|     ab
 | |
|     b
 | |
|     b
 | |
| 
 | |
| /(?:..)*a/
 | |
|     aba
 | |
| 
 | |
| /(?:..)*?a/
 | |
|     aba
 | |
| 
 | |
| /^(?:b|a(?=(.)))*\1/
 | |
|     abc
 | |
| 
 | |
| /^(){3,5}/
 | |
|     abc
 | |
| 
 | |
| /^(a+)*ax/
 | |
|     aax
 | |
| 
 | |
| /^((a|b)+)*ax/
 | |
|     aax
 | |
| 
 | |
| /^((a|bc)+)*ax/
 | |
|     aax
 | |
| 
 | |
| /(a|x)*ab/
 | |
|     cab
 | |
| 
 | |
| /(a)*ab/
 | |
|     cab
 | |
| 
 | |
| /(?:(?i)a)b/
 | |
|     ab
 | |
| 
 | |
| /((?i)a)b/
 | |
|     ab
 | |
| 
 | |
| /(?:(?i)a)b/
 | |
|     Ab
 | |
| 
 | |
| /((?i)a)b/
 | |
|     Ab
 | |
| 
 | |
| /(?:(?i)a)b/
 | |
| \= Expect no match
 | |
|     cb
 | |
|     aB
 | |
| 
 | |
| /((?i)a)b/
 | |
| 
 | |
| /(?i:a)b/
 | |
|     ab
 | |
| 
 | |
| /((?i:a))b/
 | |
|     ab
 | |
| 
 | |
| /(?i:a)b/
 | |
|     Ab
 | |
| 
 | |
| /((?i:a))b/
 | |
|     Ab
 | |
| 
 | |
| /(?i:a)b/
 | |
| \= Expect no match
 | |
|     aB
 | |
|     aB
 | |
| 
 | |
| /((?i:a))b/
 | |
| 
 | |
| /(?:(?-i)a)b/i
 | |
|     ab
 | |
| 
 | |
| /((?-i)a)b/i
 | |
|     ab
 | |
| 
 | |
| /(?:(?-i)a)b/i
 | |
|     aB
 | |
| 
 | |
| /((?-i)a)b/i
 | |
|     aB
 | |
| 
 | |
| /(?:(?-i)a)b/i
 | |
|     aB
 | |
| \= Expect no match
 | |
|     Ab
 | |
|     AB
 | |
| 
 | |
| /(?-i:a)b/i
 | |
|     ab
 | |
| 
 | |
| /((?-i:a))b/i
 | |
|     ab
 | |
| 
 | |
| /(?-i:a)b/i
 | |
|     aB
 | |
| 
 | |
| /((?-i:a))b/i
 | |
|     aB
 | |
| 
 | |
| /(?-i:a)b/i
 | |
| \= Expect no match
 | |
|     AB
 | |
|     Ab
 | |
| 
 | |
| /((?-i:a))b/i
 | |
| 
 | |
| /(?-i:a)b/i
 | |
|     aB
 | |
| 
 | |
| /((?-i:a))b/i
 | |
|     aB
 | |
| 
 | |
| /(?-i:a)b/i
 | |
| \= Expect no match
 | |
|     Ab
 | |
|     AB
 | |
| 
 | |
| /((?-i:a))b/i
 | |
| 
 | |
| /((?-i:a.))b/i
 | |
| \= Expect no match
 | |
|     AB
 | |
|     a\nB
 | |
| 
 | |
| /((?s-i:a.))b/i
 | |
|     a\nB
 | |
| 
 | |
| /(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
 | |
|     cabbbb
 | |
| 
 | |
| /(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
 | |
|     caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 | |
| 
 | |
| /(ab)\d\1/i
 | |
|     Ab4ab
 | |
|     ab4Ab
 | |
| 
 | |
| /foo\w*\d{4}baz/
 | |
|     foobar1234baz
 | |
| 
 | |
| /x(~~)*(?:(?:F)?)?/
 | |
|     x~~
 | |
| 
 | |
| /^a(?#xxx){3}c/
 | |
|     aaac
 | |
| 
 | |
| /^a (?#xxx) (?#yyy) {3}c/x
 | |
|     aaac
 | |
| 
 | |
| /(?<![cd])b/
 | |
| \= Expect no match
 | |
|     B\nB
 | |
|     dbcb
 | |
| 
 | |
| /(?<![cd])[ab]/
 | |
|     dbaacb
 | |
| 
 | |
| /(?<!(c|d))b/
 | |
| 
 | |
| /(?<!(c|d))[ab]/
 | |
|     dbaacb
 | |
| 
 | |
| /(?<!cd)[ab]/
 | |
|     cdaccb
 | |
| 
 | |
| /^(?:a?b?)*$/
 | |
|     \
 | |
|     a
 | |
|     ab
 | |
|     aaa   
 | |
| \= Expect no match
 | |
|     dbcb
 | |
|     a--
 | |
|     aa-- 
 | |
| 
 | |
| /((?s)^a(.))((?m)^b$)/
 | |
|     a\nb\nc\n
 | |
| 
 | |
| /((?m)^b$)/
 | |
|     a\nb\nc\n
 | |
| 
 | |
| /(?m)^b/
 | |
|     a\nb\n
 | |
| 
 | |
| /(?m)^(b)/
 | |
|     a\nb\n
 | |
| 
 | |
| /((?m)^b)/
 | |
|     a\nb\n
 | |
| 
 | |
| /\n((?m)^b)/
 | |
|     a\nb\n
 | |
| 
 | |
| /((?s).)c(?!.)/
 | |
|     a\nb\nc\n
 | |
|     a\nb\nc\n
 | |
| 
 | |
| /((?s)b.)c(?!.)/
 | |
|     a\nb\nc\n
 | |
|     a\nb\nc\n
 | |
| 
 | |
| /^b/
 | |
| 
 | |
| /()^b/
 | |
| \= Expect no match
 | |
|     a\nb\nc\n
 | |
|     a\nb\nc\n
 | |
| 
 | |
| /((?m)^b)/
 | |
|     a\nb\nc\n
 | |
| 
 | |
| /(x)?(?(1)a|b)/
 | |
| \= Expect no match
 | |
|     a
 | |
|     a
 | |
| 
 | |
| /(x)?(?(1)b|a)/
 | |
|     a
 | |
| 
 | |
| /()?(?(1)b|a)/
 | |
|     a
 | |
| 
 | |
| /()(?(1)b|a)/
 | |
| 
 | |
| /()?(?(1)a|b)/
 | |
|     a
 | |
| 
 | |
| /^(\()?blah(?(1)(\)))$/
 | |
|     (blah)
 | |
|     blah
 | |
| \= Expect no match
 | |
|     a
 | |
|     blah)
 | |
|     (blah
 | |
| 
 | |
| /^(\(+)?blah(?(1)(\)))$/
 | |
|     (blah)
 | |
|     blah
 | |
| \= Expect no match
 | |
|     blah)
 | |
|     (blah
 | |
| 
 | |
| /(?(?!a)a|b)/
 | |
| 
 | |
| /(?(?!a)b|a)/
 | |
|     a
 | |
| 
 | |
| /(?(?=a)b|a)/
 | |
| \= Expect no match
 | |
|     a
 | |
|     a
 | |
| 
 | |
| /(?(?=a)a|b)/
 | |
|     a
 | |
| 
 | |
| /(?=(a+?))(\1ab)/
 | |
|     aaab
 | |
| 
 | |
| /^(?=(a+?))\1ab/
 | |
| 
 | |
| /(\w+:)+/
 | |
|     one:
 | |
| 
 | |
| /$(?<=^(a))/
 | |
|     a
 | |
| 
 | |
| /(?=(a+?))(\1ab)/
 | |
|     aaab
 | |
| 
 | |
| /^(?=(a+?))\1ab/
 | |
| \= Expect no match
 | |
|     aaab
 | |
|     aaab
 | |
| 
 | |
| /([\w:]+::)?(\w+)$/
 | |
|     abcd
 | |
|     xy:z:::abcd
 | |
| 
 | |
| /^[^bcd]*(c+)/
 | |
|     aexycd
 | |
| 
 | |
| /(a*)b+/
 | |
|     caab
 | |
| 
 | |
| /([\w:]+::)?(\w+)$/
 | |
|     abcd
 | |
|     xy:z:::abcd
 | |
| \= Expect no match
 | |
|     abcd:
 | |
|     abcd:
 | |
| 
 | |
| /^[^bcd]*(c+)/
 | |
|     aexycd
 | |
| 
 | |
| /(>a+)ab/
 | |
| 
 | |
| /(?>a+)b/
 | |
|     aaab
 | |
| 
 | |
| /([[:]+)/
 | |
|     a:[b]:
 | |
| 
 | |
| /([[=]+)/
 | |
|     a=[b]=
 | |
| 
 | |
| /([[.]+)/
 | |
|     a.[b].
 | |
| 
 | |
| /((?>a+)b)/
 | |
|     aaab
 | |
| 
 | |
| /(?>(a+))b/
 | |
|     aaab
 | |
| 
 | |
| /((?>[^()]+)|\([^()]*\))+/
 | |
|     ((abc(ade)ufh()()x
 | |
| 
 | |
| /a\Z/
 | |
| \= Expect no match
 | |
|     aaab
 | |
|     a\nb\n
 | |
| 
 | |
| /b\Z/
 | |
|     a\nb\n
 | |
| 
 | |
| /b\z/
 | |
| 
 | |
| /b\Z/
 | |
|     a\nb
 | |
| 
 | |
| /b\z/
 | |
|     a\nb
 | |
|     
 | |
| /^(?>(?(1)\.|())[^\W_](?>[a-z0-9-]*[^\W_])?)+$/
 | |
|     a
 | |
|     abc
 | |
|     a-b
 | |
|     0-9 
 | |
|     a.b
 | |
|     5.6.7  
 | |
|     the.quick.brown.fox
 | |
|     a100.b200.300c  
 | |
|     12-ab.1245 
 | |
| \= Expect no match
 | |
|     \
 | |
|     .a
 | |
|     -a
 | |
|     a-
 | |
|     a.  
 | |
|     a_b 
 | |
|     a.-
 | |
|     a..  
 | |
|     ab..bc 
 | |
|     the.quick.brown.fox-
 | |
|     the.quick.brown.fox.
 | |
|     the.quick.brown.fox_
 | |
|     the.quick.brown.fox+       
 | |
| 
 | |
| /(?>.*)(?<=(abcd|wxyz))/
 | |
|     alphabetabcd
 | |
|     endingwxyz
 | |
| \= Expect no match
 | |
|     a rather long string that doesn't end with one of them
 | |
| 
 | |
| /word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
 | |
|     word cat dog elephant mussel cow horse canary baboon snake shark otherword
 | |
| \= Expect no match
 | |
|     word cat dog elephant mussel cow horse canary baboon snake shark
 | |
|   
 | |
| /word (?>[a-zA-Z0-9]+ ){0,30}otherword/
 | |
| \= Expect no match
 | |
|     word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
 | |
| 
 | |
| /(?<=\d{3}(?!999))foo/
 | |
|     999foo
 | |
|     123999foo 
 | |
| \= Expect no match
 | |
|     123abcfoo
 | |
|     
 | |
| /(?<=(?!...999)\d{3})foo/
 | |
|     999foo
 | |
|     123999foo 
 | |
| \= Expect no match
 | |
|     123abcfoo
 | |
| 
 | |
| /(?<=\d{3}(?!999)...)foo/
 | |
|     123abcfoo
 | |
|     123456foo 
 | |
| \= Expect no match
 | |
|     123999foo  
 | |
|     
 | |
| /(?<=\d{3}...)(?<!999)foo/
 | |
|     123abcfoo   
 | |
|     123456foo 
 | |
| \= Expect no match
 | |
|     123999foo  
 | |
| 
 | |
| /<a[\s]+href[\s]*=[\s]*          # find <a href=
 | |
|  ([\"\'])?                       # find single or double quote
 | |
|  (?(1) (.*?)\1 | ([^\s]+))       # if quote found, match up to next matching
 | |
|                                  # quote, otherwise match up to next space
 | |
| /isx
 | |
|     <a href=abcd xyz
 | |
|     <a href=\"abcd xyz pqr\" cats
 | |
|     <a href=\'abcd xyz pqr\' cats
 | |
| 
 | |
| /<a\s+href\s*=\s*                # find <a href=
 | |
|  (["'])?                         # find single or double quote
 | |
|  (?(1) (.*?)\1 | (\S+))          # if quote found, match up to next matching
 | |
|                                  # quote, otherwise match up to next space
 | |
| /isx
 | |
|     <a href=abcd xyz
 | |
|     <a href=\"abcd xyz pqr\" cats
 | |
|     <a href       =       \'abcd xyz pqr\' cats
 | |
| 
 | |
| /<a\s+href(?>\s*)=(?>\s*)        # find <a href=
 | |
|  (["'])?                         # find single or double quote
 | |
|  (?(1) (.*?)\1 | (\S+))          # if quote found, match up to next matching
 | |
|                                  # quote, otherwise match up to next space
 | |
| /isx
 | |
|     <a href=abcd xyz
 | |
|     <a href=\"abcd xyz pqr\" cats
 | |
|     <a href       =       \'abcd xyz pqr\' cats
 | |
| 
 | |
| /((Z)+|A)*/
 | |
|     ZABCDEFG
 | |
| 
 | |
| /(Z()|A)*/
 | |
|     ZABCDEFG
 | |
| 
 | |
| /(Z(())|A)*/
 | |
|     ZABCDEFG
 | |
| 
 | |
| /((?>Z)+|A)*/
 | |
|     ZABCDEFG
 | |
| 
 | |
| /((?>)+|A)*/
 | |
|     ZABCDEFG
 | |
| 
 | |
| /a*/g
 | |
|     abbab
 | |
| 
 | |
| /^[\d-a]/
 | |
|     abcde
 | |
|     -things
 | |
|     0digit
 | |
| \= Expect no match
 | |
|     bcdef    
 | |
|     
 | |
| /[[:space:]]+/
 | |
|     > \x09\x0a\x0c\x0d\x0b<
 | |
|      
 | |
| /[[:blank:]]+/
 | |
|     > \x09\x0a\x0c\x0d\x0b<
 | |
|      
 | |
| /[\s]+/
 | |
|     > \x09\x0a\x0c\x0d\x0b<
 | |
|      
 | |
| /\s+/
 | |
|     > \x09\x0a\x0c\x0d\x0b<
 | |
|      
 | |
| /ab/x
 | |
|     ab
 | |
| 
 | |
| /(?!\A)x/m
 | |
|     a\nxb\n
 | |
| 
 | |
| /(?!^)x/m
 | |
| \= Expect no match
 | |
|     a\nxb\n
 | |
| 
 | |
| /abc\Qabc\Eabc/
 | |
|     abcabcabc
 | |
|     
 | |
| /abc\Q(*+|\Eabc/
 | |
|     abc(*+|abc 
 | |
| 
 | |
| /   abc\Q abc\Eabc/x
 | |
|     abc abcabc
 | |
| \= Expect no match
 | |
|     abcabcabc  
 | |
|     
 | |
| /abc#comment
 | |
|     \Q#not comment
 | |
|     literal\E/x
 | |
|     abc#not comment\n    literal     
 | |
| 
 | |
| /abc#comment
 | |
|     \Q#not comment
 | |
|     literal/x
 | |
|     abc#not comment\n    literal     
 | |
| 
 | |
| /abc#comment
 | |
|     \Q#not comment
 | |
|     literal\E #more comment
 | |
|     /x
 | |
|     abc#not comment\n    literal     
 | |
| 
 | |
| /abc#comment
 | |
|     \Q#not comment
 | |
|     literal\E #more comment/x
 | |
|     abc#not comment\n    literal     
 | |
| 
 | |
| /\Qabc\$xyz\E/
 | |
|     abc\\\$xyz
 | |
| 
 | |
| /\Qabc\E\$\Qxyz\E/
 | |
|     abc\$xyz
 | |
| 
 | |
| /\Gabc/
 | |
|     abc
 | |
| \= Expect no match
 | |
|     xyzabc  
 | |
| 
 | |
| /\Gabc./g
 | |
|     abc1abc2xyzabc3
 | |
| 
 | |
| /abc./g
 | |
|     abc1abc2xyzabc3 
 | |
| 
 | |
| /a(?x: b c )d/
 | |
|     XabcdY
 | |
| \= Expect no match 
 | |
|     Xa b c d Y 
 | |
| 
 | |
| /((?x)x y z | a b c)/
 | |
|     XabcY
 | |
|     AxyzB 
 | |
| 
 | |
| /(?i)AB(?-i)C/
 | |
|     XabCY
 | |
| \= Expect no match
 | |
|     XabcY  
 | |
| 
 | |
| /((?i)AB(?-i)C|D)E/
 | |
|     abCE
 | |
|     DE
 | |
| \= Expect no match
 | |
|     abcE
 | |
|     abCe  
 | |
|     dE
 | |
|     De    
 | |
| 
 | |
| /(.*)\d+\1/
 | |
|     abc123abc
 | |
|     abc123bc 
 | |
| 
 | |
| /(.*)\d+\1/s
 | |
|     abc123abc
 | |
|     abc123bc 
 | |
|     
 | |
| /((.*))\d+\1/
 | |
|     abc123abc
 | |
|     abc123bc  
 | |
| 
 | |
| # This tests for an IPv6 address in the form where it can have up to
 | |
| # eight components, one and only one of which is empty. This must be
 | |
| # an internal component. 
 | |
| 
 | |
| /^(?!:)                       # colon disallowed at start
 | |
|   (?:                         # start of item
 | |
|     (?: [0-9a-f]{1,4} |       # 1-4 hex digits or
 | |
|     (?(1)0 | () ) )           # if null previously matched, fail; else null
 | |
|     :                         # followed by colon
 | |
|   ){1,7}                      # end item; 1-7 of them required               
 | |
|   [0-9a-f]{1,4} $             # final hex number at end of string
 | |
|   (?(1)|.)                    # check that there was an empty component
 | |
|   /ix
 | |
|     a123::a123
 | |
|     a123:b342::abcd
 | |
|     a123:b342::324e:abcd
 | |
|     a123:ddde:b342::324e:abcd
 | |
|     a123:ddde:b342::324e:dcba:abcd
 | |
|     a123:ddde:9999:b342::324e:dcba:abcd
 | |
| \= Expect no match
 | |
|     1:2:3:4:5:6:7:8
 | |
|     a123:bce:ddde:9999:b342::324e:dcba:abcd
 | |
|     a123::9999:b342::324e:dcba:abcd
 | |
|     abcde:2:3:4:5:6:7:8
 | |
|     ::1
 | |
|     abcd:fee0:123::   
 | |
|     :1
 | |
|     1:  
 | |
| 
 | |
| /[z\Qa-d]\E]/
 | |
|     z
 | |
|     a
 | |
|     -
 | |
|     d
 | |
|     ] 
 | |
| \= Expect no match
 | |
|     b     
 | |
| 
 | |
| /(a+)*b/
 | |
| \= Expect no match
 | |
|     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
 | |
|     
 | |
| /(?i)reg(?:ul(?:[a�]|ae)r|ex)/
 | |
|     REGular
 | |
|     regulaer
 | |
|     Regex  
 | |
|     regul�r 
 | |
| 
 | |
| /����[�-��-�]+/
 | |
|     �����
 | |
|     �����
 | |
|     �����
 | |
|     �����
 | |
| 
 | |
| /(?<=Z)X./
 | |
|   \x84XAZXB
 | |
| 
 | |
| /ab cd (?x) de fg/
 | |
|     ab cd defg
 | |
| 
 | |
| /ab cd(?x) de fg/
 | |
|     ab cddefg
 | |
| \= Expect no match 
 | |
|     abcddefg
 | |
| 
 | |
| /(?<![^f]oo)(bar)/
 | |
|     foobarX 
 | |
| \= Expect no match 
 | |
|     boobarX
 | |
| 
 | |
| /(?<![^f])X/
 | |
|     offX
 | |
| \= Expect no match
 | |
|     onyX  
 | |
| 
 | |
| /(?<=[^f])X/
 | |
|     onyX
 | |
| \= Expect no match
 | |
|     offX 
 | |
| 
 | |
| /^/gm
 | |
|     a\nb\nc\n
 | |
|     \ 
 | |
|     
 | |
| /(?<=C\n)^/gm
 | |
|     A\nC\nC\n 
 | |
| 
 | |
| /(?:(?(1)a|b)(X))+/
 | |
|     bXaX
 | |
| 
 | |
| /(?:(?(1)\1a|b)(X|Y))+/
 | |
|     bXXaYYaY
 | |
|     bXYaXXaX  
 | |
| 
 | |
| /()()()()()()()()()(?:(?(10)\10a|b)(X|Y))+/
 | |
|     bXXaYYaY
 | |
| 
 | |
| /[[,abc,]+]/
 | |
|     abc]
 | |
|     a,b]
 | |
|     [a,b,c]  
 | |
| 
 | |
| /(?-x: )/x
 | |
|     A\x20B
 | |
|     
 | |
| "(?x)(?-x: \s*#\s*)"
 | |
|     A # B
 | |
| \= Expect no match
 | |
|     #  
 | |
| 
 | |
| "(?x-is)(?:(?-ixs) \s*#\s*) include"
 | |
|     A #include
 | |
| \= Expect no match
 | |
|     A#include  
 | |
|     A #Include
 | |
| 
 | |
| /a*b*\w/
 | |
|     aaabbbb
 | |
|     aaaa
 | |
|     a
 | |
| 
 | |
| /a*b?\w/
 | |
|     aaabbbb
 | |
|     aaaa
 | |
|     a
 | |
| 
 | |
| /a*b{0,4}\w/
 | |
|     aaabbbb
 | |
|     aaaa
 | |
|     a
 | |
| 
 | |
| /a*b{0,}\w/
 | |
|     aaabbbb
 | |
|     aaaa
 | |
|     a
 | |
|     
 | |
| /a*\d*\w/
 | |
|     0a
 | |
|     a 
 | |
|     
 | |
| /a*b *\w/x
 | |
|     a 
 | |
| 
 | |
| /a*b#comment
 | |
|   *\w/x
 | |
|     a 
 | |
| 
 | |
| /a* b *\w/x
 | |
|     a 
 | |
| 
 | |
| /^\w+=.*(\\\n.*)*/
 | |
|     abc=xyz\\\npqr
 | |
| 
 | |
| /(?=(\w+))\1:/
 | |
|     abcd:
 | |
| 
 | |
| /^(?=(\w+))\1:/
 | |
|     abcd:
 | |
| 
 | |
| /^\Eabc/
 | |
|     abc
 | |
|     
 | |
| /^[\Eabc]/
 | |
|     a
 | |
| \= Expect no match 
 | |
|     E 
 | |
|     
 | |
| /^[a-\Ec]/
 | |
|     b
 | |
| \= Expect no match
 | |
|     -
 | |
|     E    
 | |
| 
 | |
| /^[a\E\E-\Ec]/
 | |
|     b
 | |
| \= Expect no match
 | |
|     -
 | |
|     E    
 | |
| 
 | |
| /^[\E\Qa\E-\Qz\E]+/
 | |
|     b
 | |
| \= Expect no match
 | |
|     -  
 | |
|     
 | |
| /^[a\Q]bc\E]/
 | |
|     a
 | |
|     ]
 | |
|     c
 | |
|     
 | |
| /^[a-\Q\E]/
 | |
|     a
 | |
|     -     
 | |
| 
 | |
| /^(a()*)*/
 | |
|     aaaa
 | |
| 
 | |
| /^(?:a(?:(?:))*)*/
 | |
|     aaaa
 | |
| 
 | |
| /^(a()+)+/
 | |
|     aaaa
 | |
| 
 | |
| /^(?:a(?:(?:))+)+/
 | |
|     aaaa
 | |
| 
 | |
| /(a){0,3}(?(1)b|(c|))*D/
 | |
|     abbD
 | |
|     ccccD
 | |
|     D  
 | |
| 
 | |
| /(a|)*\d/
 | |
|   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
 | |
| \= Expect no match
 | |
|   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 | |
| 
 | |
| /(?>a|)*\d/
 | |
|   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
 | |
| \= Expect no match
 | |
|   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 | |
| 
 | |
| /(?:a|)*\d/
 | |
|   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
 | |
| \= Expect no match
 | |
|   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 | |
| 
 | |
| /\Z/g
 | |
|   abc\n
 | |
|   
 | |
| /^(?s)(?>.*)(?<!\n)/
 | |
|   abc
 | |
| \= Expect no match
 | |
|   abc\n  
 | |
| 
 | |
| /^(?![^\n]*\n\z)/
 | |
|   abc
 | |
| \= Expect no match
 | |
|   abc\n 
 | |
|   
 | |
| /\z(?<!\n)/
 | |
|   abc
 | |
| \= Expect no match
 | |
|   abc\n  
 | |
| 
 | |
| /(.*(.)?)*/
 | |
|     abcd
 | |
| 
 | |
| /( (A | (?(1)0|) )*   )/x
 | |
|     abcd
 | |
| 
 | |
| /( ( (?(1)0|) )*   )/x
 | |
|     abcd
 | |
| 
 | |
| /(  (?(1)0|)*   )/x
 | |
|     abcd
 | |
| 
 | |
| /[[:abcd:xyz]]/
 | |
|     a]
 | |
|     :] 
 | |
|     
 | |
| /[abc[:x\]pqr]/
 | |
|     a
 | |
|     [
 | |
|     :
 | |
|     ]
 | |
|     p    
 | |
| 
 | |
| /.*[op][xyz]/
 | |
| \= Expect no match
 | |
|     fooabcfoo
 | |
| 
 | |
| /(?(?=.*b)b|^)/
 | |
|    adc
 | |
|    abc 
 | |
| 
 | |
| /(?(?=^.*b)b|^)/
 | |
|    adc
 | |
| \= Expect no match
 | |
|    abc 
 | |
| 
 | |
| /(?(?=.*b)b|^)*/
 | |
|    adc
 | |
|    abc 
 | |
| 
 | |
| /(?(?=.*b)b|^)+/
 | |
|    adc
 | |
|    abc 
 | |
| 
 | |
| /(?(?=b).*b|^d)/
 | |
|     abc
 | |
| 
 | |
| /(?(?=.*b).*b|^d)/
 | |
|     abc
 | |
| 
 | |
| /^%((?(?=[a])[^%])|b)*%$/
 | |
|     %ab%
 | |
| 
 | |
| /(?i)a(?-i)b|c/
 | |
|     XabX
 | |
|     XAbX
 | |
|     CcC 
 | |
| \= Expect no match
 | |
|     XABX   
 | |
| 
 | |
| /[\x00-\xff\s]+/
 | |
|     \x0a\x0b\x0c\x0d
 | |
| 
 | |
| /(abc)\1/i
 | |
| \= Expect no match
 | |
|    abc
 | |
| 
 | |
| /(abc)\1/
 | |
| \= Expect no match
 | |
|    abc
 | |
| 
 | |
| /[^a]*/i
 | |
|     12abc
 | |
|     12ABC
 | |
| 
 | |
| /[^a]*+/i
 | |
|     12abc
 | |
|     12ABC
 | |
| 
 | |
| /[^a]*?X/i
 | |
| \= Expect no match
 | |
|     12abc
 | |
|     12ABC
 | |
|     
 | |
| /[^a]+?X/i
 | |
| \= Expect no match
 | |
|     12abc
 | |
|     12ABC
 | |
| 
 | |
| /[^a]?X/i
 | |
|     12aXbcX
 | |
|     12AXBCX
 | |
|     BCX 
 | |
| 
 | |
| /[^a]??X/i
 | |
|     12aXbcX
 | |
|     12AXBCX
 | |
|     BCX
 | |
|     
 | |
| /[^a]?+X/i
 | |
|     12aXbcX
 | |
|     12AXBCX
 | |
|     BCX 
 | |
| 
 | |
| /[^a]{2,3}/i
 | |
|     abcdef
 | |
|     ABCDEF  
 | |
| 
 | |
| /[^a]{2,3}?/i
 | |
|     abcdef
 | |
|     ABCDEF  
 | |
| 
 | |
| /[^a]{2,3}+/i
 | |
|     abcdef
 | |
|     ABCDEF  
 | |
| 
 | |
| /((a|)+)+Z/
 | |
|     Z
 | |
| 
 | |
| /(a)b|(a)c/
 | |
|     ac
 | |
| 
 | |
| /(?>(a))b|(a)c/
 | |
|     ac
 | |
| 
 | |
| /(?=(a))ab|(a)c/
 | |
|     ac
 | |
| 
 | |
| /((?>(a))b|(a)c)/
 | |
|     ac
 | |
| 
 | |
| /((?>(a))b|(a)c)++/
 | |
|     ac
 | |
| 
 | |
| /(?:(?>(a))b|(a)c)++/
 | |
|     ac
 | |
| 
 | |
| /(?=(?>(a))b|(a)c)(..)/
 | |
|     ac
 | |
| 
 | |
| /(?>(?>(a))b|(a)c)/
 | |
|     ac
 | |
| 
 | |
| /(?:(?>([ab])))+a=/aftertext
 | |
|     =ba=
 | |
| 
 | |
| /(?>([ab]))+a=/aftertext
 | |
|     =ba=
 | |
| 
 | |
| /((?>(a+)b)+(aabab))/
 | |
|     aaaabaaabaabab
 | |
| 
 | |
| /(?>a+|ab)+?c/
 | |
| \= Expect no match
 | |
|     aabc
 | |
| 
 | |
| /(?>a+|ab)+c/
 | |
| \= Expect no match
 | |
|     aabc
 | |
| 
 | |
| /(?:a+|ab)+c/
 | |
|     aabc
 | |
| 
 | |
| /(?(?=(a))a)/
 | |
|     a
 | |
| 
 | |
| /(?(?=(a))a)(b)/
 | |
|     ab
 | |
| 
 | |
| /^(?:a|ab)++c/
 | |
| \= Expect no match
 | |
|     aaaabc
 | |
| 
 | |
| /^(?>a|ab)++c/
 | |
| \= Expect no match
 | |
|     aaaabc
 | |
| 
 | |
| /^(?:a|ab)+c/
 | |
|     aaaabc
 | |
| 
 | |
| /(?=abc){3}abc/aftertext
 | |
|     abcabcabc
 | |
| \= Expect no match
 | |
|     xyz  
 | |
|     
 | |
| /(?=abc)+abc/aftertext
 | |
|     abcabcabc
 | |
| \= Expect no match
 | |
|     xyz  
 | |
|     
 | |
| /(?=abc)++abc/aftertext
 | |
|     abcabcabc
 | |
| \= Expect no match
 | |
|     xyz  
 | |
|     
 | |
| /(?=abc){0}xyz/
 | |
|     xyz 
 | |
| 
 | |
| /(?=abc){1}xyz/
 | |
| \= Expect no match
 | |
|     xyz 
 | |
|     
 | |
| /(?=(a))?./
 | |
|     ab
 | |
|     bc
 | |
|       
 | |
| /(?=(a))??./
 | |
|     ab
 | |
|     bc
 | |
| 
 | |
| /^(?=(?1))?[az]([abc])d/
 | |
|     abd 
 | |
|     zcdxx 
 | |
| 
 | |
| /^(?!a){0}\w+/
 | |
|     aaaaa
 | |
| 
 | |
| /(?<=(abc))?xyz/
 | |
|     abcxyz
 | |
|     pqrxyz 
 | |
| 
 | |
| /^[\g<a>]+/
 | |
|     ggg<<<aaa>>>
 | |
| \= Expect no match
 | |
|     \\ga  
 | |
|     
 | |
| /^[\ga]+/
 | |
|     gggagagaxyz 
 | |
|     
 | |
| /^[:a[:digit:]]+/
 | |
|     aaaa444:::Z 
 | |
| 
 | |
| /^[:a[:digit:]:b]+/
 | |
|     aaaa444:::bbbZ 
 | |
| 
 | |
| /[:a]xxx[b:]/
 | |
|      :xxx:
 | |
|      
 | |
| /(?<=a{2})b/i
 | |
|     xaabc
 | |
| \= Expect no match
 | |
|     xabc  
 | |
| 
 | |
| /(?<!a{2})b/i
 | |
|     xabc
 | |
| \= Expect no match
 | |
|     xaabc  
 | |
| 
 | |
| /(?<=a\h)c/
 | |
|     xa c
 | |
|     
 | |
| /(?<=[^a]{2})b/
 | |
|     axxbc
 | |
|     aAAbc 
 | |
| \= Expect no match
 | |
|     xaabc    
 | |
| 
 | |
| /(?<=[^a]{2})b/i
 | |
|     axxbc  
 | |
| \= Expect no match
 | |
|     aAAbc 
 | |
|     xaabc    
 | |
| 
 | |
| /(?<=a\H)c/
 | |
|     abc
 | |
| 
 | |
| /(?<=a\V)c/
 | |
|     abc
 | |
|     
 | |
| /(?<=a\v)c/
 | |
|     a\nc
 | |
| 
 | |
| /(?(?=c)c|d)++Y/
 | |
|     XcccddYX
 | |
| 
 | |
| /(?(?=c)c|d)*+Y/
 | |
|     XcccddYX
 | |
| 
 | |
| /^(a{2,3}){2,}+a/
 | |
|     aaaaaaa
 | |
| \= Expect no match
 | |
|     aaaaaa
 | |
|     aaaaaaaaa 
 | |
| 
 | |
| /^(a{2,3})++a/
 | |
| \= Expect no match
 | |
|     aaaaaa
 | |
| 
 | |
| /^(a{2,3})*+a/
 | |
| \= Expect no match
 | |
|     aaaaaa
 | |
| 
 | |
| /\H\h\V\v/
 | |
|     X X\x0a
 | |
|     X\x09X\x0b
 | |
| \= Expect no match
 | |
|     \xa0 X\x0a   
 | |
|     
 | |
| /\H*\h+\V?\v{3,4}/
 | |
|     \x09\x20\xa0X\x0a\x0b\x0c\x0d\x0a
 | |
|     \x09\x20\xa0\x0a\x0b\x0c\x0d\x0a
 | |
|     \x09\x20\xa0\x0a\x0b\x0c
 | |
| \= Expect no match 
 | |
|     \x09\x20\xa0\x0a\x0b
 | |
|      
 | |
| /\H{3,4}/
 | |
|     XY  ABCDE
 | |
|     XY  PQR ST 
 | |
|     
 | |
| /.\h{3,4}./
 | |
|     XY  AB    PQRS
 | |
| 
 | |
| /\h*X\h?\H+Y\H?Z/
 | |
|     >XNNNYZ
 | |
|     >  X NYQZ
 | |
| \= Expect no match
 | |
|     >XYZ   
 | |
|     >  X NY Z
 | |
| 
 | |
| /\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c/
 | |
|     >XY\x0aZ\x0aA\x0bNN\x0c
 | |
|     >\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
 | |
| 
 | |
| /(foo)\Kbar/
 | |
|     foobar
 | |
|    
 | |
| /(foo)(\Kbar|baz)/
 | |
|     foobar
 | |
|     foobaz 
 | |
| 
 | |
| /(foo\Kbar)baz/
 | |
|     foobarbaz
 | |
| 
 | |
| /abc\K|def\K/g,aftertext
 | |
|     Xabcdefghi
 | |
| 
 | |
| /ab\Kc|de\Kf/g,aftertext
 | |
|     Xabcdefghi
 | |
|     
 | |
| /(?=C)/g,aftertext
 | |
|     ABCDECBA
 | |
|     
 | |
| /^abc\K/aftertext
 | |
|     abcdef
 | |
| \= Expect no match
 | |
|     defabcxyz   
 | |
| 
 | |
| /^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-2}Z/
 | |
|     ababababbbabZXXXX
 | |
| 
 | |
| /(?<A>tom|bon)-\g{A}/
 | |
|     tom-tom
 | |
|     bon-bon 
 | |
|     
 | |
| /(^(a|b\g{-1}))/
 | |
| \= Expect no match
 | |
|     bacxxx
 | |
| 
 | |
| /(?|(abc)|(xyz))\1/
 | |
|     abcabc
 | |
|     xyzxyz 
 | |
| \= Expect no match
 | |
|     abcxyz
 | |
|     xyzabc   
 | |
|     
 | |
| /(?|(abc)|(xyz))(?1)/
 | |
|     abcabc
 | |
|     xyzabc 
 | |
| \= Expect no match 
 | |
|     xyzxyz 
 | |
|  
 | |
| /^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/
 | |
|     XYabcdY
 | |
| 
 | |
| /^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/
 | |
|     XYabcdY
 | |
| 
 | |
| /^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/
 | |
|     XYabcdY
 | |
| 
 | |
| /(?'abc'\w+):\k<abc>{2}/
 | |
|     a:aaxyz
 | |
|     ab:ababxyz
 | |
| \= Expect no match
 | |
|     a:axyz
 | |
|     ab:abxyz
 | |
| 
 | |
| /(?'abc'\w+):\g{abc}{2}/
 | |
|     a:aaxyz
 | |
|     ab:ababxyz
 | |
| \= Expect no match
 | |
|     a:axyz
 | |
|     ab:abxyz
 | |
| 
 | |
| /^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)/x
 | |
|     abd
 | |
|     ce
 | |
| 
 | |
| /^(a.)\g-1Z/
 | |
|     aXaXZ
 | |
| 
 | |
| /^(a.)\g{-1}Z/
 | |
|     aXaXZ
 | |
| 
 | |
| /^(?(DEFINE) (?<A> a) (?<B> b) )  (?&A) (?&B) /x
 | |
|     abcd
 | |
| 
 | |
| /(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT))
 | |
|   (?(DEFINE)
 | |
|   (?<NAME_PAT>[a-z]+)
 | |
|   (?<ADDRESS_PAT>\d+)
 | |
|   )/x
 | |
|     metcalfe 33
 | |
| 
 | |
| /(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}/
 | |
|     1.2.3.4
 | |
|     131.111.10.206
 | |
|     10.0.0.0
 | |
| \= Expect no match
 | |
|     10.6
 | |
|     455.3.4.5
 | |
| 
 | |
| /\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))/
 | |
|     1.2.3.4
 | |
|     131.111.10.206
 | |
|     10.0.0.0
 | |
| \= Expect no match
 | |
|     10.6
 | |
|     455.3.4.5
 | |
| 
 | |
| /^(\w++|\s++)*$/
 | |
|     now is the time for all good men to come to the aid of the party
 | |
| \= Expect no match
 | |
|     this is not a line with only words and spaces!
 | |
| 
 | |
| /(\d++)(\w)/
 | |
|     12345a
 | |
| \= Expect no match
 | |
|     12345+
 | |
| 
 | |
| /a++b/
 | |
|     aaab
 | |
| 
 | |
| /(a++b)/
 | |
|     aaab
 | |
| 
 | |
| /(a++)b/
 | |
|     aaab
 | |
| 
 | |
| /([^()]++|\([^()]*\))+/
 | |
|     ((abc(ade)ufh()()x
 | |
| 
 | |
| /\(([^()]++|\([^()]+\))+\)/
 | |
|     (abc)
 | |
|     (abc(def)xyz)
 | |
| \= Expect no match
 | |
|     ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 | |
| 
 | |
| /^([^()]|\((?1)*\))*$/
 | |
|     abc
 | |
|     a(b)c
 | |
|     a(b(c))d
 | |
| \= Expect no match)
 | |
|     a(b(c)d
 | |
| 
 | |
| /^>abc>([^()]|\((?1)*\))*<xyz<$/
 | |
|    >abc>123<xyz<
 | |
|    >abc>1(2)3<xyz<
 | |
|    >abc>(1(2)3)<xyz<
 | |
| 
 | |
| /^(?:((.)(?1)\2|)|((.)(?3)\4|.))$/i
 | |
|     1221
 | |
|     Satanoscillatemymetallicsonatas
 | |
|     AmanaplanacanalPanama
 | |
|     AblewasIereIsawElba
 | |
| \= Expect no match
 | |
|     Thequickbrownfox
 | |
| 
 | |
| /^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/
 | |
|     12
 | |
|     (((2+2)*-3)-7)
 | |
|     -12
 | |
| \= Expect no match
 | |
|     ((2+2)*-3)-7)
 | |
| 
 | |
| /^(x(y|(?1){2})z)/
 | |
|     xyz
 | |
|     xxyzxyzz
 | |
| \= Expect no match
 | |
|     xxyzz
 | |
|     xxyzxyzxyzz
 | |
| 
 | |
| /((< (?: (?(R) \d++  | [^<>]*+) | (?2)) * >))/x
 | |
|     <>
 | |
|     <abcd>
 | |
|     <abc <123> hij>
 | |
|     <abc <def> hij>
 | |
|     <abc<>def>
 | |
|     <abc<>
 | |
| \= Expect no match
 | |
|     <abc
 | |
| 
 | |
| /^a+(*FAIL)/
 | |
| \= Expect no match
 | |
|     aaaaaa
 | |
|     
 | |
| /a+b?c+(*FAIL)/
 | |
| \= Expect no match
 | |
|     aaabccc
 | |
| 
 | |
| /a+b?(*PRUNE)c+(*FAIL)/
 | |
| \= Expect no match
 | |
|     aaabccc
 | |
| 
 | |
| /a+b?(*COMMIT)c+(*FAIL)/
 | |
| \= Expect no match
 | |
|     aaabccc
 | |
|     
 | |
| /a+b?(*SKIP)c+(*FAIL)/
 | |
| \= Expect no match
 | |
|     aaabcccaaabccc
 | |
| 
 | |
| /^(?:aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
 | |
|     aaaxxxxxx
 | |
|     aaa++++++ 
 | |
|     bbbxxxxx
 | |
|     bbb+++++ 
 | |
|     cccxxxx
 | |
|     ccc++++ 
 | |
|     dddddddd   
 | |
| 
 | |
| /^(aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
 | |
|     aaaxxxxxx
 | |
|     aaa++++++ 
 | |
|     bbbxxxxx
 | |
|     bbb+++++ 
 | |
|     cccxxxx
 | |
|     ccc++++ 
 | |
|     dddddddd   
 | |
| 
 | |
| /a+b?(*THEN)c+(*FAIL)/
 | |
| \= Expect no match
 | |
|     aaabccc
 | |
| 
 | |
| /(A (A|B(*ACCEPT)|C) D)(E)/x
 | |
|     AB
 | |
|     ABX
 | |
|     AADE
 | |
|     ACDE
 | |
| \= Expect no match
 | |
|     AD 
 | |
|         
 | |
| /^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$/i
 | |
|     1221
 | |
|     Satan, oscillate my metallic sonatas!
 | |
|     A man, a plan, a canal: Panama!
 | |
|     Able was I ere I saw Elba.
 | |
| \= Expect no match
 | |
|     The quick brown fox
 | |
| 
 | |
| /^((.)(?1)\2|.)$/
 | |
|     a
 | |
|     aba
 | |
|     aabaa  
 | |
|     abcdcba 
 | |
|     pqaabaaqp  
 | |
|     ablewasiereisawelba
 | |
| \= Expect no match     
 | |
|     rhubarb
 | |
|     the quick brown fox  
 | |
| 
 | |
| /(a)(?<=b(?1))/
 | |
|     baz
 | |
| \= Expect no match
 | |
|     caz  
 | |
|     
 | |
| /(?<=b(?1))(a)/
 | |
|     zbaaz
 | |
| \= Expect no match
 | |
|     aaa  
 | |
|     
 | |
| /(?<X>a)(?<=b(?&X))/
 | |
|     baz
 | |
| 
 | |
| /^(?|(abc)|(def))\1/
 | |
|     abcabc
 | |
|     defdef 
 | |
| \= Expect no match
 | |
|     abcdef
 | |
|     defabc   
 | |
|     
 | |
| /^(?|(abc)|(def))(?1)/
 | |
|     abcabc
 | |
|     defabc
 | |
| \= Expect no match
 | |
|     defdef
 | |
|     abcdef    
 | |
| 
 | |
| /(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |b(?<quote> (?<apostrophe>')|(?<realquote>")) ) (?('quote')[a-z]+|[0-9]+)/x,dupnames
 | |
|     a\"aaaaa
 | |
|     b\"aaaaa 
 | |
| \= Expect no match 
 | |
|     b\"11111
 | |
| 
 | |
| /(?:(?1)|B)(A(*F)|C)/
 | |
|     ABCD
 | |
|     CCD
 | |
| \= Expect no match
 | |
|     CAD   
 | |
| 
 | |
| /^(?:(?1)|B)(A(*F)|C)/
 | |
|     CCD
 | |
|     BCD 
 | |
| \= Expect no match
 | |
|     ABCD
 | |
|     CAD
 | |
|     BAD    
 | |
| 
 | |
| /(?:(?1)|B)(A(*ACCEPT)XX|C)D/
 | |
|     AAD
 | |
|     ACD
 | |
|     BAD
 | |
|     BCD
 | |
|     BAX  
 | |
| \= Expect no match
 | |
|     ACX
 | |
|     ABC   
 | |
| 
 | |
| /(?(DEFINE)(A))B(?1)C/
 | |
|     BAC
 | |
| 
 | |
| /(?(DEFINE)((A)\2))B(?1)C/
 | |
|     BAAC
 | |
| 
 | |
| /(?<pn> \( ( [^()]++ | (?&pn) )* \) )/x
 | |
|     (ab(cd)ef)
 | |
| 
 | |
| /^(?=a(*SKIP)b|ac)/
 | |
| \= Expect no match
 | |
|     ac
 | |
|     
 | |
| /^(?=a(*PRUNE)b)/
 | |
|     ab  
 | |
| \= Expect no match 
 | |
|     ac
 | |
| 
 | |
| /^(?=a(*ACCEPT)b)/
 | |
|     ac
 | |
| 
 | |
| /(?>a\Kb)/
 | |
|     ab
 | |
| 
 | |
| /((?>a\Kb))/
 | |
|     ab
 | |
| 
 | |
| /(a\Kb)/
 | |
|     ab
 | |
|     
 | |
| /^a\Kcz|ac/
 | |
|     ac
 | |
|     
 | |
| /(?>a\Kbz|ab)/
 | |
|     ab 
 | |
| 
 | |
| /^(?&t)(?(DEFINE)(?<t>a\Kb))$/
 | |
|     ab
 | |
| 
 | |
| /^([^()]|\((?1)*\))*$/
 | |
|     a(b)c
 | |
|     a(b(c)d)e 
 | |
| 
 | |
| /(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))/
 | |
|     0
 | |
|     00
 | |
|     0000  
 | |
| 
 | |
| /(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))/
 | |
|     0
 | |
|     00
 | |
|     0000  
 | |
| 
 | |
| # This one does fail, as expected, in Perl. It needs the complex item at the
 | |
| # end of the pattern. A single letter instead of (B|D) makes it not fail, which
 | |
| # I think is a Perl bug.
 | |
| 
 | |
| /A(*COMMIT)(B|D)/
 | |
| \= Expect no match
 | |
|     ACABX
 | |
| 
 | |
| # Check the use of names for failure
 | |
| 
 | |
| /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/mark
 | |
| \= Expect no match
 | |
|     AC
 | |
|     CB    
 | |
|     
 | |
| /(*MARK:A)(*SKIP:B)(C|X)/mark
 | |
|     C
 | |
| \= Expect no match
 | |
|     D
 | |
|      
 | |
| /^(A(*THEN:A)B|C(*THEN:B)D)/mark
 | |
| \= Expect no match
 | |
|     CB    
 | |
| 
 | |
| /^(?:A(*THEN:A)B|C(*THEN:B)D)/mark
 | |
| \= Expect no match
 | |
|     CB    
 | |
|     
 | |
| /^(?>A(*THEN:A)B|C(*THEN:B)D)/mark
 | |
| \= Expect no match
 | |
|     CB    
 | |
|     
 | |
| # This should succeed, as the skip causes bump to offset 1 (the mark). Note
 | |
| # that we have to have something complicated such as (B|Z) at the end because,
 | |
| # for Perl, a simple character somehow causes an unwanted optimization to mess
 | |
| # with the handling of backtracking verbs.
 | |
| 
 | |
| /A(*MARK:A)A+(*SKIP:A)(B|Z) | AC/x,mark
 | |
|     AAAC
 | |
|     
 | |
| # Test skipping over a non-matching mark.
 | |
| 
 | |
| /A(*MARK:A)A+(*MARK:B)(*SKIP:A)(B|Z) | AC/x,mark
 | |
|     AAAC
 | |
|     
 | |
| # Check shorthand for MARK.
 | |
| 
 | |
| /A(*:A)A+(*SKIP:A)(B|Z) | AC/x,mark
 | |
|     AAAC
 | |
| 
 | |
| /(*:A)A+(*SKIP:A)(B|Z)/mark
 | |
| \= Expect no match
 | |
|     AAAC
 | |
| 
 | |
| # This should succeed, as a non-existent skip name disables the skip.
 | |
| 
 | |
| /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/x,mark
 | |
|     AAAC
 | |
| 
 | |
| /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC(*:B)/x,mark
 | |
|     AAAC
 | |
| 
 | |
| # COMMIT at the start of a pattern should act like an anchor. Again, however,
 | |
| # we need the complication for Perl.
 | |
| 
 | |
| /(*COMMIT)(A|P)(B|P)(C|P)/
 | |
|     ABCDEFG
 | |
| \= Expect no match
 | |
|     DEFGABC  
 | |
| 
 | |
| # COMMIT inside an atomic group can't stop backtracking over the group.
 | |
| 
 | |
| /(\w+)(?>b(*COMMIT))\w{2}/
 | |
|     abbb
 | |
| 
 | |
| /(\w+)b(*COMMIT)\w{2}/
 | |
| \= Expect no match
 | |
|     abbb
 | |
| 
 | |
| # Check opening parens in comment when seeking forward reference.
 | |
| 
 | |
| /(?&t)(?#()(?(DEFINE)(?<t>a))/
 | |
|     bac
 | |
| 
 | |
| # COMMIT should override THEN.
 | |
| 
 | |
| /(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?/
 | |
| \= Expect no match
 | |
|   yes
 | |
| 
 | |
| /(?>(*COMMIT)(yes|no)(*THEN)(*F))?/
 | |
| \= Expect no match
 | |
|   yes
 | |
| 
 | |
| /b?(*SKIP)c/
 | |
|     bc
 | |
|     abc
 | |
|    
 | |
| /(*SKIP)bc/
 | |
| \= Expect no match
 | |
|     a
 | |
| 
 | |
| /(*SKIP)b/
 | |
| \= Expect no match
 | |
|     a 
 | |
| 
 | |
| /(?P<abn>(?P=abn)xxx|)+/
 | |
|     xxx
 | |
| 
 | |
| /(?i:([^b]))(?1)/
 | |
|     aa
 | |
|     aA     
 | |
| \= Expect no match
 | |
|     ab
 | |
|     aB
 | |
|     Ba
 | |
|     ba
 | |
| 
 | |
| /^(?&t)*+(?(DEFINE)(?<t>a))\w$/
 | |
|     aaaaaaX
 | |
| \= Expect no match 
 | |
|     aaaaaa 
 | |
| 
 | |
| /^(?&t)*(?(DEFINE)(?<t>a))\w$/
 | |
|     aaaaaaX
 | |
|     aaaaaa 
 | |
| 
 | |
| /^(a)*+(\w)/
 | |
|     aaaaX
 | |
|     YZ 
 | |
| \= Expect no match 
 | |
|     aaaa
 | |
| 
 | |
| /^(?:a)*+(\w)/
 | |
|     aaaaX
 | |
|     YZ 
 | |
| \= Expect no match 
 | |
|     aaaa
 | |
| 
 | |
| /^(a)++(\w)/
 | |
|     aaaaX
 | |
| \= Expect no match 
 | |
|     aaaa
 | |
|     YZ 
 | |
| 
 | |
| /^(?:a)++(\w)/
 | |
|     aaaaX
 | |
| \= Expect no match 
 | |
|     aaaa
 | |
|     YZ 
 | |
| 
 | |
| /^(a)?+(\w)/
 | |
|     aaaaX
 | |
|     YZ 
 | |
| 
 | |
| /^(?:a)?+(\w)/
 | |
|     aaaaX
 | |
|     YZ 
 | |
| 
 | |
| /^(a){2,}+(\w)/
 | |
|     aaaaX
 | |
| \= Expect no match
 | |
|     aaa
 | |
|     YZ 
 | |
| 
 | |
| /^(?:a){2,}+(\w)/
 | |
|     aaaaX
 | |
| \= Expect no match
 | |
|     aaa
 | |
|     YZ 
 | |
| 
 | |
| /(a|)*(?1)b/
 | |
|     b
 | |
|     ab
 | |
|     aab  
 | |
| 
 | |
| /(a)++(?1)b/
 | |
| \= Expect no match
 | |
|     ab 
 | |
|     aab
 | |
| 
 | |
| /(a)*+(?1)b/
 | |
| \= Expect no match
 | |
|     ab
 | |
|     aab  
 | |
| 
 | |
| /(?1)(?:(b)){0}/
 | |
|     b
 | |
| 
 | |
| /(foo ( \( ((?:(?> [^()]+ )|(?2))*) \) ) )/x
 | |
|     foo(bar(baz)+baz(bop))
 | |
| 
 | |
| /(A (A|B(*ACCEPT)|C) D)(E)/x
 | |
|     AB
 | |
| 
 | |
| /\A.*?(a|bc)/
 | |
|     ba
 | |
| 
 | |
| /\A.*?(?:a|bc)++/
 | |
|     ba
 | |
| 
 | |
| /\A.*?(a|bc)++/
 | |
|     ba
 | |
| 
 | |
| /\A.*?(?:a|bc|d)/
 | |
|     ba
 | |
| 
 | |
| /(?:(b))++/
 | |
|     beetle
 | |
| 
 | |
| /(?(?=(a(*ACCEPT)z))a)/
 | |
|     a
 | |
| 
 | |
| /^(a)(?1)+ab/
 | |
|     aaaab
 | |
|     
 | |
| /^(a)(?1)++ab/
 | |
| \= Expect no match
 | |
|     aaaab
 | |
| 
 | |
| /^(?=a(*:M))aZ/mark
 | |
|     aZbc
 | |
| 
 | |
| /^(?!(*:M)b)aZ/mark
 | |
|     aZbc
 | |
| 
 | |
| /(?(DEFINE)(a))?b(?1)/
 | |
|     backgammon
 | |
| 
 | |
| /^\N+/
 | |
|     abc\ndef
 | |
|     
 | |
| /^\N{1,}/
 | |
|     abc\ndef 
 | |
| 
 | |
| /(?(R)a+|(?R)b)/
 | |
|     aaaabcde
 | |
| 
 | |
| /(?(R)a+|((?R))b)/
 | |
|     aaaabcde
 | |
| 
 | |
| /((?(R)a+|(?1)b))/
 | |
|     aaaabcde
 | |
| 
 | |
| /((?(R1)a+|(?1)b))/
 | |
|     aaaabcde
 | |
|     
 | |
| /((?(R)a|(?1)))*/
 | |
|     aaa
 | |
| 
 | |
| /((?(R)a|(?1)))+/
 | |
|     aaa 
 | |
| 
 | |
| /a(*:any 
 | |
| name)/mark
 | |
|     abc
 | |
|     
 | |
| /(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))/
 | |
|     a
 | |
|     ba
 | |
|     bba 
 | |
|     
 | |
| # Checking revised (*THEN) handling.
 | |
| 
 | |
| # Capture
 | |
| 
 | |
| /^.*? (a(*THEN)b) c/x
 | |
| \= Expect no match
 | |
|     aabc
 | |
| 
 | |
| /^.*? (a(*THEN)b|(*F)) c/x
 | |
|     aabc
 | |
| 
 | |
| /^.*? ( (a(*THEN)b) | (*F) ) c/x
 | |
|     aabc
 | |
| 
 | |
| /^.*? ( (a(*THEN)b) ) c/x
 | |
| \= Expect no match
 | |
|     aabc
 | |
| 
 | |
| # Non-capture
 | |
| 
 | |
| /^.*? (?:a(*THEN)b) c/x
 | |
| \= Expect no match
 | |
|     aabc
 | |
| 
 | |
| /^.*? (?:a(*THEN)b|(*F)) c/x
 | |
|     aabc
 | |
| 
 | |
| /^.*? (?: (?:a(*THEN)b) | (*F) ) c/x
 | |
|     aabc
 | |
| 
 | |
| /^.*? (?: (?:a(*THEN)b) ) c/x
 | |
| \= Expect no match
 | |
|     aabc
 | |
| 
 | |
| # Atomic
 | |
| 
 | |
| /^.*? (?>a(*THEN)b) c/x
 | |
| \= Expect no match
 | |
|     aabc
 | |
| 
 | |
| /^.*? (?>a(*THEN)b|(*F)) c/x
 | |
|     aabc
 | |
| 
 | |
| /^.*? (?> (?>a(*THEN)b) | (*F) ) c/x
 | |
|     aabc
 | |
| 
 | |
| /^.*? (?> (?>a(*THEN)b) ) c/x
 | |
| \= Expect no match
 | |
|     aabc
 | |
| 
 | |
| # Possessive capture
 | |
| 
 | |
| /^.*? (a(*THEN)b)++ c/x
 | |
| \= Expect no match
 | |
|     aabc
 | |
| 
 | |
| /^.*? (a(*THEN)b|(*F))++ c/x
 | |
|     aabc
 | |
| 
 | |
| /^.*? ( (a(*THEN)b)++ | (*F) )++ c/x
 | |
|     aabc
 | |
| 
 | |
| /^.*? ( (a(*THEN)b)++ )++ c/x
 | |
| \= Expect no match
 | |
|     aabc
 | |
| 
 | |
| # Possessive non-capture
 | |
| 
 | |
| /^.*? (?:a(*THEN)b)++ c/x
 | |
| \= Expect no match
 | |
|     aabc
 | |
| 
 | |
| /^.*? (?:a(*THEN)b|(*F))++ c/x
 | |
|     aabc
 | |
| 
 | |
| /^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c/x
 | |
|     aabc
 | |
| 
 | |
| /^.*? (?: (?:a(*THEN)b)++ )++ c/x
 | |
| \= Expect no match
 | |
|     aabc
 | |
|     
 | |
| # Condition assertion
 | |
| 
 | |
| /^(?(?=a(*THEN)b)ab|ac)/
 | |
|     ac
 | |
|  
 | |
| # Condition
 | |
| 
 | |
| /^.*?(?(?=a)a|b(*THEN)c)/
 | |
| \= Expect no match
 | |
|     ba
 | |
| 
 | |
| /^.*?(?:(?(?=a)a|b(*THEN)c)|d)/
 | |
|     ba
 | |
| 
 | |
| /^.*?(?(?=a)a(*THEN)b|c)/
 | |
| \= Expect no match
 | |
|     ac
 | |
| 
 | |
| # Assertion
 | |
| 
 | |
| /^.*(?=a(*THEN)b)/
 | |
|     aabc
 | |
| 
 | |
| # --------------------------
 | |
| 
 | |
| /(?>a(*:m))/imsx,mark
 | |
|     a
 | |
| 
 | |
| /(?>(a)(*:m))/imsx,mark
 | |
|     a
 | |
| 
 | |
| /(?<=a(*ACCEPT)b)c/
 | |
|     xacd
 | |
| 
 | |
| /(?<=(a(*ACCEPT)b))c/
 | |
|     xacd
 | |
| 
 | |
| /(?<=(a(*COMMIT)b))c/
 | |
|     xabcd
 | |
| \= Expect no match 
 | |
|     xacd
 | |
|     
 | |
| /(?<!a(*FAIL)b)c/
 | |
|     xcd
 | |
|     acd 
 | |
| 
 | |
| /(?<=a(*:N)b)c/mark
 | |
|     xabcd
 | |
|     
 | |
| /(?<=a(*PRUNE)b)c/
 | |
|     xabcd 
 | |
| 
 | |
| /(?<=a(*SKIP)b)c/
 | |
|     xabcd 
 | |
| 
 | |
| /(?<=a(*THEN)b)c/
 | |
|     xabcd 
 | |
| 
 | |
| /(a)(?2){2}(.)/
 | |
|     abcd
 | |
| 
 | |
| /(*MARK:A)(*PRUNE:B)(C|X)/mark
 | |
|     C
 | |
| \= Expect no match
 | |
|     D 
 | |
| 
 | |
| /(*MARK:A)(*PRUNE:B)(C|X)/mark
 | |
|     C
 | |
| \= Expect no match
 | |
|     D 
 | |
| 
 | |
| /(*MARK:A)(*THEN:B)(C|X)/mark
 | |
|     C
 | |
| \= Expect no match
 | |
|     D 
 | |
| 
 | |
| /(*MARK:A)(*THEN:B)(C|X)/mark,no_start_optimize
 | |
|     C
 | |
| \= Expect no match
 | |
|     D 
 | |
| 
 | |
| /(*MARK:A)(*THEN:B)(C|X)/mark
 | |
|     C
 | |
| \= Expect no match
 | |
|     D 
 | |
| 
 | |
| # This should fail, as the skip causes a bump to offset 3 (the skip).
 | |
| 
 | |
| /A(*MARK:A)A+(*SKIP)(B|Z) | AC/x,mark
 | |
| \= Expect no match
 | |
|     AAAC
 | |
| 
 | |
| # Same 
 | |
| 
 | |
| /A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/x,mark
 | |
| \= Expect no match
 | |
|     AAAC
 | |
| 
 | |
| /A(*:A)A+(*SKIP)(B|Z) | AC/x,mark
 | |
| \= Expect no match
 | |
|     AAAC
 | |
| 
 | |
| # This should fail, as a null name is the same as no name.
 | |
| 
 | |
| /A(*MARK:A)A+(*SKIP:)(B|Z) | AC/x,mark
 | |
| \= Expect no match
 | |
|     AAAC
 | |
| 
 | |
| # A check on what happens after hitting a mark and them bumping along to
 | |
| # something that does not even start. Perl reports tags after the failures
 | |
| # here, though it does not when the individual letters are made into something
 | |
| # more complicated.
 | |
| 
 | |
| /A(*:A)B|XX(*:B)Y/mark
 | |
|     AABC
 | |
|     XXYZ 
 | |
| \= Expect no match
 | |
|     XAQQ  
 | |
|     XAQQXZZ  
 | |
|     AXQQQ 
 | |
|     AXXQQQ 
 | |
|     
 | |
| /^(A(*THEN:A)B|C(*THEN:B)D)/mark
 | |
|     AB
 | |
|     CD
 | |
| \= Expect no match
 | |
|     AC
 | |
|     CB    
 | |
|     
 | |
| /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/mark
 | |
|     AB
 | |
|     CD
 | |
| \= Expect no match
 | |
|     AC
 | |
|     CB    
 | |
|     
 | |
| # An empty name does not pass back an empty string. It is the same as if no
 | |
| # name were given.
 | |
| 
 | |
| /^(A(*PRUNE:)B|C(*PRUNE:B)D)/mark
 | |
|     AB
 | |
|     CD 
 | |
| 
 | |
| # PRUNE goes to next bumpalong; COMMIT does not.
 | |
|     
 | |
| /A(*PRUNE:A)B/mark
 | |
|     ACAB
 | |
| 
 | |
| # Mark names can be duplicated.
 | |
| 
 | |
| /A(*:A)B|X(*:A)Y/mark
 | |
|     AABC
 | |
|     XXYZ 
 | |
|     
 | |
| /b(*:m)f|a(*:n)w/mark
 | |
|     aw 
 | |
| \= Expect no match 
 | |
|     abc
 | |
| 
 | |
| /b(*:m)f|aw/mark
 | |
|     abaw
 | |
| \= Expect no match 
 | |
|     abc
 | |
|     abax 
 | |
| 
 | |
| /A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC/x,mark
 | |
|     AAAC
 | |
| 
 | |
| /a(*PRUNE:X)bc|qq/mark,no_start_optimize
 | |
| \= Expect no match
 | |
|     axy
 | |
| 
 | |
| /a(*THEN:X)bc|qq/mark,no_start_optimize
 | |
| \= Expect no match
 | |
|     axy
 | |
| 
 | |
| /(?=a(*MARK:A)b)..x/mark
 | |
|     abxy
 | |
| \= Expect no match
 | |
|     abpq  
 | |
| 
 | |
| /(?=a(*MARK:A)b)..(*:Y)x/mark
 | |
|     abxy
 | |
| \= Expect no match
 | |
|     abpq  
 | |
| 
 | |
| /(?=a(*PRUNE:A)b)..x/mark
 | |
|     abxy
 | |
| \= Expect no match
 | |
|     abpq  
 | |
| 
 | |
| /(?=a(*PRUNE:A)b)..(*:Y)x/mark
 | |
|     abxy
 | |
| \= Expect no match
 | |
|     abpq  
 | |
| 
 | |
| /(?=a(*THEN:A)b)..x/mark
 | |
|     abxy
 | |
| \= Expect no match
 | |
|     abpq  
 | |
| 
 | |
| /(?=a(*THEN:A)b)..(*:Y)x/mark
 | |
|     abxy
 | |
| \= Expect no match
 | |
|     abpq  
 | |
| 
 | |
| /(another)?(\1?)test/
 | |
|     hello world test
 | |
| 
 | |
| /(another)?(\1+)test/
 | |
| \= Expect no match
 | |
|     hello world test
 | |
| 
 | |
| /(a(*COMMIT)b){0}a(?1)|aac/
 | |
|     aac
 | |
| 
 | |
| /((?:a?)*)*c/
 | |
|     aac   
 | |
| 
 | |
| /((?>a?)*)*c/
 | |
|     aac   
 | |
| 
 | |
| /(?>.*?a)(?<=ba)/
 | |
|     aba
 | |
| 
 | |
| /(?:.*?a)(?<=ba)/
 | |
|     aba
 | |
| 
 | |
| /(?>.*?a)b/s
 | |
|     aab
 | |
| 
 | |
| /(?>.*?a)b/
 | |
|     aab
 | |
| 
 | |
| /(?>^a)b/s
 | |
| \= Expect no match
 | |
|     aab
 | |
| 
 | |
| /(?>.*?)(?<=(abcd)|(wxyz))/
 | |
|     alphabetabcd
 | |
|     endingwxyz 
 | |
| 
 | |
| /(?>.*)(?<=(abcd)|(wxyz))/
 | |
|     alphabetabcd
 | |
|     endingwxyz 
 | |
| 
 | |
| "(?>.*)foo"
 | |
| \= Expect no match
 | |
|     abcdfooxyz
 | |
|     
 | |
| "(?>.*?)foo"
 | |
|     abcdfooxyz
 | |
| 
 | |
| /(?:(a(*PRUNE)b)){0}(?:(?1)|ac)/
 | |
|     ac
 | |
|     
 | |
| /(?:(a(*SKIP)b)){0}(?:(?1)|ac)/
 | |
|     ac 
 | |
| 
 | |
| /(?<=(*SKIP)ac)a/
 | |
| \= Expect no match
 | |
|     aa
 | |
| 
 | |
| /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/x,mark
 | |
|     AAAC
 | |
| 
 | |
| /a(*SKIP:m)x|ac(*:n)(*SKIP:n)d|ac/mark
 | |
|     acacd
 | |
| 
 | |
| /A(*SKIP:m)x|A(*SKIP:n)x|AB/mark
 | |
|     AB
 | |
| 
 | |
| /((*SKIP:r)d){0}a(*SKIP:m)x|ac(*:n)|ac/mark
 | |
|     acacd
 | |
| 
 | |
| # Tests that try to figure out how Perl works. My hypothesis is that the first
 | |
| # verb that is backtracked onto is the one that acts. This seems to be the case
 | |
| # almost all the time, but there is one exception that is perhaps a bug.
 | |
| 
 | |
| # This matches "aaaac"; each PRUNE advances one character until the subject no
 | |
| # longer starts with 5 'a's.
 | |
| 
 | |
| /aaaaa(*PRUNE)b|a+c/
 | |
|     aaaaaac
 | |
| 
 | |
| # Putting SKIP in front of PRUNE makes no difference, as it is never
 | |
| # backtracked onto, whether or not it has a label.
 | |
| 
 | |
| /aaaaa(*SKIP)(*PRUNE)b|a+c/
 | |
|     aaaaaac
 | |
| 
 | |
| /aaaaa(*SKIP:N)(*PRUNE)b|a+c/
 | |
|     aaaaaac
 | |
| 
 | |
| /aaaa(*:N)a(*SKIP:N)(*PRUNE)b|a+c/
 | |
|     aaaaaac
 | |
| 
 | |
| # Putting THEN in front makes no difference.
 | |
|     
 | |
| /aaaaa(*THEN)(*PRUNE)b|a+c/
 | |
|     aaaaaac
 | |
|  
 | |
| # However, putting COMMIT in front of the prune changes it to "no match". I 
 | |
| # think this is inconsistent and possibly a bug. For the moment, running this
 | |
| # test is moved out of the Perl-compatible file. 
 | |
| 
 | |
| /aaaaa(*COMMIT)(*PRUNE)b|a+c/
 | |
|     
 | |
| # OK, lets play the same game again using SKIP instead of PRUNE.
 | |
| 
 | |
| # This matches "ac" because SKIP forces the next match to start on the
 | |
| # sixth "a". 
 | |
| 
 | |
| /aaaaa(*SKIP)b|a+c/
 | |
|     aaaaaac
 | |
|  
 | |
| # Putting PRUNE in front makes no difference. 
 | |
| 
 | |
| /aaaaa(*PRUNE)(*SKIP)b|a+c/
 | |
|     aaaaaac
 | |
| 
 | |
| # Putting THEN in front makes no difference. 
 | |
| 
 | |
| /aaaaa(*THEN)(*SKIP)b|a+c/
 | |
|     aaaaaac
 | |
| 
 | |
| # In this case, neither does COMMIT. This still matches "ac". 
 | |
| 
 | |
| /aaaaa(*COMMIT)(*SKIP)b|a+c/
 | |
|     aaaaaac
 | |
|     
 | |
| # This gives "no match", as expected. 
 | |
| 
 | |
| /aaaaa(*COMMIT)b|a+c/
 | |
| \= Expect no match
 | |
|     aaaaaac
 | |
| 
 | |
| # ---- Tests using THEN ----
 | |
| 
 | |
| # This matches "aaaaaac", as expected. 
 | |
| 
 | |
| /aaaaa(*THEN)b|a+c/
 | |
|     aaaaaac
 | |
| 
 | |
| # Putting SKIP in front makes no difference. 
 | |
| 
 | |
| /aaaaa(*SKIP)(*THEN)b|a+c/
 | |
|     aaaaaac
 | |
|     
 | |
| # Putting PRUNE in front makes no difference. 
 | |
| 
 | |
| /aaaaa(*PRUNE)(*THEN)b|a+c/
 | |
|     aaaaaac
 | |
|     
 | |
| # Putting COMMIT in front makes no difference. 
 | |
| 
 | |
| /aaaaa(*COMMIT)(*THEN)b|a+c/
 | |
|     aaaaaac
 | |
|     
 | |
| # End of "priority" tests  
 | |
| 
 | |
| /aaaaa(*:m)(*PRUNE:m)(*SKIP:m)m|a+/
 | |
|     aaaaaa
 | |
| 
 | |
| /aaaaa(*:m)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/
 | |
|     aaaaaa
 | |
| 
 | |
| /aaaaa(*:n)(*PRUNE:m)(*SKIP:m)m|a+/
 | |
|     aaaaaa
 | |
| 
 | |
| /aaaaa(*:n)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/
 | |
|     aaaaaa
 | |
| 
 | |
| /a(*MARK:A)aa(*PRUNE:A)a(*SKIP:A)b|a+c/
 | |
|     aaaac
 | |
| 
 | |
| /a(*MARK:A)aa(*MARK:A)a(*SKIP:A)b|a+c/
 | |
|     aaaac
 | |
| 
 | |
| /aaa(*PRUNE:A)a(*SKIP:A)b|a+c/
 | |
|     aaaac
 | |
| 
 | |
| /aaa(*MARK:A)a(*SKIP:A)b|a+c/
 | |
|     aaaac
 | |
| 
 | |
| /a(*:m)a(*COMMIT)(*SKIP:m)b|a+c/mark
 | |
|     aaaaaac
 | |
| 
 | |
| /.?(a|b(*THEN)c)/
 | |
|     ba
 | |
| 
 | |
| /(a(*COMMIT)b)c|abd/
 | |
|     abc
 | |
| \= Expect no match
 | |
|     abd
 | |
| 
 | |
| /(?=a(*COMMIT)b)abc|abd/
 | |
|     abc
 | |
|     abd
 | |
| 
 | |
| /(?>a(*COMMIT)b)c|abd/
 | |
|     abc
 | |
|     abd
 | |
| 
 | |
| /a(?=b(*COMMIT)c)[^d]|abd/
 | |
|     abc
 | |
| \= Expect no match
 | |
|     abd
 | |
| 
 | |
| /a(?=bc).|abd/
 | |
|     abd
 | |
|     abc 
 | |
|     
 | |
| /a(?>b(*COMMIT)c)d|abd/
 | |
| \= Expect no match
 | |
|     abceabd 
 | |
| 
 | |
| /a(?>bc)d|abd/
 | |
|     abceabd 
 | |
| 
 | |
| /(?>a(*COMMIT)b)c|abd/
 | |
|     abd
 | |
| 
 | |
| /(?>a(*COMMIT)c)d|abd/
 | |
| \= Expect no match
 | |
|     abd
 | |
| 
 | |
| /((?=a(*COMMIT)b)ab|ac){0}(?:(?1)|a(c))/
 | |
|     ac 
 | |
|     
 | |
| # These tests were formerly in test 2, but changes in PCRE and Perl have
 | |
| # made them compatible. 
 | |
|     
 | |
| /^(a)?(?(1)a|b)+$/
 | |
| \= Expect no match
 | |
|     a
 | |
| 
 | |
| /(?=a\Kb)ab/
 | |
|     ab 
 | |
| 
 | |
| /(?!a\Kb)ac/
 | |
|     ac 
 | |
|     
 | |
| /^abc(?<=b\Kc)d/
 | |
|     abcd
 | |
| 
 | |
| /^abc(?<!b\Kq)d/
 | |
|     abcd
 | |
| 
 | |
| /A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC/x,mark
 | |
| \= Expect no match
 | |
|     AAAC
 | |
| 
 | |
| /^((abc|abcx)(*THEN)y|abcd)/
 | |
|     abcd
 | |
| \= Expect no match 
 | |
|     abcxy 
 | |
|     
 | |
| /^((yes|no)(*THEN)(*F))?/
 | |
| \= Expect no match
 | |
|     yes
 | |
| 
 | |
| /(A (.*)   C? (*THEN)  | A D) (*FAIL)/x
 | |
| \= Expect no match
 | |
|     AbcdCBefgBhiBqz
 | |
| 
 | |
| /(A (.*)   C? (*THEN)  | A D) z/x
 | |
| \= Expect no match
 | |
|     AbcdCBefgBhiBqz
 | |
| 
 | |
| /(A (.*)   C? (*THEN)  | A D) \s* (*FAIL)/x
 | |
| \= Expect no match
 | |
|     AbcdCBefgBhiBqz
 | |
| 
 | |
| /(A (.*)   C? (*THEN)  | A D) \s* z/x
 | |
| \= Expect no match
 | |
|     AbcdCBefgBhiBqz
 | |
| 
 | |
| /(A (.*)   (?:C|) (*THEN)  | A D) (*FAIL)/x
 | |
| \= Expect no match
 | |
|     AbcdCBefgBhiBqz
 | |
| 
 | |
| /(A (.*)   (?:C|) (*THEN)  | A D) z/x
 | |
| \= Expect no match
 | |
|     AbcdCBefgBhiBqz
 | |
| 
 | |
| /(A (.*)   C{0,6} (*THEN)  | A D) (*FAIL)/x
 | |
| \= Expect no match
 | |
|     AbcdCBefgBhiBqz
 | |
| 
 | |
| /(A (.*)   C{0,6} (*THEN)  | A D) z/x
 | |
| \= Expect no match
 | |
|     AbcdCBefgBhiBqz
 | |
| 
 | |
| /(A (.*)   (CE){0,6} (*THEN)  | A D) (*FAIL)/x
 | |
| \= Expect no match
 | |
|     AbcdCEBefgBhiBqz
 | |
| 
 | |
| /(A (.*)   (CE){0,6} (*THEN)  | A D) z/x
 | |
| \= Expect no match
 | |
|     AbcdCEBefgBhiBqz
 | |
| 
 | |
| /(A (.*)   (CE*){0,6} (*THEN)  | A D) (*FAIL)/x
 | |
| \= Expect no match
 | |
|     AbcdCBefgBhiBqz
 | |
| 
 | |
| /(A (.*)   (CE*){0,6} (*THEN)  | A D) z/x
 | |
| \= Expect no match
 | |
|     AbcdCBefgBhiBqz
 | |
| 
 | |
| /(?=a(*COMMIT)b|ac)ac|ac/
 | |
| \= Expect no match
 | |
|     ac
 | |
| 
 | |
| /(?=a(*COMMIT)b|(ac)) ac | (a)c/x
 | |
| \= Expect no match
 | |
|     ac
 | |
| 
 | |
| # ----
 | |
| 
 | |
| /(?(?!b(*THEN)a)bn|bnn)/
 | |
|     bnn 
 | |
| 
 | |
| /(?!b(*SKIP)a)bn|bnn/
 | |
|     bnn
 | |
|     
 | |
| /(?(?!b(*SKIP)a)bn|bnn)/
 | |
|     bnn 
 | |
| 
 | |
| /(?!b(*PRUNE)a)bn|bnn/
 | |
|     bnn
 | |
|     
 | |
| /(?(?!b(*PRUNE)a)bn|bnn)/
 | |
|     bnn 
 | |
|    
 | |
| /(?!b(*COMMIT)a)bn|bnn/
 | |
|     bnn
 | |
|     
 | |
| /(?(?!b(*COMMIT)a)bn|bnn)/
 | |
|    bnn 
 | |
| 
 | |
| /(?=b(*SKIP)a)bn|bnn/
 | |
| \= Expect no match
 | |
|     bnn
 | |
| 
 | |
| /(?=b(*THEN)a)bn|bnn/
 | |
|     bnn
 | |
|     
 | |
| /^(?!a(*SKIP)b)/
 | |
|     ac
 | |
| 
 | |
| /^(?!a(*SKIP)b)../
 | |
|     acd
 | |
| 
 | |
| /(?!a(*SKIP)b)../
 | |
|     acd
 | |
| 
 | |
| /^(?(?!a(*SKIP)b))/
 | |
|     ac
 | |
| 
 | |
| /^(?!a(*PRUNE)b)../
 | |
|     acd
 | |
| 
 | |
| /(?!a(*PRUNE)b)../
 | |
|     acd
 | |
| 
 | |
| /(?!a(*COMMIT)b)ac|cd/
 | |
|     ac
 | |
| 
 | |
| /\A.*?(?:a|bc)/
 | |
|     ba
 | |
| 
 | |
| /^(A(*THEN)B|C(*THEN)D)/
 | |
|     CD           
 | |
| 
 | |
| /(*:m(m)(?&y)(?(DEFINE)(?<y>b))/mark
 | |
|     abc
 | |
| 
 | |
| /(*PRUNE:m(m)(?&y)(?(DEFINE)(?<y>b))/mark
 | |
|     abc
 | |
| 
 | |
| /(*SKIP:m(m)(?&y)(?(DEFINE)(?<y>b))/mark
 | |
|     abc
 | |
| 
 | |
| /(*THEN:m(m)(?&y)(?(DEFINE)(?<y>b))/mark
 | |
|     abc
 | |
| 
 | |
| /^\d*\w{4}/
 | |
|     1234
 | |
| \= Expect no match
 | |
|     123 
 | |
| 
 | |
| /^[^b]*\w{4}/
 | |
|     aaaa
 | |
| \= Expect no match
 | |
|     aaa     
 | |
| 
 | |
| /^[^b]*\w{4}/i
 | |
|     aaaa
 | |
| \= Expect no match
 | |
|     aaa     
 | |
| 
 | |
| /^a*\w{4}/
 | |
|     aaaa
 | |
| \= Expect no match
 | |
|     aaa     
 | |
| 
 | |
| /^a*\w{4}/i
 | |
|     aaaa
 | |
| \= Expect no match
 | |
|     aaa     
 | |
| 
 | |
| /(?:(?<n>foo)|(?<n>bar))\k<n>/dupnames
 | |
|     foofoo
 | |
|     barbar
 | |
| 
 | |
| /(?<n>A)(?:(?<n>foo)|(?<n>bar))\k<n>/dupnames
 | |
|     AfooA
 | |
|     AbarA  
 | |
| \= Expect no match 
 | |
|     Afoofoo
 | |
|     Abarbar
 | |
| 
 | |
| /^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
 | |
|     1 IN SOA non-sp1 non-sp2(
 | |
| 
 | |
| /^ (?:(?<A>A)|(?'B'B)(?<A>A)) (?('A')x) (?(<B>)y)$/x,dupnames
 | |
|     Ax
 | |
|     BAxy 
 | |
|     
 | |
| /^A\xZ/
 | |
|     A\0Z 
 | |
| 
 | |
| /^A\o{123}B/
 | |
|     A\123B
 | |
| 
 | |
| / ^ a + + b $ /x
 | |
|     aaaab
 | |
|     
 | |
| / ^ a + #comment
 | |
|   + b $ /x
 | |
|     aaaab
 | |
|     
 | |
| / ^ a + #comment
 | |
|   #comment
 | |
|   + b $ /x
 | |
|     aaaab
 | |
|     
 | |
| / ^ (?> a + ) b $ /x
 | |
|     aaaab 
 | |
| 
 | |
| / ^ ( a + ) + + \w $ /x
 | |
|     aaaab 
 | |
| 
 | |
| /(?:a\Kb)*+/aftertext
 | |
|     ababc
 | |
| 
 | |
| /(?>a\Kb)*/aftertext
 | |
|     ababc
 | |
| 
 | |
| /(?:a\Kb)*/aftertext
 | |
|     ababc
 | |
| 
 | |
| /(a\Kb)*+/aftertext
 | |
|     ababc
 | |
| 
 | |
| /(a\Kb)*/aftertext
 | |
|     ababc
 | |
| 
 | |
| /(?:x|(?:(xx|yy)+|x|x|x|x|x)|a|a|a)bc/
 | |
| \= Expect no match
 | |
|     acb
 | |
| 
 | |
| '\A(?:[^\"]++|\"(?:[^\"]*+|\"\")*+\")++'
 | |
|     NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
 | |
| 
 | |
| '\A(?:[^\"]++|\"(?:[^\"]++|\"\")*+\")++'
 | |
|     NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
 | |
| 
 | |
| '\A(?:[^\"]++|\"(?:[^\"]++|\"\")++\")++'
 | |
|     NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
 | |
| 
 | |
| '\A([^\"1]++|[\"2]([^\"3]*+|[\"4][\"5])*+[\"6])++'
 | |
|     NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
 | |
| 
 | |
| /^\w+(?>\s*)(?<=\w)/
 | |
|     test test
 | |
| 
 | |
| /(?P<same>a)(?P<same>b)/g,dupnames
 | |
|     abbaba
 | |
| 
 | |
| /(?P<same>a)(?P<same>b)(?P=same)/g,dupnames
 | |
|     abbaba
 | |
| 
 | |
| /(?P=same)?(?P<same>a)(?P<same>b)/g,dupnames
 | |
|     abbaba
 | |
| 
 | |
| /(?:(?P=same)?(?:(?P<same>a)|(?P<same>b))(?P=same))+/g,dupnames
 | |
|     bbbaaabaabb
 | |
| 
 | |
| /(?:(?P=same)?(?:(?P=same)(?P<same>a)(?P=same)|(?P=same)?(?P<same>b)(?P=same)){2}(?P=same)(?P<same>c)(?P=same)){2}(?P<same>z)?/g,dupnames
 | |
| \= Expect no match
 | |
|     bbbaaaccccaaabbbcc
 | |
| 
 | |
| /(?P<Name>a)?(?P<Name2>b)?(?(<Name>)c|d)*l/
 | |
|     acl
 | |
|     bdl
 | |
|     adl
 | |
|     bcl    
 | |
| 
 | |
| /\sabc/
 | |
|     \x{0b}abc
 | |
| 
 | |
| /[\Qa]\E]+/
 | |
|     aa]]
 | |
| 
 | |
| /[\Q]a\E]+/
 | |
|     aa]]
 | |
| 
 | |
| /A((((((((a))))))))\8B/ 
 | |
|     AaaB
 | |
| 
 | |
| /A(((((((((a)))))))))\9B/ 
 | |
|     AaaB
 | |
|     
 | |
| /A[\8\9]B/
 | |
|     A8B
 | |
|     A9B  
 | |
| 
 | |
| /(|ab)*?d/
 | |
|    abd
 | |
|    xyd 
 | |
| 
 | |
| /(?:((abcd))|(((?:(?:(?:(?:abc|(?:abcdef))))b)abcdefghi)abc)|((*ACCEPT)))/
 | |
|     1234abcd
 | |
| 
 | |
| /(\2|a)(\1)/
 | |
|     aaa
 | |
| 
 | |
| /(\2)(\1)/
 | |
| 
 | |
| "Z*(|d*){216}"
 | |
| 
 | |
| "(?1)(?#?'){8}(a)"
 | |
|     baaaaaaaaac
 | |
| 
 | |
| /((((((((((((x))))))))))))\12/
 | |
|     xx
 | |
| 
 | |
| /A[\8]B[\9]C/
 | |
|     A8B9C
 | |
| 
 | |
| /(?1)()((((((\1++))\x85)+)|))/
 | |
|     \x85\x85
 | |
| 
 | |
| "(?|(\k'Pm')|(?'Pm'))"
 | |
|     abcd
 | |
| 
 | |
| /(?|(aaa)|(b))\g{1}/
 | |
|     aaaaaa
 | |
|     bb 
 | |
| 
 | |
| /(?|(aaa)|(b))(?1)/
 | |
|     aaaaaa
 | |
|     baaa 
 | |
| \= Expect no match 
 | |
|     bb 
 | |
| 
 | |
| /(?|(aaa)|(b))/
 | |
|     xaaa
 | |
|     xbc 
 | |
| 
 | |
| /(?|(?'a'aaa)|(?'a'b))\k'a'/
 | |
|     aaaaaa
 | |
|     bb 
 | |
| 
 | |
| /(?|(?'a'aaa)|(?'a'b))(?'a'cccc)\k'a'/dupnames
 | |
|     aaaccccaaa
 | |
|     bccccb 
 | |
| 
 | |
| # /x does not apply to MARK labels 
 | |
| 
 | |
| /x (*MARK:ab cd # comment
 | |
| ef) x/x,mark
 | |
|     axxz
 | |
| 
 | |
| /(?<=a(B){0}c)X/
 | |
|     acX
 | |
| 
 | |
| /(?<DEFINE>b)(?(DEFINE)(a+))(?&DEFINE)/          
 | |
|     bbbb 
 | |
| \= Expect no match     
 | |
|     baaab
 | |
| 
 | |
| /(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[,;:])(?=.{8,16})(?!.*[\s])/
 | |
|     \   Fred:099
 | |
| 
 | |
| /(?=.*X)X$/ 
 | |
|     \  X
 | |
| 
 | |
| /(?s)(?=.*?)b/
 | |
|     aabc
 | |
| 
 | |
| /(Z)(a)\2{1,2}?(?-i)\1X/i
 | |
|     ZaAAZX
 | |
| 
 | |
| /(?'c')XX(?'YYYYYYYYYYYYYYYYYYYYYYYCl')/
 | |
| 
 | |
| /[s[:digit:]\E-H]+/
 | |
|     s09-H
 | |
| 
 | |
| /[s[:digit:]\Q\E-H]+/
 | |
|     s09-H
 | |
| 
 | |
| /a+(?:|b)a/
 | |
|     aaaa
 | |
| 
 | |
| /X?(R||){3335}/
 | |
| 
 | |
| # End of testinput1 
 |