xref: /PHP-5.6/ext/pcre/pcrelib/testdata/testinput1 (revision ca02d9c2)
1/-- This set of tests is for features that are compatible with all versions of
2    Perl >= 5.10, in non-UTF-8 mode. It should run clean for the 8-bit, 16-bit,
3    and 32-bit PCRE libraries. --/
4
5< forbid 89?=ABCDEFfGILMNPTUWXZ<
6
7/the quick brown fox/
8    the quick brown fox
9    The quick brown FOX
10    What do you know about the quick brown fox?
11    What do you know about THE QUICK BROWN FOX?
12
13/The quick brown fox/i
14    the quick brown fox
15    The quick brown FOX
16    What do you know about the quick brown fox?
17    What do you know about THE QUICK BROWN FOX?
18
19/abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
20    abcd\t\n\r\f\a\e9;\$\\?caxyz
21
22/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
23    abxyzpqrrrabbxyyyypqAzz
24    abxyzpqrrrabbxyyyypqAzz
25    aabxyzpqrrrabbxyyyypqAzz
26    aaabxyzpqrrrabbxyyyypqAzz
27    aaaabxyzpqrrrabbxyyyypqAzz
28    abcxyzpqrrrabbxyyyypqAzz
29    aabcxyzpqrrrabbxyyyypqAzz
30    aaabcxyzpqrrrabbxyyyypAzz
31    aaabcxyzpqrrrabbxyyyypqAzz
32    aaabcxyzpqrrrabbxyyyypqqAzz
33    aaabcxyzpqrrrabbxyyyypqqqAzz
34    aaabcxyzpqrrrabbxyyyypqqqqAzz
35    aaabcxyzpqrrrabbxyyyypqqqqqAzz
36    aaabcxyzpqrrrabbxyyyypqqqqqqAzz
37    aaaabcxyzpqrrrabbxyyyypqAzz
38    abxyzzpqrrrabbxyyyypqAzz
39    aabxyzzzpqrrrabbxyyyypqAzz
40    aaabxyzzzzpqrrrabbxyyyypqAzz
41    aaaabxyzzzzpqrrrabbxyyyypqAzz
42    abcxyzzpqrrrabbxyyyypqAzz
43    aabcxyzzzpqrrrabbxyyyypqAzz
44    aaabcxyzzzzpqrrrabbxyyyypqAzz
45    aaaabcxyzzzzpqrrrabbxyyyypqAzz
46    aaaabcxyzzzzpqrrrabbbxyyyypqAzz
47    aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
48    aaabcxyzpqrrrabbxyyyypABzz
49    aaabcxyzpqrrrabbxyyyypABBzz
50    >>>aaabxyzpqrrrabbxyyyypqAzz
51    >aaaabxyzpqrrrabbxyyyypqAzz
52    >>>>abcxyzpqrrrabbxyyyypqAzz
53    *** Failers
54    abxyzpqrrabbxyyyypqAzz
55    abxyzpqrrrrabbxyyyypqAzz
56    abxyzpqrrrabxyyyypqAzz
57    aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
58    aaaabcxyzzzzpqrrrabbbxyyypqAzz
59    aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
60
61/^(abc){1,2}zz/
62    abczz
63    abcabczz
64    *** Failers
65    zz
66    abcabcabczz
67    >>abczz
68
69/^(b+?|a){1,2}?c/
70    bc
71    bbc
72    bbbc
73    bac
74    bbac
75    aac
76    abbbbbbbbbbbc
77    bbbbbbbbbbbac
78    *** Failers
79    aaac
80    abbbbbbbbbbbac
81
82/^(b+|a){1,2}c/
83    bc
84    bbc
85    bbbc
86    bac
87    bbac
88    aac
89    abbbbbbbbbbbc
90    bbbbbbbbbbbac
91    *** Failers
92    aaac
93    abbbbbbbbbbbac
94
95/^(b+|a){1,2}?bc/
96    bbc
97
98/^(b*|ba){1,2}?bc/
99    babc
100    bbabc
101    bababc
102    *** Failers
103    bababbc
104    babababc
105
106/^(ba|b*){1,2}?bc/
107    babc
108    bbabc
109    bababc
110    *** Failers
111    bababbc
112    babababc
113
114/^\ca\cA\c[;\c:/
115    \x01\x01\e;z
116
117/^[ab\]cde]/
118    athing
119    bthing
120    ]thing
121    cthing
122    dthing
123    ething
124    *** Failers
125    fthing
126    [thing
127    \\thing
128
129/^[]cde]/
130    ]thing
131    cthing
132    dthing
133    ething
134    *** Failers
135    athing
136    fthing
137
138/^[^ab\]cde]/
139    fthing
140    [thing
141    \\thing
142    *** Failers
143    athing
144    bthing
145    ]thing
146    cthing
147    dthing
148    ething
149
150/^[^]cde]/
151    athing
152    fthing
153    *** Failers
154    ]thing
155    cthing
156    dthing
157    ething
158
159/^\�/
160161
162/^�/
163164
165/^[0-9]+$/
166    0
167    1
168    2
169    3
170    4
171    5
172    6
173    7
174    8
175    9
176    10
177    100
178    *** Failers
179    abc
180
181/^.*nter/
182    enter
183    inter
184    uponter
185
186/^xxx[0-9]+$/
187    xxx0
188    xxx1234
189    *** Failers
190    xxx
191
192/^.+[0-9][0-9][0-9]$/
193    x123
194    xx123
195    123456
196    *** Failers
197    123
198    x1234
199
200/^.+?[0-9][0-9][0-9]$/
201    x123
202    xx123
203    123456
204    *** Failers
205    123
206    x1234
207
208/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
209    abc!pqr=apquxz.ixr.zzz.ac.uk
210    *** Failers
211    !pqr=apquxz.ixr.zzz.ac.uk
212    abc!=apquxz.ixr.zzz.ac.uk
213    abc!pqr=apquxz:ixr.zzz.ac.uk
214    abc!pqr=apquxz.ixr.zzz.ac.ukk
215
216/:/
217    Well, we need a colon: somewhere
218    *** Fail if we don't
219
220/([\da-f:]+)$/i
221    0abc
222    abc
223    fed
224    E
225    ::
226    5f03:12C0::932e
227    fed def
228    Any old stuff
229    *** Failers
230    0zzz
231    gzzz
232    fed\x20
233    Any old rubbish
234
235/^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
236    .1.2.3
237    A.12.123.0
238    *** Failers
239    .1.2.3333
240    1.2.3
241    1234.2.3
242
243/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
244    1 IN SOA non-sp1 non-sp2(
245    1    IN    SOA    non-sp1    non-sp2   (
246    *** Failers
247    1IN SOA non-sp1 non-sp2(
248
249/^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
250    a.
251    Z.
252    2.
253    ab-c.pq-r.
254    sxk.zzz.ac.uk.
255    x-.y-.
256    *** Failers
257    -abc.peq.
258
259/^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
260    *.a
261    *.b0-a
262    *.c3-b.c
263    *.c-a.b-c
264    *** Failers
265    *.0
266    *.a-
267    *.a-b.c-
268    *.c-a.0-c
269
270/^(?=ab(de))(abd)(e)/
271    abde
272
273/^(?!(ab)de|x)(abd)(f)/
274    abdf
275
276/^(?=(ab(cd)))(ab)/
277    abcd
278
279/^[\da-f](\.[\da-f])*$/i
280    a.b.c.d
281    A.B.C.D
282    a.b.c.1.2.3.C
283
284/^\".*\"\s*(;.*)?$/
285    \"1234\"
286    \"abcd\" ;
287    \"\" ; rhubarb
288    *** Failers
289    \"1234\" : things
290
291/^$/
292    \
293    *** Failers
294
295/   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/x
296    ab c
297    *** Failers
298    abc
299    ab cde
300
301/(?x)   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/
302    ab c
303    *** Failers
304    abc
305    ab cde
306
307/^   a\ b[c ]d       $/x
308    a bcd
309    a b d
310    *** Failers
311    abcd
312    ab d
313
314/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
315    abcdefhijklm
316
317/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
318    abcdefhijklm
319
320/^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
321    a+ Z0+\x08\n\x1d\x12
322
323/^[.^$|()*+?{,}]+/
324    .^\$(*+)|{?,?}
325
326/^a*\w/
327    z
328    az
329    aaaz
330    a
331    aa
332    aaaa
333    a+
334    aa+
335
336/^a*?\w/
337    z
338    az
339    aaaz
340    a
341    aa
342    aaaa
343    a+
344    aa+
345
346/^a+\w/
347    az
348    aaaz
349    aa
350    aaaa
351    aa+
352
353/^a+?\w/
354    az
355    aaaz
356    aa
357    aaaa
358    aa+
359
360/^\d{8}\w{2,}/
361    1234567890
362    12345678ab
363    12345678__
364    *** Failers
365    1234567
366
367/^[aeiou\d]{4,5}$/
368    uoie
369    1234
370    12345
371    aaaaa
372    *** Failers
373    123456
374
375/^[aeiou\d]{4,5}?/
376    uoie
377    1234
378    12345
379    aaaaa
380    123456
381
382/\A(abc|def)=(\1){2,3}\Z/
383    abc=abcabc
384    def=defdefdef
385    *** Failers
386    abc=defdef
387
388/^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
389    abcdefghijkcda2
390    abcdefghijkkkkcda2
391
392/(cat(a(ract|tonic)|erpillar)) \1()2(3)/
393    cataract cataract23
394    catatonic catatonic23
395    caterpillar caterpillar23
396
397
398/^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]/
399    From abcd  Mon Sep 01 12:33:02 1997
400
401/^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
402    From abcd  Mon Sep 01 12:33:02 1997
403    From abcd  Mon Sep  1 12:33:02 1997
404    *** Failers
405    From abcd  Sep 01 12:33:02 1997
406
407/^12.34/s
408    12\n34
409    12\r34
410
411/\w+(?=\t)/
412    the quick brown\t fox
413
414/foo(?!bar)(.*)/
415    foobar is foolish see?
416
417/(?:(?!foo)...|^.{0,2})bar(.*)/
418    foobar crowbar etc
419    barrel
420    2barrel
421    A barrel
422
423/^(\D*)(?=\d)(?!123)/
424    abc456
425    *** Failers
426    abc123
427
428/^1234(?# test newlines
429  inside)/
430    1234
431
432/^1234 #comment in extended re
433  /x
434    1234
435
436/#rhubarb
437  abcd/x
438    abcd
439
440/^abcd#rhubarb/x
441    abcd
442
443/^(a)\1{2,3}(.)/
444    aaab
445    aaaab
446    aaaaab
447    aaaaaab
448
449/(?!^)abc/
450    the abc
451    *** Failers
452    abc
453
454/(?=^)abc/
455    abc
456    *** Failers
457    the abc
458
459/^[ab]{1,3}(ab*|b)/
460    aabbbbb
461
462/^[ab]{1,3}?(ab*|b)/
463    aabbbbb
464
465/^[ab]{1,3}?(ab*?|b)/
466    aabbbbb
467
468/^[ab]{1,3}(ab*?|b)/
469    aabbbbb
470
471/  (?: [\040\t] |  \(
472(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
473\)  )*                          # optional leading comment
474(?:    (?:
475[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
476(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
477|
478" (?:                      # opening quote...
479[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
480|                     #    or
481\\ [^\x80-\xff]           #   Escaped something (something != CR)
482)* "  # closing quote
483)                    # initial word
484(?:  (?: [\040\t] |  \(
485(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
486\)  )*  \.  (?: [\040\t] |  \(
487(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
488\)  )*   (?:
489[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
490(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
491|
492" (?:                      # opening quote...
493[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
494|                     #    or
495\\ [^\x80-\xff]           #   Escaped something (something != CR)
496)* "  # closing quote
497)  )* # further okay, if led by a period
498(?: [\040\t] |  \(
499(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
500\)  )*  @  (?: [\040\t] |  \(
501(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
502\)  )*    (?:
503[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
504(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
505|   \[                         # [
506(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
507\]                        #           ]
508)                           # initial subdomain
509(?:                                  #
510(?: [\040\t] |  \(
511(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
512\)  )*  \.                        # if led by a period...
513(?: [\040\t] |  \(
514(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
515\)  )*   (?:
516[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
517(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
518|   \[                         # [
519(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
520\]                        #           ]
521)                     #   ...further okay
522)*
523# address
524|                     #  or
525(?:
526[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
527(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
528|
529" (?:                      # opening quote...
530[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
531|                     #    or
532\\ [^\x80-\xff]           #   Escaped something (something != CR)
533)* "  # closing quote
534)             # one word, optionally followed by....
535(?:
536[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037]  |  # atom and space parts, or...
537\(
538(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
539\)       |  # comments, or...
540
541" (?:                      # opening quote...
542[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
543|                     #    or
544\\ [^\x80-\xff]           #   Escaped something (something != CR)
545)* "  # closing quote
546# quoted strings
547)*
548<  (?: [\040\t] |  \(
549(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
550\)  )*                     # leading <
551(?:  @  (?: [\040\t] |  \(
552(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
553\)  )*    (?:
554[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
555(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
556|   \[                         # [
557(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
558\]                        #           ]
559)                           # initial subdomain
560(?:                                  #
561(?: [\040\t] |  \(
562(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
563\)  )*  \.                        # if led by a period...
564(?: [\040\t] |  \(
565(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
566\)  )*   (?:
567[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
568(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
569|   \[                         # [
570(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
571\]                        #           ]
572)                     #   ...further okay
573)*
574
575(?:  (?: [\040\t] |  \(
576(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
577\)  )*  ,  (?: [\040\t] |  \(
578(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
579\)  )*  @  (?: [\040\t] |  \(
580(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
581\)  )*    (?:
582[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
583(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
584|   \[                         # [
585(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
586\]                        #           ]
587)                           # initial subdomain
588(?:                                  #
589(?: [\040\t] |  \(
590(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
591\)  )*  \.                        # if led by a period...
592(?: [\040\t] |  \(
593(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
594\)  )*   (?:
595[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
596(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
597|   \[                         # [
598(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
599\]                        #           ]
600)                     #   ...further okay
601)*
602)* # further okay, if led by comma
603:                                # closing colon
604(?: [\040\t] |  \(
605(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
606\)  )*  )? #       optional route
607(?:
608[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
609(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
610|
611" (?:                      # opening quote...
612[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
613|                     #    or
614\\ [^\x80-\xff]           #   Escaped something (something != CR)
615)* "  # closing quote
616)                    # initial word
617(?:  (?: [\040\t] |  \(
618(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
619\)  )*  \.  (?: [\040\t] |  \(
620(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
621\)  )*   (?:
622[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
623(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
624|
625" (?:                      # opening quote...
626[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
627|                     #    or
628\\ [^\x80-\xff]           #   Escaped something (something != CR)
629)* "  # closing quote
630)  )* # further okay, if led by a period
631(?: [\040\t] |  \(
632(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
633\)  )*  @  (?: [\040\t] |  \(
634(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
635\)  )*    (?:
636[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
637(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
638|   \[                         # [
639(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
640\]                        #           ]
641)                           # initial subdomain
642(?:                                  #
643(?: [\040\t] |  \(
644(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
645\)  )*  \.                        # if led by a period...
646(?: [\040\t] |  \(
647(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
648\)  )*   (?:
649[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
650(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
651|   \[                         # [
652(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
653\]                        #           ]
654)                     #   ...further okay
655)*
656#       address spec
657(?: [\040\t] |  \(
658(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
659\)  )*  > #                  trailing >
660# name and address
661)  (?: [\040\t] |  \(
662(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
663\)  )*                       # optional trailing comment
664/x
665    Alan Other <user\@dom.ain>
666    <user\@dom.ain>
667    user\@dom.ain
668    \"A. Other\" <user.1234\@dom.ain> (a comment)
669    A. Other <user.1234\@dom.ain> (a comment)
670    \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
671    A missing angle <user\@some.where
672    *** Failers
673    The quick brown fox
674
675/[\040\t]*                    # Nab whitespace.
676(?:
677\(                              #  (
678[^\\\x80-\xff\n\015()] *                             #     normal*
679(?:                                 #       (
680(?:  \\ [^\x80-\xff]  |
681\(                            #  (
682[^\\\x80-\xff\n\015()] *                            #     normal*
683(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
684\)                           #                       )
685)    #         special
686[^\\\x80-\xff\n\015()] *                         #         normal*
687)*                                  #            )*
688\)                             #                )
689[\040\t]* )*    # If comment found, allow more spaces.
690# optional leading comment
691(?:
692(?:
693[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
694(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
695# Atom
696|                       #  or
697"                                     # "
698[^\\\x80-\xff\n\015"] *                            #   normal
699(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
700"                                     #        "
701# Quoted string
702)
703[\040\t]*                    # Nab whitespace.
704(?:
705\(                              #  (
706[^\\\x80-\xff\n\015()] *                             #     normal*
707(?:                                 #       (
708(?:  \\ [^\x80-\xff]  |
709\(                            #  (
710[^\\\x80-\xff\n\015()] *                            #     normal*
711(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
712\)                           #                       )
713)    #         special
714[^\\\x80-\xff\n\015()] *                         #         normal*
715)*                                  #            )*
716\)                             #                )
717[\040\t]* )*    # If comment found, allow more spaces.
718(?:
719\.
720[\040\t]*                    # Nab whitespace.
721(?:
722\(                              #  (
723[^\\\x80-\xff\n\015()] *                             #     normal*
724(?:                                 #       (
725(?:  \\ [^\x80-\xff]  |
726\(                            #  (
727[^\\\x80-\xff\n\015()] *                            #     normal*
728(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
729\)                           #                       )
730)    #         special
731[^\\\x80-\xff\n\015()] *                         #         normal*
732)*                                  #            )*
733\)                             #                )
734[\040\t]* )*    # If comment found, allow more spaces.
735(?:
736[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
737(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
738# Atom
739|                       #  or
740"                                     # "
741[^\\\x80-\xff\n\015"] *                            #   normal
742(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
743"                                     #        "
744# Quoted string
745)
746[\040\t]*                    # Nab whitespace.
747(?:
748\(                              #  (
749[^\\\x80-\xff\n\015()] *                             #     normal*
750(?:                                 #       (
751(?:  \\ [^\x80-\xff]  |
752\(                            #  (
753[^\\\x80-\xff\n\015()] *                            #     normal*
754(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
755\)                           #                       )
756)    #         special
757[^\\\x80-\xff\n\015()] *                         #         normal*
758)*                                  #            )*
759\)                             #                )
760[\040\t]* )*    # If comment found, allow more spaces.
761# additional words
762)*
763@
764[\040\t]*                    # Nab whitespace.
765(?:
766\(                              #  (
767[^\\\x80-\xff\n\015()] *                             #     normal*
768(?:                                 #       (
769(?:  \\ [^\x80-\xff]  |
770\(                            #  (
771[^\\\x80-\xff\n\015()] *                            #     normal*
772(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
773\)                           #                       )
774)    #         special
775[^\\\x80-\xff\n\015()] *                         #         normal*
776)*                                  #            )*
777\)                             #                )
778[\040\t]* )*    # If comment found, allow more spaces.
779(?:
780[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
781(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
782|
783\[                            # [
784(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
785\]                           #           ]
786)
787[\040\t]*                    # Nab whitespace.
788(?:
789\(                              #  (
790[^\\\x80-\xff\n\015()] *                             #     normal*
791(?:                                 #       (
792(?:  \\ [^\x80-\xff]  |
793\(                            #  (
794[^\\\x80-\xff\n\015()] *                            #     normal*
795(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
796\)                           #                       )
797)    #         special
798[^\\\x80-\xff\n\015()] *                         #         normal*
799)*                                  #            )*
800\)                             #                )
801[\040\t]* )*    # If comment found, allow more spaces.
802# optional trailing comments
803(?:
804\.
805[\040\t]*                    # Nab whitespace.
806(?:
807\(                              #  (
808[^\\\x80-\xff\n\015()] *                             #     normal*
809(?:                                 #       (
810(?:  \\ [^\x80-\xff]  |
811\(                            #  (
812[^\\\x80-\xff\n\015()] *                            #     normal*
813(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
814\)                           #                       )
815)    #         special
816[^\\\x80-\xff\n\015()] *                         #         normal*
817)*                                  #            )*
818\)                             #                )
819[\040\t]* )*    # If comment found, allow more spaces.
820(?:
821[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
822(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
823|
824\[                            # [
825(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
826\]                           #           ]
827)
828[\040\t]*                    # Nab whitespace.
829(?:
830\(                              #  (
831[^\\\x80-\xff\n\015()] *                             #     normal*
832(?:                                 #       (
833(?:  \\ [^\x80-\xff]  |
834\(                            #  (
835[^\\\x80-\xff\n\015()] *                            #     normal*
836(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
837\)                           #                       )
838)    #         special
839[^\\\x80-\xff\n\015()] *                         #         normal*
840)*                                  #            )*
841\)                             #                )
842[\040\t]* )*    # If comment found, allow more spaces.
843# optional trailing comments
844)*
845# address
846|                             #  or
847(?:
848[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
849(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
850# Atom
851|                       #  or
852"                                     # "
853[^\\\x80-\xff\n\015"] *                            #   normal
854(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
855"                                     #        "
856# Quoted string
857)
858# leading word
859[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] *               # "normal" atoms and or spaces
860(?:
861(?:
862\(                              #  (
863[^\\\x80-\xff\n\015()] *                             #     normal*
864(?:                                 #       (
865(?:  \\ [^\x80-\xff]  |
866\(                            #  (
867[^\\\x80-\xff\n\015()] *                            #     normal*
868(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
869\)                           #                       )
870)    #         special
871[^\\\x80-\xff\n\015()] *                         #         normal*
872)*                                  #            )*
873\)                             #                )
874|
875"                                     # "
876[^\\\x80-\xff\n\015"] *                            #   normal
877(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
878"                                     #        "
879) # "special" comment or quoted string
880[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] *            #  more "normal"
881)*
882<
883[\040\t]*                    # Nab whitespace.
884(?:
885\(                              #  (
886[^\\\x80-\xff\n\015()] *                             #     normal*
887(?:                                 #       (
888(?:  \\ [^\x80-\xff]  |
889\(                            #  (
890[^\\\x80-\xff\n\015()] *                            #     normal*
891(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
892\)                           #                       )
893)    #         special
894[^\\\x80-\xff\n\015()] *                         #         normal*
895)*                                  #            )*
896\)                             #                )
897[\040\t]* )*    # If comment found, allow more spaces.
898# <
899(?:
900@
901[\040\t]*                    # Nab whitespace.
902(?:
903\(                              #  (
904[^\\\x80-\xff\n\015()] *                             #     normal*
905(?:                                 #       (
906(?:  \\ [^\x80-\xff]  |
907\(                            #  (
908[^\\\x80-\xff\n\015()] *                            #     normal*
909(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
910\)                           #                       )
911)    #         special
912[^\\\x80-\xff\n\015()] *                         #         normal*
913)*                                  #            )*
914\)                             #                )
915[\040\t]* )*    # If comment found, allow more spaces.
916(?:
917[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
918(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
919|
920\[                            # [
921(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
922\]                           #           ]
923)
924[\040\t]*                    # Nab whitespace.
925(?:
926\(                              #  (
927[^\\\x80-\xff\n\015()] *                             #     normal*
928(?:                                 #       (
929(?:  \\ [^\x80-\xff]  |
930\(                            #  (
931[^\\\x80-\xff\n\015()] *                            #     normal*
932(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
933\)                           #                       )
934)    #         special
935[^\\\x80-\xff\n\015()] *                         #         normal*
936)*                                  #            )*
937\)                             #                )
938[\040\t]* )*    # If comment found, allow more spaces.
939# optional trailing comments
940(?:
941\.
942[\040\t]*                    # Nab whitespace.
943(?:
944\(                              #  (
945[^\\\x80-\xff\n\015()] *                             #     normal*
946(?:                                 #       (
947(?:  \\ [^\x80-\xff]  |
948\(                            #  (
949[^\\\x80-\xff\n\015()] *                            #     normal*
950(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
951\)                           #                       )
952)    #         special
953[^\\\x80-\xff\n\015()] *                         #         normal*
954)*                                  #            )*
955\)                             #                )
956[\040\t]* )*    # If comment found, allow more spaces.
957(?:
958[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
959(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
960|
961\[                            # [
962(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
963\]                           #           ]
964)
965[\040\t]*                    # Nab whitespace.
966(?:
967\(                              #  (
968[^\\\x80-\xff\n\015()] *                             #     normal*
969(?:                                 #       (
970(?:  \\ [^\x80-\xff]  |
971\(                            #  (
972[^\\\x80-\xff\n\015()] *                            #     normal*
973(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
974\)                           #                       )
975)    #         special
976[^\\\x80-\xff\n\015()] *                         #         normal*
977)*                                  #            )*
978\)                             #                )
979[\040\t]* )*    # If comment found, allow more spaces.
980# optional trailing comments
981)*
982(?: ,
983[\040\t]*                    # Nab whitespace.
984(?:
985\(                              #  (
986[^\\\x80-\xff\n\015()] *                             #     normal*
987(?:                                 #       (
988(?:  \\ [^\x80-\xff]  |
989\(                            #  (
990[^\\\x80-\xff\n\015()] *                            #     normal*
991(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
992\)                           #                       )
993)    #         special
994[^\\\x80-\xff\n\015()] *                         #         normal*
995)*                                  #            )*
996\)                             #                )
997[\040\t]* )*    # If comment found, allow more spaces.
998@
999[\040\t]*                    # Nab whitespace.
1000(?:
1001\(                              #  (
1002[^\\\x80-\xff\n\015()] *                             #     normal*
1003(?:                                 #       (
1004(?:  \\ [^\x80-\xff]  |
1005\(                            #  (
1006[^\\\x80-\xff\n\015()] *                            #     normal*
1007(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
1008\)                           #                       )
1009)    #         special
1010[^\\\x80-\xff\n\015()] *                         #         normal*
1011)*                                  #            )*
1012\)                             #                )
1013[\040\t]* )*    # If comment found, allow more spaces.
1014(?:
1015[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
1016(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1017|
1018\[                            # [
1019(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
1020\]                           #           ]
1021)
1022[\040\t]*                    # Nab whitespace.
1023(?:
1024\(                              #  (
1025[^\\\x80-\xff\n\015()] *                             #     normal*
1026(?:                                 #       (
1027(?:  \\ [^\x80-\xff]  |
1028\(                            #  (
1029[^\\\x80-\xff\n\015()] *                            #     normal*
1030(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
1031\)                           #                       )
1032)    #         special
1033[^\\\x80-\xff\n\015()] *                         #         normal*
1034)*                                  #            )*
1035\)                             #                )
1036[\040\t]* )*    # If comment found, allow more spaces.
1037# optional trailing comments
1038(?:
1039\.
1040[\040\t]*                    # Nab whitespace.
1041(?:
1042\(                              #  (
1043[^\\\x80-\xff\n\015()] *                             #     normal*
1044(?:                                 #       (
1045(?:  \\ [^\x80-\xff]  |
1046\(                            #  (
1047[^\\\x80-\xff\n\015()] *                            #     normal*
1048(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
1049\)                           #                       )
1050)    #         special
1051[^\\\x80-\xff\n\015()] *                         #         normal*
1052)*                                  #            )*
1053\)                             #                )
1054[\040\t]* )*    # If comment found, allow more spaces.
1055(?:
1056[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
1057(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1058|
1059\[                            # [
1060(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
1061\]                           #           ]
1062)
1063[\040\t]*                    # Nab whitespace.
1064(?:
1065\(                              #  (
1066[^\\\x80-\xff\n\015()] *                             #     normal*
1067(?:                                 #       (
1068(?:  \\ [^\x80-\xff]  |
1069\(                            #  (
1070[^\\\x80-\xff\n\015()] *                            #     normal*
1071(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
1072\)                           #                       )
1073)    #         special
1074[^\\\x80-\xff\n\015()] *                         #         normal*
1075)*                                  #            )*
1076\)                             #                )
1077[\040\t]* )*    # If comment found, allow more spaces.
1078# optional trailing comments
1079)*
1080)*  # additional domains
1081:
1082[\040\t]*                    # Nab whitespace.
1083(?:
1084\(                              #  (
1085[^\\\x80-\xff\n\015()] *                             #     normal*
1086(?:                                 #       (
1087(?:  \\ [^\x80-\xff]  |
1088\(                            #  (
1089[^\\\x80-\xff\n\015()] *                            #     normal*
1090(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
1091\)                           #                       )
1092)    #         special
1093[^\\\x80-\xff\n\015()] *                         #         normal*
1094)*                                  #            )*
1095\)                             #                )
1096[\040\t]* )*    # If comment found, allow more spaces.
1097# optional trailing comments
1098)?     #       optional route
1099(?:
1100[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
1101(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1102# Atom
1103|                       #  or
1104"                                     # "
1105[^\\\x80-\xff\n\015"] *                            #   normal
1106(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
1107"                                     #        "
1108# Quoted string
1109)
1110[\040\t]*                    # Nab whitespace.
1111(?:
1112\(                              #  (
1113[^\\\x80-\xff\n\015()] *                             #     normal*
1114(?:                                 #       (
1115(?:  \\ [^\x80-\xff]  |
1116\(                            #  (
1117[^\\\x80-\xff\n\015()] *                            #     normal*
1118(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
1119\)                           #                       )
1120)    #         special
1121[^\\\x80-\xff\n\015()] *                         #         normal*
1122)*                                  #            )*
1123\)                             #                )
1124[\040\t]* )*    # If comment found, allow more spaces.
1125(?:
1126\.
1127[\040\t]*                    # Nab whitespace.
1128(?:
1129\(                              #  (
1130[^\\\x80-\xff\n\015()] *                             #     normal*
1131(?:                                 #       (
1132(?:  \\ [^\x80-\xff]  |
1133\(                            #  (
1134[^\\\x80-\xff\n\015()] *                            #     normal*
1135(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
1136\)                           #                       )
1137)    #         special
1138[^\\\x80-\xff\n\015()] *                         #         normal*
1139)*                                  #            )*
1140\)                             #                )
1141[\040\t]* )*    # If comment found, allow more spaces.
1142(?:
1143[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
1144(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1145# Atom
1146|                       #  or
1147"                                     # "
1148[^\\\x80-\xff\n\015"] *                            #   normal
1149(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
1150"                                     #        "
1151# Quoted string
1152)
1153[\040\t]*                    # Nab whitespace.
1154(?:
1155\(                              #  (
1156[^\\\x80-\xff\n\015()] *                             #     normal*
1157(?:                                 #       (
1158(?:  \\ [^\x80-\xff]  |
1159\(                            #  (
1160[^\\\x80-\xff\n\015()] *                            #     normal*
1161(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
1162\)                           #                       )
1163)    #         special
1164[^\\\x80-\xff\n\015()] *                         #         normal*
1165)*                                  #            )*
1166\)                             #                )
1167[\040\t]* )*    # If comment found, allow more spaces.
1168# additional words
1169)*
1170@
1171[\040\t]*                    # Nab whitespace.
1172(?:
1173\(                              #  (
1174[^\\\x80-\xff\n\015()] *                             #     normal*
1175(?:                                 #       (
1176(?:  \\ [^\x80-\xff]  |
1177\(                            #  (
1178[^\\\x80-\xff\n\015()] *                            #     normal*
1179(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
1180\)                           #                       )
1181)    #         special
1182[^\\\x80-\xff\n\015()] *                         #         normal*
1183)*                                  #            )*
1184\)                             #                )
1185[\040\t]* )*    # If comment found, allow more spaces.
1186(?:
1187[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
1188(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1189|
1190\[                            # [
1191(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
1192\]                           #           ]
1193)
1194[\040\t]*                    # Nab whitespace.
1195(?:
1196\(                              #  (
1197[^\\\x80-\xff\n\015()] *                             #     normal*
1198(?:                                 #       (
1199(?:  \\ [^\x80-\xff]  |
1200\(                            #  (
1201[^\\\x80-\xff\n\015()] *                            #     normal*
1202(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
1203\)                           #                       )
1204)    #         special
1205[^\\\x80-\xff\n\015()] *                         #         normal*
1206)*                                  #            )*
1207\)                             #                )
1208[\040\t]* )*    # If comment found, allow more spaces.
1209# optional trailing comments
1210(?:
1211\.
1212[\040\t]*                    # Nab whitespace.
1213(?:
1214\(                              #  (
1215[^\\\x80-\xff\n\015()] *                             #     normal*
1216(?:                                 #       (
1217(?:  \\ [^\x80-\xff]  |
1218\(                            #  (
1219[^\\\x80-\xff\n\015()] *                            #     normal*
1220(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
1221\)                           #                       )
1222)    #         special
1223[^\\\x80-\xff\n\015()] *                         #         normal*
1224)*                                  #            )*
1225\)                             #                )
1226[\040\t]* )*    # If comment found, allow more spaces.
1227(?:
1228[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
1229(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1230|
1231\[                            # [
1232(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
1233\]                           #           ]
1234)
1235[\040\t]*                    # Nab whitespace.
1236(?:
1237\(                              #  (
1238[^\\\x80-\xff\n\015()] *                             #     normal*
1239(?:                                 #       (
1240(?:  \\ [^\x80-\xff]  |
1241\(                            #  (
1242[^\\\x80-\xff\n\015()] *                            #     normal*
1243(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
1244\)                           #                       )
1245)    #         special
1246[^\\\x80-\xff\n\015()] *                         #         normal*
1247)*                                  #            )*
1248\)                             #                )
1249[\040\t]* )*    # If comment found, allow more spaces.
1250# optional trailing comments
1251)*
1252#       address spec
1253>                    #                 >
1254# name and address
1255)
1256/x
1257    Alan Other <user\@dom.ain>
1258    <user\@dom.ain>
1259    user\@dom.ain
1260    \"A. Other\" <user.1234\@dom.ain> (a comment)
1261    A. Other <user.1234\@dom.ain> (a comment)
1262    \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
1263    A missing angle <user\@some.where
1264    *** Failers
1265    The quick brown fox
1266
1267/abc\0def\00pqr\000xyz\0000AB/
1268    abc\0def\00pqr\000xyz\0000AB
1269    abc456 abc\0def\00pqr\000xyz\0000ABCDE
1270
1271/abc\x0def\x00pqr\x000xyz\x0000AB/
1272    abc\x0def\x00pqr\x000xyz\x0000AB
1273    abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
1274
1275/^[\000-\037]/
1276    \0A
1277    \01B
1278    \037C
1279
1280/\0*/
1281    \0\0\0\0
1282
1283/A\x0{2,3}Z/
1284    The A\x0\x0Z
1285    An A\0\x0\0Z
1286    *** Failers
1287    A\0Z
1288    A\0\x0\0\x0Z
1289
1290/^(cow|)\1(bell)/
1291    cowcowbell
1292    bell
1293    *** Failers
1294    cowbell
1295
1296/^\s/
1297    \040abc
1298    \x0cabc
1299    \nabc
1300    \rabc
1301    \tabc
1302    *** Failers
1303    abc
1304
1305/^a	b
1306      c/x
1307    abc
1308
1309/^(a|)\1*b/
1310    ab
1311    aaaab
1312    b
1313    *** Failers
1314    acb
1315
1316/^(a|)\1+b/
1317    aab
1318    aaaab
1319    b
1320    *** Failers
1321    ab
1322
1323/^(a|)\1?b/
1324    ab
1325    aab
1326    b
1327    *** Failers
1328    acb
1329
1330/^(a|)\1{2}b/
1331    aaab
1332    b
1333    *** Failers
1334    ab
1335    aab
1336    aaaab
1337
1338/^(a|)\1{2,3}b/
1339    aaab
1340    aaaab
1341    b
1342    *** Failers
1343    ab
1344    aab
1345    aaaaab
1346
1347/ab{1,3}bc/
1348    abbbbc
1349    abbbc
1350    abbc
1351    *** Failers
1352    abc
1353    abbbbbc
1354
1355/([^.]*)\.([^:]*):[T ]+(.*)/
1356    track1.title:TBlah blah blah
1357
1358/([^.]*)\.([^:]*):[T ]+(.*)/i
1359    track1.title:TBlah blah blah
1360
1361/([^.]*)\.([^:]*):[t ]+(.*)/i
1362    track1.title:TBlah blah blah
1363
1364/^[W-c]+$/
1365    WXY_^abc
1366    *** Failers
1367    wxy
1368
1369/^[W-c]+$/i
1370    WXY_^abc
1371    wxy_^ABC
1372
1373/^[\x3f-\x5F]+$/i
1374    WXY_^abc
1375    wxy_^ABC
1376
1377/^abc$/m
1378    abc
1379    qqq\nabc
1380    abc\nzzz
1381    qqq\nabc\nzzz
1382
1383/^abc$/
1384    abc
1385    *** Failers
1386    qqq\nabc
1387    abc\nzzz
1388    qqq\nabc\nzzz
1389
1390/\Aabc\Z/m
1391    abc
1392    abc\n
1393    *** Failers
1394    qqq\nabc
1395    abc\nzzz
1396    qqq\nabc\nzzz
1397
1398/\A(.)*\Z/s
1399    abc\ndef
1400
1401/\A(.)*\Z/m
1402    *** Failers
1403    abc\ndef
1404
1405/(?:b)|(?::+)/
1406    b::c
1407    c::b
1408
1409/[-az]+/
1410    az-
1411    *** Failers
1412    b
1413
1414/[az-]+/
1415    za-
1416    *** Failers
1417    b
1418
1419/[a\-z]+/
1420    a-z
1421    *** Failers
1422    b
1423
1424/[a-z]+/
1425    abcdxyz
1426
1427/[\d-]+/
1428    12-34
1429    *** Failers
1430    aaa
1431
1432/[\d-z]+/
1433    12-34z
1434    *** Failers
1435    aaa
1436
1437/\x5c/
1438    \\
1439
1440/\x20Z/
1441    the Zoo
1442    *** Failers
1443    Zulu
1444
1445/(abc)\1/i
1446    abcabc
1447    ABCabc
1448    abcABC
1449
1450/ab{3cd/
1451    ab{3cd
1452
1453/ab{3,cd/
1454    ab{3,cd
1455
1456/ab{3,4a}cd/
1457    ab{3,4a}cd
1458
1459/{4,5a}bc/
1460    {4,5a}bc
1461
1462/abc$/
1463    abc
1464    abc\n
1465    *** Failers
1466    abc\ndef
1467
1468/(abc)\123/
1469    abc\x53
1470
1471/(abc)\223/
1472    abc\x93
1473
1474/(abc)\323/
1475    abc\xd3
1476
1477/(abc)\100/
1478    abc\x40
1479    abc\100
1480
1481/(abc)\1000/
1482    abc\x400
1483    abc\x40\x30
1484    abc\1000
1485    abc\100\x30
1486    abc\100\060
1487    abc\100\60
1488
1489/^A\8B\9C$/
1490    A8B9C
1491    *** Failers
1492    A\08B\09C
1493
1494/^(A)(B)(C)(D)(E)(F)(G)(H)(I)\8\9$/
1495    ABCDEFGHIHI
1496
1497/^[A\8B\9C]+$/
1498    A8B9C
1499    *** Failers
1500    A8B9C\x00
1501
1502/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
1503    abcdefghijkllS
1504
1505/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
1506    abcdefghijk\12S
1507
1508/ab\idef/
1509    abidef
1510
1511/a{0}bc/
1512    bc
1513
1514/(a|(bc)){0,0}?xyz/
1515    xyz
1516
1517/abc[\10]de/
1518    abc\010de
1519
1520/abc[\1]de/
1521    abc\1de
1522
1523/(abc)[\1]de/
1524    abc\1de
1525
1526/(?s)a.b/
1527    a\nb
1528
1529/^([^a])([^\b])([^c]*)([^d]{3,4})/
1530    baNOTccccd
1531    baNOTcccd
1532    baNOTccd
1533    bacccd
1534    *** Failers
1535    anything
1536    b\bc
1537    baccd
1538
1539/[^a]/
1540    Abc
1541
1542/[^a]/i
1543    Abc
1544
1545/[^a]+/
1546    AAAaAbc
1547
1548/[^a]+/i
1549    AAAaAbc
1550
1551/[^a]+/
1552    bbb\nccc
1553
1554/[^k]$/
1555    abc
1556    *** Failers
1557    abk
1558
1559/[^k]{2,3}$/
1560    abc
1561    kbc
1562    kabc
1563    *** Failers
1564    abk
1565    akb
1566    akk
1567
1568/^\d{8,}\@.+[^k]$/
1569    12345678\@a.b.c.d
1570    123456789\@x.y.z
1571    *** Failers
1572    12345678\@x.y.uk
1573    1234567\@a.b.c.d
1574
1575/(a)\1{8,}/
1576    aaaaaaaaa
1577    aaaaaaaaaa
1578    *** Failers
1579    aaaaaaa
1580
1581/[^a]/
1582    aaaabcd
1583    aaAabcd
1584
1585/[^a]/i
1586    aaaabcd
1587    aaAabcd
1588
1589/[^az]/
1590    aaaabcd
1591    aaAabcd
1592
1593/[^az]/i
1594    aaaabcd
1595    aaAabcd
1596
1597/\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/
1598 \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
1599
1600/P[^*]TAIRE[^*]{1,6}?LL/
1601    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
1602
1603/P[^*]TAIRE[^*]{1,}?LL/
1604    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
1605
1606/(\.\d\d[1-9]?)\d+/
1607    1.230003938
1608    1.875000282
1609    1.235
1610
1611/(\.\d\d((?=0)|\d(?=\d)))/
1612    1.230003938
1613    1.875000282
1614    *** Failers
1615    1.235
1616
1617/a(?)b/
1618    ab
1619
1620/\b(foo)\s+(\w+)/i
1621    Food is on the foo table
1622
1623/foo(.*)bar/
1624    The food is under the bar in the barn.
1625
1626/foo(.*?)bar/
1627    The food is under the bar in the barn.
1628
1629/(.*)(\d*)/
1630    I have 2 numbers: 53147
1631
1632/(.*)(\d+)/
1633    I have 2 numbers: 53147
1634
1635/(.*?)(\d*)/
1636    I have 2 numbers: 53147
1637
1638/(.*?)(\d+)/
1639    I have 2 numbers: 53147
1640
1641/(.*)(\d+)$/
1642    I have 2 numbers: 53147
1643
1644/(.*?)(\d+)$/
1645    I have 2 numbers: 53147
1646
1647/(.*)\b(\d+)$/
1648    I have 2 numbers: 53147
1649
1650/(.*\D)(\d+)$/
1651    I have 2 numbers: 53147
1652
1653/^\D*(?!123)/
1654    ABC123
1655
1656/^(\D*)(?=\d)(?!123)/
1657    ABC445
1658    *** Failers
1659    ABC123
1660
1661/^[W-]46]/
1662    W46]789
1663    -46]789
1664    *** Failers
1665    Wall
1666    Zebra
1667    42
1668    [abcd]
1669    ]abcd[
1670
1671/^[W-\]46]/
1672    W46]789
1673    Wall
1674    Zebra
1675    Xylophone
1676    42
1677    [abcd]
1678    ]abcd[
1679    \\backslash
1680    *** Failers
1681    -46]789
1682    well
1683
1684/\d\d\/\d\d\/\d\d\d\d/
1685    01/01/2000
1686
1687/word (?:[a-zA-Z0-9]+ ){0,10}otherword/
1688  word cat dog elephant mussel cow horse canary baboon snake shark otherword
1689  word cat dog elephant mussel cow horse canary baboon snake shark
1690
1691/word (?:[a-zA-Z0-9]+ ){0,300}otherword/
1692  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
1693
1694/^(a){0,0}/
1695    bcd
1696    abc
1697    aab
1698
1699/^(a){0,1}/
1700    bcd
1701    abc
1702    aab
1703
1704/^(a){0,2}/
1705    bcd
1706    abc
1707    aab
1708
1709/^(a){0,3}/
1710    bcd
1711    abc
1712    aab
1713    aaa
1714
1715/^(a){0,}/
1716    bcd
1717    abc
1718    aab
1719    aaa
1720    aaaaaaaa
1721
1722/^(a){1,1}/
1723    bcd
1724    abc
1725    aab
1726
1727/^(a){1,2}/
1728    bcd
1729    abc
1730    aab
1731
1732/^(a){1,3}/
1733    bcd
1734    abc
1735    aab
1736    aaa
1737
1738/^(a){1,}/
1739    bcd
1740    abc
1741    aab
1742    aaa
1743    aaaaaaaa
1744
1745/.*\.gif/
1746    borfle\nbib.gif\nno
1747
1748/.{0,}\.gif/
1749    borfle\nbib.gif\nno
1750
1751/.*\.gif/m
1752    borfle\nbib.gif\nno
1753
1754/.*\.gif/s
1755    borfle\nbib.gif\nno
1756
1757/.*\.gif/ms
1758    borfle\nbib.gif\nno
1759
1760/.*$/
1761    borfle\nbib.gif\nno
1762
1763/.*$/m
1764    borfle\nbib.gif\nno
1765
1766/.*$/s
1767    borfle\nbib.gif\nno
1768
1769/.*$/ms
1770    borfle\nbib.gif\nno
1771
1772/.*$/
1773    borfle\nbib.gif\nno\n
1774
1775/.*$/m
1776    borfle\nbib.gif\nno\n
1777
1778/.*$/s
1779    borfle\nbib.gif\nno\n
1780
1781/.*$/ms
1782    borfle\nbib.gif\nno\n
1783
1784/(.*X|^B)/
1785    abcde\n1234Xyz
1786    BarFoo
1787    *** Failers
1788    abcde\nBar
1789
1790/(.*X|^B)/m
1791    abcde\n1234Xyz
1792    BarFoo
1793    abcde\nBar
1794
1795/(.*X|^B)/s
1796    abcde\n1234Xyz
1797    BarFoo
1798    *** Failers
1799    abcde\nBar
1800
1801/(.*X|^B)/ms
1802    abcde\n1234Xyz
1803    BarFoo
1804    abcde\nBar
1805
1806/(?s)(.*X|^B)/
1807    abcde\n1234Xyz
1808    BarFoo
1809    *** Failers
1810    abcde\nBar
1811
1812/(?s:.*X|^B)/
1813    abcde\n1234Xyz
1814    BarFoo
1815    *** Failers
1816    abcde\nBar
1817
1818/^.*B/
1819    **** Failers
1820    abc\nB
1821
1822/(?s)^.*B/
1823    abc\nB
1824
1825/(?m)^.*B/
1826    abc\nB
1827
1828/(?ms)^.*B/
1829    abc\nB
1830
1831/(?ms)^B/
1832    abc\nB
1833
1834/(?s)B$/
1835    B\n
1836
1837/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
1838    123456654321
1839
1840/^\d\d\d\d\d\d\d\d\d\d\d\d/
1841    123456654321
1842
1843/^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
1844    123456654321
1845
1846/^[abc]{12}/
1847    abcabcabcabc
1848
1849/^[a-c]{12}/
1850    abcabcabcabc
1851
1852/^(a|b|c){12}/
1853    abcabcabcabc
1854
1855/^[abcdefghijklmnopqrstuvwxy0123456789]/
1856    n
1857    *** Failers
1858    z
1859
1860/abcde{0,0}/
1861    abcd
1862    *** Failers
1863    abce
1864
1865/ab[cd]{0,0}e/
1866    abe
1867    *** Failers
1868    abcde
1869
1870/ab(c){0,0}d/
1871    abd
1872    *** Failers
1873    abcd
1874
1875/a(b*)/
1876    a
1877    ab
1878    abbbb
1879    *** Failers
1880    bbbbb
1881
1882/ab\d{0}e/
1883    abe
1884    *** Failers
1885    ab1e
1886
1887/"([^\\"]+|\\.)*"/
1888    the \"quick\" brown fox
1889    \"the \\\"quick\\\" brown fox\"
1890
1891/.*?/g+
1892    abc
1893
1894/\b/g+
1895    abc
1896
1897/\b/+g
1898    abc
1899
1900//g
1901    abc
1902
1903/<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
1904  <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>
1905
1906/a[^a]b/
1907    acb
1908    a\nb
1909
1910/a.b/
1911    acb
1912    *** Failers
1913    a\nb
1914
1915/a[^a]b/s
1916    acb
1917    a\nb
1918
1919/a.b/s
1920    acb
1921    a\nb
1922
1923/^(b+?|a){1,2}?c/
1924    bac
1925    bbac
1926    bbbac
1927    bbbbac
1928    bbbbbac
1929
1930/^(b+|a){1,2}?c/
1931    bac
1932    bbac
1933    bbbac
1934    bbbbac
1935    bbbbbac
1936
1937/(?!\A)x/m
1938    x\nb\n
1939    a\bx\n
1940
1941/\x0{ab}/
1942    \0{ab}
1943
1944/(A|B)*?CD/
1945    CD
1946
1947/(A|B)*CD/
1948    CD
1949
1950/(AB)*?\1/
1951    ABABAB
1952
1953/(AB)*\1/
1954    ABABAB
1955
1956/(?<!bar)foo/
1957    foo
1958    catfood
1959    arfootle
1960    rfoosh
1961    *** Failers
1962    barfoo
1963    towbarfoo
1964
1965/\w{3}(?<!bar)foo/
1966    catfood
1967    *** Failers
1968    foo
1969    barfoo
1970    towbarfoo
1971
1972/(?<=(foo)a)bar/
1973    fooabar
1974    *** Failers
1975    bar
1976    foobbar
1977
1978/\Aabc\z/m
1979    abc
1980    *** Failers
1981    abc\n
1982    qqq\nabc
1983    abc\nzzz
1984    qqq\nabc\nzzz
1985
1986"(?>.*/)foo"
1987    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
1988
1989"(?>.*/)foo"
1990    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
1991
1992/(?>(\.\d\d[1-9]?))\d+/
1993    1.230003938
1994    1.875000282
1995    *** Failers
1996    1.235
1997
1998/^((?>\w+)|(?>\s+))*$/
1999    now is the time for all good men to come to the aid of the party
2000    *** Failers
2001    this is not a line with only words and spaces!
2002
2003/(\d+)(\w)/
2004    12345a
2005    12345+
2006
2007/((?>\d+))(\w)/
2008    12345a
2009    *** Failers
2010    12345+
2011
2012/(?>a+)b/
2013    aaab
2014
2015/((?>a+)b)/
2016    aaab
2017
2018/(?>(a+))b/
2019    aaab
2020
2021/(?>b)+/
2022    aaabbbccc
2023
2024/(?>a+|b+|c+)*c/
2025    aaabbbbccccd
2026
2027/((?>[^()]+)|\([^()]*\))+/
2028    ((abc(ade)ufh()()x
2029
2030/\(((?>[^()]+)|\([^()]+\))+\)/
2031    (abc)
2032    (abc(def)xyz)
2033    *** Failers
2034    ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
2035
2036/a(?-i)b/i
2037    ab
2038    Ab
2039    *** Failers
2040    aB
2041    AB
2042
2043/(a (?x)b c)d e/
2044    a bcd e
2045    *** Failers
2046    a b cd e
2047    abcd e
2048    a bcde
2049
2050/(a b(?x)c d (?-x)e f)/
2051    a bcde f
2052    *** Failers
2053    abcdef
2054
2055/(a(?i)b)c/
2056    abc
2057    aBc
2058    *** Failers
2059    abC
2060    aBC
2061    Abc
2062    ABc
2063    ABC
2064    AbC
2065
2066/a(?i:b)c/
2067    abc
2068    aBc
2069    *** Failers
2070    ABC
2071    abC
2072    aBC
2073
2074/a(?i:b)*c/
2075    aBc
2076    aBBc
2077    *** Failers
2078    aBC
2079    aBBC
2080
2081/a(?=b(?i)c)\w\wd/
2082    abcd
2083    abCd
2084    *** Failers
2085    aBCd
2086    abcD
2087
2088/(?s-i:more.*than).*million/i
2089    more than million
2090    more than MILLION
2091    more \n than Million
2092    *** Failers
2093    MORE THAN MILLION
2094    more \n than \n million
2095
2096/(?:(?s-i)more.*than).*million/i
2097    more than million
2098    more than MILLION
2099    more \n than Million
2100    *** Failers
2101    MORE THAN MILLION
2102    more \n than \n million
2103
2104/(?>a(?i)b+)+c/
2105    abc
2106    aBbc
2107    aBBc
2108    *** Failers
2109    Abc
2110    abAb
2111    abbC
2112
2113/(?=a(?i)b)\w\wc/
2114    abc
2115    aBc
2116    *** Failers
2117    Ab
2118    abC
2119    aBC
2120
2121/(?<=a(?i)b)(\w\w)c/
2122    abxxc
2123    aBxxc
2124    *** Failers
2125    Abxxc
2126    ABxxc
2127    abxxC
2128
2129/(?:(a)|b)(?(1)A|B)/
2130    aA
2131    bB
2132    *** Failers
2133    aB
2134    bA
2135
2136/^(a)?(?(1)a|b)+$/
2137    aa
2138    b
2139    bb
2140    *** Failers
2141    ab
2142
2143/^(?(?=abc)\w{3}:|\d\d)$/
2144    abc:
2145    12
2146    *** Failers
2147    123
2148    xyz
2149
2150/^(?(?!abc)\d\d|\w{3}:)$/
2151    abc:
2152    12
2153    *** Failers
2154    123
2155    xyz
2156
2157/(?(?<=foo)bar|cat)/
2158    foobar
2159    cat
2160    fcat
2161    focat
2162    *** Failers
2163    foocat
2164
2165/(?(?<!foo)cat|bar)/
2166    foobar
2167    cat
2168    fcat
2169    focat
2170    *** Failers
2171    foocat
2172
2173/( \( )? [^()]+ (?(1) \) |) /x
2174    abcd
2175    (abcd)
2176    the quick (abcd) fox
2177    (abcd
2178
2179/( \( )? [^()]+ (?(1) \) ) /x
2180    abcd
2181    (abcd)
2182    the quick (abcd) fox
2183    (abcd
2184
2185/^(?(2)a|(1)(2))+$/
2186    12
2187    12a
2188    12aa
2189    *** Failers
2190    1234
2191
2192/((?i)blah)\s+\1/
2193    blah blah
2194    BLAH BLAH
2195    Blah Blah
2196    blaH blaH
2197    *** Failers
2198    blah BLAH
2199    Blah blah
2200    blaH blah
2201
2202/((?i)blah)\s+(?i:\1)/
2203    blah blah
2204    BLAH BLAH
2205    Blah Blah
2206    blaH blaH
2207    blah BLAH
2208    Blah blah
2209    blaH blah
2210
2211/(?>a*)*/
2212    a
2213    aa
2214    aaaa
2215
2216/(abc|)+/
2217    abc
2218    abcabc
2219    abcabcabc
2220    xyz
2221
2222/([a]*)*/
2223    a
2224    aaaaa
2225
2226/([ab]*)*/
2227    a
2228    b
2229    ababab
2230    aaaabcde
2231    bbbb
2232
2233/([^a]*)*/
2234    b
2235    bbbb
2236    aaa
2237
2238/([^ab]*)*/
2239    cccc
2240    abab
2241
2242/([a]*?)*/
2243    a
2244    aaaa
2245
2246/([ab]*?)*/
2247    a
2248    b
2249    abab
2250    baba
2251
2252/([^a]*?)*/
2253    b
2254    bbbb
2255    aaa
2256
2257/([^ab]*?)*/
2258    c
2259    cccc
2260    baba
2261
2262/(?>a*)*/
2263    a
2264    aaabcde
2265
2266/((?>a*))*/
2267    aaaaa
2268    aabbaa
2269
2270/((?>a*?))*/
2271    aaaaa
2272    aabbaa
2273
2274/(?(?=[^a-z]+[a-z])  \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} ) /x
2275    12-sep-98
2276    12-09-98
2277    *** Failers
2278    sep-12-98
2279
2280/(?<=(foo))bar\1/
2281    foobarfoo
2282    foobarfootling
2283    *** Failers
2284    foobar
2285    barfoo
2286
2287/(?i:saturday|sunday)/
2288    saturday
2289    sunday
2290    Saturday
2291    Sunday
2292    SATURDAY
2293    SUNDAY
2294    SunDay
2295
2296/(a(?i)bc|BB)x/
2297    abcx
2298    aBCx
2299    bbx
2300    BBx
2301    *** Failers
2302    abcX
2303    aBCX
2304    bbX
2305    BBX
2306
2307/^([ab](?i)[cd]|[ef])/
2308    ac
2309    aC
2310    bD
2311    elephant
2312    Europe
2313    frog
2314    France
2315    *** Failers
2316    Africa
2317
2318/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
2319    ab
2320    aBd
2321    xy
2322    xY
2323    zebra
2324    Zambesi
2325    *** Failers
2326    aCD
2327    XY
2328
2329/(?<=foo\n)^bar/m
2330    foo\nbar
2331    *** Failers
2332    bar
2333    baz\nbar
2334
2335/(?<=(?<!foo)bar)baz/
2336    barbaz
2337    barbarbaz
2338    koobarbaz
2339    *** Failers
2340    baz
2341    foobarbaz
2342
2343/The cases of aaaa and aaaaaa are missed out below because Perl does things/
2344/differently. We know that odd, and maybe incorrect, things happen with/
2345/recursive references in Perl, as far as 5.11.3 - see some stuff in test #2./
2346
2347/^(a\1?){4}$/
2348    a
2349    aa
2350    aaa
2351    aaaaa
2352    aaaaaaa
2353    aaaaaaaa
2354    aaaaaaaaa
2355    aaaaaaaaaa
2356    aaaaaaaaaaa
2357    aaaaaaaaaaaa
2358    aaaaaaaaaaaaa
2359    aaaaaaaaaaaaaa
2360    aaaaaaaaaaaaaaa
2361    aaaaaaaaaaaaaaaa
2362
2363/^(a\1?)(a\1?)(a\2?)(a\3?)$/
2364    a
2365    aa
2366    aaa
2367    aaaa
2368    aaaaa
2369    aaaaaa
2370    aaaaaaa
2371    aaaaaaaa
2372    aaaaaaaaa
2373    aaaaaaaaaa
2374    aaaaaaaaaaa
2375    aaaaaaaaaaaa
2376    aaaaaaaaaaaaa
2377    aaaaaaaaaaaaaa
2378    aaaaaaaaaaaaaaa
2379    aaaaaaaaaaaaaaaa
2380
2381/The following tests are taken from the Perl 5.005 test suite; some of them/
2382/are compatible with 5.004, but I'd rather not have to sort them out./
2383
2384/abc/
2385    abc
2386    xabcy
2387    ababc
2388    *** Failers
2389    xbc
2390    axc
2391    abx
2392
2393/ab*c/
2394    abc
2395
2396/ab*bc/
2397    abc
2398    abbc
2399    abbbbc
2400
2401/.{1}/
2402    abbbbc
2403
2404/.{3,4}/
2405    abbbbc
2406
2407/ab{0,}bc/
2408    abbbbc
2409
2410/ab+bc/
2411    abbc
2412    *** Failers
2413    abc
2414    abq
2415
2416/ab{1,}bc/
2417
2418/ab+bc/
2419    abbbbc
2420
2421/ab{1,}bc/
2422    abbbbc
2423
2424/ab{1,3}bc/
2425    abbbbc
2426
2427/ab{3,4}bc/
2428    abbbbc
2429
2430/ab{4,5}bc/
2431    *** Failers
2432    abq
2433    abbbbc
2434
2435/ab?bc/
2436    abbc
2437    abc
2438
2439/ab{0,1}bc/
2440    abc
2441
2442/ab?bc/
2443
2444/ab?c/
2445    abc
2446
2447/ab{0,1}c/
2448    abc
2449
2450/^abc$/
2451    abc
2452    *** Failers
2453    abbbbc
2454    abcc
2455
2456/^abc/
2457    abcc
2458
2459/^abc$/
2460
2461/abc$/
2462    aabc
2463    *** Failers
2464    aabc
2465    aabcd
2466
2467/^/
2468    abc
2469
2470/$/
2471    abc
2472
2473/a.c/
2474    abc
2475    axc
2476
2477/a.*c/
2478    axyzc
2479
2480/a[bc]d/
2481    abd
2482    *** Failers
2483    axyzd
2484    abc
2485
2486/a[b-d]e/
2487    ace
2488
2489/a[b-d]/
2490    aac
2491
2492/a[-b]/
2493    a-
2494
2495/a[b-]/
2496    a-
2497
2498/a]/
2499    a]
2500
2501/a[]]b/
2502    a]b
2503
2504/a[^bc]d/
2505    aed
2506    *** Failers
2507    abd
2508    abd
2509
2510/a[^-b]c/
2511    adc
2512
2513/a[^]b]c/
2514    adc
2515    *** Failers
2516    a-c
2517    a]c
2518
2519/\ba\b/
2520    a-
2521    -a
2522    -a-
2523
2524/\by\b/
2525    *** Failers
2526    xy
2527    yz
2528    xyz
2529
2530/\Ba\B/
2531    *** Failers
2532    a-
2533    -a
2534    -a-
2535
2536/\By\b/
2537    xy
2538
2539/\by\B/
2540    yz
2541
2542/\By\B/
2543    xyz
2544
2545/\w/
2546    a
2547
2548/\W/
2549    -
2550    *** Failers
2551    -
2552    a
2553
2554/a\sb/
2555    a b
2556
2557/a\Sb/
2558    a-b
2559    *** Failers
2560    a-b
2561    a b
2562
2563/\d/
2564    1
2565
2566/\D/
2567    -
2568    *** Failers
2569    -
2570    1
2571
2572/[\w]/
2573    a
2574
2575/[\W]/
2576    -
2577    *** Failers
2578    -
2579    a
2580
2581/a[\s]b/
2582    a b
2583
2584/a[\S]b/
2585    a-b
2586    *** Failers
2587    a-b
2588    a b
2589
2590/[\d]/
2591    1
2592
2593/[\D]/
2594    -
2595    *** Failers
2596    -
2597    1
2598
2599/ab|cd/
2600    abc
2601    abcd
2602
2603/()ef/
2604    def
2605
2606/$b/
2607
2608/a\(b/
2609    a(b
2610
2611/a\(*b/
2612    ab
2613    a((b
2614
2615/a\\b/
2616    a\b
2617
2618/((a))/
2619    abc
2620
2621/(a)b(c)/
2622    abc
2623
2624/a+b+c/
2625    aabbabc
2626
2627/a{1,}b{1,}c/
2628    aabbabc
2629
2630/a.+?c/
2631    abcabc
2632
2633/(a+|b)*/
2634    ab
2635
2636/(a+|b){0,}/
2637    ab
2638
2639/(a+|b)+/
2640    ab
2641
2642/(a+|b){1,}/
2643    ab
2644
2645/(a+|b)?/
2646    ab
2647
2648/(a+|b){0,1}/
2649    ab
2650
2651/[^ab]*/
2652    cde
2653
2654/abc/
2655    *** Failers
2656    b
2657
2658
2659/a*/
2660
2661
2662/([abc])*d/
2663    abbbcd
2664
2665/([abc])*bcd/
2666    abcd
2667
2668/a|b|c|d|e/
2669    e
2670
2671/(a|b|c|d|e)f/
2672    ef
2673
2674/abcd*efg/
2675    abcdefg
2676
2677/ab*/
2678    xabyabbbz
2679    xayabbbz
2680
2681/(ab|cd)e/
2682    abcde
2683
2684/[abhgefdc]ij/
2685    hij
2686
2687/^(ab|cd)e/
2688
2689/(abc|)ef/
2690    abcdef
2691
2692/(a|b)c*d/
2693    abcd
2694
2695/(ab|ab*)bc/
2696    abc
2697
2698/a([bc]*)c*/
2699    abc
2700
2701/a([bc]*)(c*d)/
2702    abcd
2703
2704/a([bc]+)(c*d)/
2705    abcd
2706
2707/a([bc]*)(c+d)/
2708    abcd
2709
2710/a[bcd]*dcdcde/
2711    adcdcde
2712
2713/a[bcd]+dcdcde/
2714    *** Failers
2715    abcde
2716    adcdcde
2717
2718/(ab|a)b*c/
2719    abc
2720
2721/((a)(b)c)(d)/
2722    abcd
2723
2724/[a-zA-Z_][a-zA-Z0-9_]*/
2725    alpha
2726
2727/^a(bc+|b[eh])g|.h$/
2728    abh
2729
2730/(bc+d$|ef*g.|h?i(j|k))/
2731    effgz
2732    ij
2733    reffgz
2734    *** Failers
2735    effg
2736    bcdd
2737
2738/((((((((((a))))))))))/
2739    a
2740
2741/((((((((((a))))))))))\10/
2742    aa
2743
2744/(((((((((a)))))))))/
2745    a
2746
2747/multiple words of text/
2748    *** Failers
2749    aa
2750    uh-uh
2751
2752/multiple words/
2753    multiple words, yeah
2754
2755/(.*)c(.*)/
2756    abcde
2757
2758/\((.*), (.*)\)/
2759    (a, b)
2760
2761/[k]/
2762
2763/abcd/
2764    abcd
2765
2766/a(bc)d/
2767    abcd
2768
2769/a[-]?c/
2770    ac
2771
2772/(abc)\1/
2773    abcabc
2774
2775/([a-c]*)\1/
2776    abcabc
2777
2778/(a)|\1/
2779    a
2780    *** Failers
2781    ab
2782    x
2783
2784/(([a-c])b*?\2)*/
2785    ababbbcbc
2786
2787/(([a-c])b*?\2){3}/
2788    ababbbcbc
2789
2790/((\3|b)\2(a)x)+/
2791    aaaxabaxbaaxbbax
2792
2793/((\3|b)\2(a)){2,}/
2794    bbaababbabaaaaabbaaaabba
2795
2796/abc/i
2797    ABC
2798    XABCY
2799    ABABC
2800    *** Failers
2801    aaxabxbaxbbx
2802    XBC
2803    AXC
2804    ABX
2805
2806/ab*c/i
2807    ABC
2808
2809/ab*bc/i
2810    ABC
2811    ABBC
2812
2813/ab*?bc/i
2814    ABBBBC
2815
2816/ab{0,}?bc/i
2817    ABBBBC
2818
2819/ab+?bc/i
2820    ABBC
2821
2822/ab+bc/i
2823    *** Failers
2824    ABC
2825    ABQ
2826
2827/ab{1,}bc/i
2828
2829/ab+bc/i
2830    ABBBBC
2831
2832/ab{1,}?bc/i
2833    ABBBBC
2834
2835/ab{1,3}?bc/i
2836    ABBBBC
2837
2838/ab{3,4}?bc/i
2839    ABBBBC
2840
2841/ab{4,5}?bc/i
2842    *** Failers
2843    ABQ
2844    ABBBBC
2845
2846/ab??bc/i
2847    ABBC
2848    ABC
2849
2850/ab{0,1}?bc/i
2851    ABC
2852
2853/ab??bc/i
2854
2855/ab??c/i
2856    ABC
2857
2858/ab{0,1}?c/i
2859    ABC
2860
2861/^abc$/i
2862    ABC
2863    *** Failers
2864    ABBBBC
2865    ABCC
2866
2867/^abc/i
2868    ABCC
2869
2870/^abc$/i
2871
2872/abc$/i
2873    AABC
2874
2875/^/i
2876    ABC
2877
2878/$/i
2879    ABC
2880
2881/a.c/i
2882    ABC
2883    AXC
2884
2885/a.*?c/i
2886    AXYZC
2887
2888/a.*c/i
2889    *** Failers
2890    AABC
2891    AXYZD
2892
2893/a[bc]d/i
2894    ABD
2895
2896/a[b-d]e/i
2897    ACE
2898    *** Failers
2899    ABC
2900    ABD
2901
2902/a[b-d]/i
2903    AAC
2904
2905/a[-b]/i
2906    A-
2907
2908/a[b-]/i
2909    A-
2910
2911/a]/i
2912    A]
2913
2914/a[]]b/i
2915    A]B
2916
2917/a[^bc]d/i
2918    AED
2919
2920/a[^-b]c/i
2921    ADC
2922    *** Failers
2923    ABD
2924    A-C
2925
2926/a[^]b]c/i
2927    ADC
2928
2929/ab|cd/i
2930    ABC
2931    ABCD
2932
2933/()ef/i
2934    DEF
2935
2936/$b/i
2937    *** Failers
2938    A]C
2939    B
2940
2941/a\(b/i
2942    A(B
2943
2944/a\(*b/i
2945    AB
2946    A((B
2947
2948/a\\b/i
2949    A\B
2950
2951/((a))/i
2952    ABC
2953
2954/(a)b(c)/i
2955    ABC
2956
2957/a+b+c/i
2958    AABBABC
2959
2960/a{1,}b{1,}c/i
2961    AABBABC
2962
2963/a.+?c/i
2964    ABCABC
2965
2966/a.*?c/i
2967    ABCABC
2968
2969/a.{0,5}?c/i
2970    ABCABC
2971
2972/(a+|b)*/i
2973    AB
2974
2975/(a+|b){0,}/i
2976    AB
2977
2978/(a+|b)+/i
2979    AB
2980
2981/(a+|b){1,}/i
2982    AB
2983
2984/(a+|b)?/i
2985    AB
2986
2987/(a+|b){0,1}/i
2988    AB
2989
2990/(a+|b){0,1}?/i
2991    AB
2992
2993/[^ab]*/i
2994    CDE
2995
2996/abc/i
2997
2998/a*/i
2999
3000
3001/([abc])*d/i
3002    ABBBCD
3003
3004/([abc])*bcd/i
3005    ABCD
3006
3007/a|b|c|d|e/i
3008    E
3009
3010/(a|b|c|d|e)f/i
3011    EF
3012
3013/abcd*efg/i
3014    ABCDEFG
3015
3016/ab*/i
3017    XABYABBBZ
3018    XAYABBBZ
3019
3020/(ab|cd)e/i
3021    ABCDE
3022
3023/[abhgefdc]ij/i
3024    HIJ
3025
3026/^(ab|cd)e/i
3027    ABCDE
3028
3029/(abc|)ef/i
3030    ABCDEF
3031
3032/(a|b)c*d/i
3033    ABCD
3034
3035/(ab|ab*)bc/i
3036    ABC
3037
3038/a([bc]*)c*/i
3039    ABC
3040
3041/a([bc]*)(c*d)/i
3042    ABCD
3043
3044/a([bc]+)(c*d)/i
3045    ABCD
3046
3047/a([bc]*)(c+d)/i
3048    ABCD
3049
3050/a[bcd]*dcdcde/i
3051    ADCDCDE
3052
3053/a[bcd]+dcdcde/i
3054
3055/(ab|a)b*c/i
3056    ABC
3057
3058/((a)(b)c)(d)/i
3059    ABCD
3060
3061/[a-zA-Z_][a-zA-Z0-9_]*/i
3062    ALPHA
3063
3064/^a(bc+|b[eh])g|.h$/i
3065    ABH
3066
3067/(bc+d$|ef*g.|h?i(j|k))/i
3068    EFFGZ
3069    IJ
3070    REFFGZ
3071    *** Failers
3072    ADCDCDE
3073    EFFG
3074    BCDD
3075
3076/((((((((((a))))))))))/i
3077    A
3078
3079/((((((((((a))))))))))\10/i
3080    AA
3081
3082/(((((((((a)))))))))/i
3083    A
3084
3085/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
3086    A
3087
3088/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
3089    C
3090
3091/multiple words of text/i
3092    *** Failers
3093    AA
3094    UH-UH
3095
3096/multiple words/i
3097    MULTIPLE WORDS, YEAH
3098
3099/(.*)c(.*)/i
3100    ABCDE
3101
3102/\((.*), (.*)\)/i
3103    (A, B)
3104
3105/[k]/i
3106
3107/abcd/i
3108    ABCD
3109
3110/a(bc)d/i
3111    ABCD
3112
3113/a[-]?c/i
3114    AC
3115
3116/(abc)\1/i
3117    ABCABC
3118
3119/([a-c]*)\1/i
3120    ABCABC
3121
3122/a(?!b)./
3123    abad
3124
3125/a(?=d)./
3126    abad
3127
3128/a(?=c|d)./
3129    abad
3130
3131/a(?:b|c|d)(.)/
3132    ace
3133
3134/a(?:b|c|d)*(.)/
3135    ace
3136
3137/a(?:b|c|d)+?(.)/
3138    ace
3139    acdbcdbe
3140
3141/a(?:b|c|d)+(.)/
3142    acdbcdbe
3143
3144/a(?:b|c|d){2}(.)/
3145    acdbcdbe
3146
3147/a(?:b|c|d){4,5}(.)/
3148    acdbcdbe
3149
3150/a(?:b|c|d){4,5}?(.)/
3151    acdbcdbe
3152
3153/((foo)|(bar))*/
3154    foobar
3155
3156/a(?:b|c|d){6,7}(.)/
3157    acdbcdbe
3158
3159/a(?:b|c|d){6,7}?(.)/
3160    acdbcdbe
3161
3162/a(?:b|c|d){5,6}(.)/
3163    acdbcdbe
3164
3165/a(?:b|c|d){5,6}?(.)/
3166    acdbcdbe
3167
3168/a(?:b|c|d){5,7}(.)/
3169    acdbcdbe
3170
3171/a(?:b|c|d){5,7}?(.)/
3172    acdbcdbe
3173
3174/a(?:b|(c|e){1,2}?|d)+?(.)/
3175    ace
3176
3177/^(.+)?B/
3178    AB
3179
3180/^([^a-z])|(\^)$/
3181    .
3182
3183/^[<>]&/
3184    <&OUT
3185
3186/^(a\1?){4}$/
3187    aaaaaaaaaa
3188    *** Failers
3189    AB
3190    aaaaaaaaa
3191    aaaaaaaaaaa
3192
3193/^(a(?(1)\1)){4}$/
3194    aaaaaaaaaa
3195    *** Failers
3196    aaaaaaaaa
3197    aaaaaaaaaaa
3198
3199/(?:(f)(o)(o)|(b)(a)(r))*/
3200    foobar
3201
3202/(?<=a)b/
3203    ab
3204    *** Failers
3205    cb
3206    b
3207
3208/(?<!c)b/
3209    ab
3210    b
3211    b
3212
3213/(?:..)*a/
3214    aba
3215
3216/(?:..)*?a/
3217    aba
3218
3219/^(?:b|a(?=(.)))*\1/
3220    abc
3221
3222/^(){3,5}/
3223    abc
3224
3225/^(a+)*ax/
3226    aax
3227
3228/^((a|b)+)*ax/
3229    aax
3230
3231/^((a|bc)+)*ax/
3232    aax
3233
3234/(a|x)*ab/
3235    cab
3236
3237/(a)*ab/
3238    cab
3239
3240/(?:(?i)a)b/
3241    ab
3242
3243/((?i)a)b/
3244    ab
3245
3246/(?:(?i)a)b/
3247    Ab
3248
3249/((?i)a)b/
3250    Ab
3251
3252/(?:(?i)a)b/
3253    *** Failers
3254    cb
3255    aB
3256
3257/((?i)a)b/
3258
3259/(?i:a)b/
3260    ab
3261
3262/((?i:a))b/
3263    ab
3264
3265/(?i:a)b/
3266    Ab
3267
3268/((?i:a))b/
3269    Ab
3270
3271/(?i:a)b/
3272    *** Failers
3273    aB
3274    aB
3275
3276/((?i:a))b/
3277
3278/(?:(?-i)a)b/i
3279    ab
3280
3281/((?-i)a)b/i
3282    ab
3283
3284/(?:(?-i)a)b/i
3285    aB
3286
3287/((?-i)a)b/i
3288    aB
3289
3290/(?:(?-i)a)b/i
3291    *** Failers
3292    aB
3293    Ab
3294
3295/((?-i)a)b/i
3296
3297/(?:(?-i)a)b/i
3298    aB
3299
3300/((?-i)a)b/i
3301    aB
3302
3303/(?:(?-i)a)b/i
3304    *** Failers
3305    Ab
3306    AB
3307
3308/((?-i)a)b/i
3309
3310/(?-i:a)b/i
3311    ab
3312
3313/((?-i:a))b/i
3314    ab
3315
3316/(?-i:a)b/i
3317    aB
3318
3319/((?-i:a))b/i
3320    aB
3321
3322/(?-i:a)b/i
3323    *** Failers
3324    AB
3325    Ab
3326
3327/((?-i:a))b/i
3328
3329/(?-i:a)b/i
3330    aB
3331
3332/((?-i:a))b/i
3333    aB
3334
3335/(?-i:a)b/i
3336    *** Failers
3337    Ab
3338    AB
3339
3340/((?-i:a))b/i
3341
3342/((?-i:a.))b/i
3343    *** Failers
3344    AB
3345    a\nB
3346
3347/((?s-i:a.))b/i
3348    a\nB
3349
3350/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
3351    cabbbb
3352
3353/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
3354    caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
3355
3356/(ab)\d\1/i
3357    Ab4ab
3358    ab4Ab
3359
3360/foo\w*\d{4}baz/
3361    foobar1234baz
3362
3363/x(~~)*(?:(?:F)?)?/
3364    x~~
3365
3366/^a(?#xxx){3}c/
3367    aaac
3368
3369/^a (?#xxx) (?#yyy) {3}c/x
3370    aaac
3371
3372/(?<![cd])b/
3373    *** Failers
3374    B\nB
3375    dbcb
3376
3377/(?<![cd])[ab]/
3378    dbaacb
3379
3380/(?<!(c|d))b/
3381
3382/(?<!(c|d))[ab]/
3383    dbaacb
3384
3385/(?<!cd)[ab]/
3386    cdaccb
3387
3388/^(?:a?b?)*$/
3389    \
3390    a
3391    ab
3392    aaa
3393    *** Failers
3394    dbcb
3395    a--
3396    aa--
3397
3398/((?s)^a(.))((?m)^b$)/
3399    a\nb\nc\n
3400
3401/((?m)^b$)/
3402    a\nb\nc\n
3403
3404/(?m)^b/
3405    a\nb\n
3406
3407/(?m)^(b)/
3408    a\nb\n
3409
3410/((?m)^b)/
3411    a\nb\n
3412
3413/\n((?m)^b)/
3414    a\nb\n
3415
3416/((?s).)c(?!.)/
3417    a\nb\nc\n
3418    a\nb\nc\n
3419
3420/((?s)b.)c(?!.)/
3421    a\nb\nc\n
3422    a\nb\nc\n
3423
3424/^b/
3425
3426/()^b/
3427    *** Failers
3428    a\nb\nc\n
3429    a\nb\nc\n
3430
3431/((?m)^b)/
3432    a\nb\nc\n
3433
3434/(x)?(?(1)a|b)/
3435    *** Failers
3436    a
3437    a
3438
3439/(x)?(?(1)b|a)/
3440    a
3441
3442/()?(?(1)b|a)/
3443    a
3444
3445/()(?(1)b|a)/
3446
3447/()?(?(1)a|b)/
3448    a
3449
3450/^(\()?blah(?(1)(\)))$/
3451    (blah)
3452    blah
3453    *** Failers
3454    a
3455    blah)
3456    (blah
3457
3458/^(\(+)?blah(?(1)(\)))$/
3459    (blah)
3460    blah
3461    *** Failers
3462    blah)
3463    (blah
3464
3465/(?(?!a)a|b)/
3466
3467/(?(?!a)b|a)/
3468    a
3469
3470/(?(?=a)b|a)/
3471    *** Failers
3472    a
3473    a
3474
3475/(?(?=a)a|b)/
3476    a
3477
3478/(?=(a+?))(\1ab)/
3479    aaab
3480
3481/^(?=(a+?))\1ab/
3482
3483/(\w+:)+/
3484    one:
3485
3486/$(?<=^(a))/
3487    a
3488
3489/(?=(a+?))(\1ab)/
3490    aaab
3491
3492/^(?=(a+?))\1ab/
3493    *** Failers
3494    aaab
3495    aaab
3496
3497/([\w:]+::)?(\w+)$/
3498    abcd
3499    xy:z:::abcd
3500
3501/^[^bcd]*(c+)/
3502    aexycd
3503
3504/(a*)b+/
3505    caab
3506
3507/([\w:]+::)?(\w+)$/
3508    abcd
3509    xy:z:::abcd
3510    *** Failers
3511    abcd:
3512    abcd:
3513
3514/^[^bcd]*(c+)/
3515    aexycd
3516
3517/(>a+)ab/
3518
3519/(?>a+)b/
3520    aaab
3521
3522/([[:]+)/
3523    a:[b]:
3524
3525/([[=]+)/
3526    a=[b]=
3527
3528/([[.]+)/
3529    a.[b].
3530
3531/((?>a+)b)/
3532    aaab
3533
3534/(?>(a+))b/
3535    aaab
3536
3537/((?>[^()]+)|\([^()]*\))+/
3538    ((abc(ade)ufh()()x
3539
3540/a\Z/
3541    *** Failers
3542    aaab
3543    a\nb\n
3544
3545/b\Z/
3546    a\nb\n
3547
3548/b\z/
3549
3550/b\Z/
3551    a\nb
3552
3553/b\z/
3554    a\nb
3555    *** Failers
3556
3557/^(?>(?(1)\.|())[^\W_](?>[a-z0-9-]*[^\W_])?)+$/
3558    a
3559    abc
3560    a-b
3561    0-9
3562    a.b
3563    5.6.7
3564    the.quick.brown.fox
3565    a100.b200.300c
3566    12-ab.1245
3567    *** Failers
3568    \
3569    .a
3570    -a
3571    a-
3572    a.
3573    a_b
3574    a.-
3575    a..
3576    ab..bc
3577    the.quick.brown.fox-
3578    the.quick.brown.fox.
3579    the.quick.brown.fox_
3580    the.quick.brown.fox+
3581
3582/(?>.*)(?<=(abcd|wxyz))/
3583    alphabetabcd
3584    endingwxyz
3585    *** Failers
3586    a rather long string that doesn't end with one of them
3587
3588/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
3589    word cat dog elephant mussel cow horse canary baboon snake shark otherword
3590    word cat dog elephant mussel cow horse canary baboon snake shark
3591
3592/word (?>[a-zA-Z0-9]+ ){0,30}otherword/
3593    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
3594
3595/(?<=\d{3}(?!999))foo/
3596    999foo
3597    123999foo
3598    *** Failers
3599    123abcfoo
3600
3601/(?<=(?!...999)\d{3})foo/
3602    999foo
3603    123999foo
3604    *** Failers
3605    123abcfoo
3606
3607/(?<=\d{3}(?!999)...)foo/
3608    123abcfoo
3609    123456foo
3610    *** Failers
3611    123999foo
3612
3613/(?<=\d{3}...)(?<!999)foo/
3614    123abcfoo
3615    123456foo
3616    *** Failers
3617    123999foo
3618
3619/<a[\s]+href[\s]*=[\s]*          # find <a href=
3620 ([\"\'])?                       # find single or double quote
3621 (?(1) (.*?)\1 | ([^\s]+))       # if quote found, match up to next matching
3622                                 # quote, otherwise match up to next space
3623/isx
3624    <a href=abcd xyz
3625    <a href=\"abcd xyz pqr\" cats
3626    <a href=\'abcd xyz pqr\' cats
3627
3628/<a\s+href\s*=\s*                # find <a href=
3629 (["'])?                         # find single or double quote
3630 (?(1) (.*?)\1 | (\S+))          # if quote found, match up to next matching
3631                                 # quote, otherwise match up to next space
3632/isx
3633    <a href=abcd xyz
3634    <a href=\"abcd xyz pqr\" cats
3635    <a href       =       \'abcd xyz pqr\' cats
3636
3637/<a\s+href(?>\s*)=(?>\s*)        # find <a href=
3638 (["'])?                         # find single or double quote
3639 (?(1) (.*?)\1 | (\S+))          # if quote found, match up to next matching
3640                                 # quote, otherwise match up to next space
3641/isx
3642    <a href=abcd xyz
3643    <a href=\"abcd xyz pqr\" cats
3644    <a href       =       \'abcd xyz pqr\' cats
3645
3646/((Z)+|A)*/
3647    ZABCDEFG
3648
3649/(Z()|A)*/
3650    ZABCDEFG
3651
3652/(Z(())|A)*/
3653    ZABCDEFG
3654
3655/((?>Z)+|A)*/
3656    ZABCDEFG
3657
3658/((?>)+|A)*/
3659    ZABCDEFG
3660
3661/a*/g
3662    abbab
3663
3664/^[\d-a]/
3665    abcde
3666    -things
3667    0digit
3668    *** Failers
3669    bcdef
3670
3671/[[:space:]]+/
3672    > \x09\x0a\x0c\x0d\x0b<
3673
3674/[[:blank:]]+/
3675    > \x09\x0a\x0c\x0d\x0b<
3676
3677/[\s]+/
3678    > \x09\x0a\x0c\x0d\x0b<
3679
3680/\s+/
3681    > \x09\x0a\x0c\x0d\x0b<
3682
3683/ab/x
3684    ab
3685
3686/(?!\A)x/m
3687  a\nxb\n
3688
3689/(?!^)x/m
3690  a\nxb\n
3691
3692/abc\Qabc\Eabc/
3693    abcabcabc
3694
3695/abc\Q(*+|\Eabc/
3696    abc(*+|abc
3697
3698/   abc\Q abc\Eabc/x
3699    abc abcabc
3700    *** Failers
3701    abcabcabc
3702
3703/abc#comment
3704    \Q#not comment
3705    literal\E/x
3706    abc#not comment\n    literal
3707
3708/abc#comment
3709    \Q#not comment
3710    literal/x
3711    abc#not comment\n    literal
3712
3713/abc#comment
3714    \Q#not comment
3715    literal\E #more comment
3716    /x
3717    abc#not comment\n    literal
3718
3719/abc#comment
3720    \Q#not comment
3721    literal\E #more comment/x
3722    abc#not comment\n    literal
3723
3724/\Qabc\$xyz\E/
3725    abc\\\$xyz
3726
3727/\Qabc\E\$\Qxyz\E/
3728    abc\$xyz
3729
3730/\Gabc/
3731    abc
3732    *** Failers
3733    xyzabc
3734
3735/\Gabc./g
3736    abc1abc2xyzabc3
3737
3738/abc./g
3739    abc1abc2xyzabc3
3740
3741/a(?x: b c )d/
3742    XabcdY
3743    *** Failers
3744    Xa b c d Y
3745
3746/((?x)x y z | a b c)/
3747    XabcY
3748    AxyzB
3749
3750/(?i)AB(?-i)C/
3751    XabCY
3752    *** Failers
3753    XabcY
3754
3755/((?i)AB(?-i)C|D)E/
3756    abCE
3757    DE
3758    *** Failers
3759    abcE
3760    abCe
3761    dE
3762    De
3763
3764/(.*)\d+\1/
3765    abc123abc
3766    abc123bc
3767
3768/(.*)\d+\1/s
3769    abc123abc
3770    abc123bc
3771
3772/((.*))\d+\1/
3773    abc123abc
3774    abc123bc
3775
3776/-- This tests for an IPv6 address in the form where it can have up to
3777    eight components, one and only one of which is empty. This must be
3778    an internal component. --/
3779
3780/^(?!:)                       # colon disallowed at start
3781  (?:                         # start of item
3782    (?: [0-9a-f]{1,4} |       # 1-4 hex digits or
3783    (?(1)0 | () ) )           # if null previously matched, fail; else null
3784    :                         # followed by colon
3785  ){1,7}                      # end item; 1-7 of them required
3786  [0-9a-f]{1,4} $             # final hex number at end of string
3787  (?(1)|.)                    # check that there was an empty component
3788  /xi
3789    a123::a123
3790    a123:b342::abcd
3791    a123:b342::324e:abcd
3792    a123:ddde:b342::324e:abcd
3793    a123:ddde:b342::324e:dcba:abcd
3794    a123:ddde:9999:b342::324e:dcba:abcd
3795    *** Failers
3796    1:2:3:4:5:6:7:8
3797    a123:bce:ddde:9999:b342::324e:dcba:abcd
3798    a123::9999:b342::324e:dcba:abcd
3799    abcde:2:3:4:5:6:7:8
3800    ::1
3801    abcd:fee0:123::
3802    :1
3803    1:
3804
3805/[z\Qa-d]\E]/
3806    z
3807    a
3808    -
3809    d
3810    ]
3811    *** Failers
3812    b
3813
3814/[\z\C]/
3815    z
3816    C
3817
3818/\M/
3819    M
3820
3821/(a+)*b/
3822    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
3823
3824/(?i)reg(?:ul(?:[a�]|ae)r|ex)/
3825    REGular
3826    regulaer
3827    Regex
3828    regul�r
3829
3830/����[�-��-�]+/
3831    �����
3832    �����
3833    �����
3834    �����
3835
3836/(?<=Z)X./
3837  \x84XAZXB
3838
3839/ab cd (?x) de fg/
3840    ab cd defg
3841
3842/ab cd(?x) de fg/
3843    ab cddefg
3844    ** Failers
3845    abcddefg
3846
3847/(?<![^f]oo)(bar)/
3848    foobarX
3849    ** Failers
3850    boobarX
3851
3852/(?<![^f])X/
3853    offX
3854    ** Failers
3855    onyX
3856
3857/(?<=[^f])X/
3858    onyX
3859    ** Failers
3860    offX
3861
3862/^/mg
3863    a\nb\nc\n
3864    \
3865
3866/(?<=C\n)^/mg
3867    A\nC\nC\n
3868
3869/(?:(?(1)a|b)(X))+/
3870    bXaX
3871
3872/(?:(?(1)\1a|b)(X|Y))+/
3873    bXXaYYaY
3874    bXYaXXaX
3875
3876/()()()()()()()()()(?:(?(10)\10a|b)(X|Y))+/
3877    bXXaYYaY
3878
3879/[[,abc,]+]/
3880    abc]
3881    a,b]
3882    [a,b,c]
3883
3884/(?-x: )/x
3885    A\x20B
3886
3887"(?x)(?-x: \s*#\s*)"
3888    A # B
3889    ** Failers
3890    #
3891
3892"(?x-is)(?:(?-ixs) \s*#\s*) include"
3893    A #include
3894    ** Failers
3895    A#include
3896    A #Include
3897
3898/a*b*\w/
3899    aaabbbb
3900    aaaa
3901    a
3902
3903/a*b?\w/
3904    aaabbbb
3905    aaaa
3906    a
3907
3908/a*b{0,4}\w/
3909    aaabbbb
3910    aaaa
3911    a
3912
3913/a*b{0,}\w/
3914    aaabbbb
3915    aaaa
3916    a
3917
3918/a*\d*\w/
3919    0a
3920    a
3921
3922/a*b *\w/x
3923    a
3924
3925/a*b#comment
3926  *\w/x
3927    a
3928
3929/a* b *\w/x
3930    a
3931
3932/^\w+=.*(\\\n.*)*/
3933    abc=xyz\\\npqr
3934
3935/(?=(\w+))\1:/
3936    abcd:
3937
3938/^(?=(\w+))\1:/
3939    abcd:
3940
3941/^\Eabc/
3942    abc
3943
3944/^[\Eabc]/
3945    a
3946    ** Failers
3947    E
3948
3949/^[a-\Ec]/
3950    b
3951    ** Failers
3952    -
3953    E
3954
3955/^[a\E\E-\Ec]/
3956    b
3957    ** Failers
3958    -
3959    E
3960
3961/^[\E\Qa\E-\Qz\E]+/
3962    b
3963    ** Failers
3964    -
3965
3966/^[a\Q]bc\E]/
3967    a
3968    ]
3969    c
3970
3971/^[a-\Q\E]/
3972    a
3973    -
3974
3975/^(a()*)*/
3976    aaaa
3977
3978/^(?:a(?:(?:))*)*/
3979    aaaa
3980
3981/^(a()+)+/
3982    aaaa
3983
3984/^(?:a(?:(?:))+)+/
3985    aaaa
3986
3987/(a){0,3}(?(1)b|(c|))*D/
3988    abbD
3989    ccccD
3990    D
3991
3992/(a|)*\d/
3993  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
3994  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
3995
3996/(?>a|)*\d/
3997  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
3998  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
3999
4000/(?:a|)*\d/
4001  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
4002  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
4003
4004/\Z/g
4005  abc\n
4006
4007/^(?s)(?>.*)(?<!\n)/
4008  abc
4009  abc\n
4010
4011/^(?![^\n]*\n\z)/
4012  abc
4013  abc\n
4014
4015/\z(?<!\n)/
4016  abc
4017  abc\n
4018
4019/(.*(.)?)*/
4020    abcd
4021
4022/( (A | (?(1)0|) )*   )/x
4023    abcd
4024
4025/( ( (?(1)0|) )*   )/x
4026    abcd
4027
4028/(  (?(1)0|)*   )/x
4029    abcd
4030
4031/[[:abcd:xyz]]/
4032    a]
4033    :]
4034
4035/[abc[:x\]pqr]/
4036    a
4037    [
4038    :
4039    ]
4040    p
4041
4042/.*[op][xyz]/
4043    fooabcfoo
4044
4045/(?(?=.*b)b|^)/
4046   adc
4047   abc
4048
4049/(?(?=^.*b)b|^)/
4050   adc
4051   abc
4052
4053/(?(?=.*b)b|^)*/
4054   adc
4055   abc
4056
4057/(?(?=.*b)b|^)+/
4058   adc
4059   abc
4060
4061/(?(?=b).*b|^d)/
4062    abc
4063
4064/(?(?=.*b).*b|^d)/
4065    abc
4066
4067/^%((?(?=[a])[^%])|b)*%$/
4068    %ab%
4069
4070/(?i)a(?-i)b|c/
4071    XabX
4072    XAbX
4073    CcC
4074    ** Failers
4075    XABX
4076
4077/[\x00-\xff\s]+/
4078    \x0a\x0b\x0c\x0d
4079
4080/^\c/
4081    ?
4082
4083/(abc)\1/i
4084   abc
4085
4086/(abc)\1/
4087   abc
4088
4089/[^a]*/i
4090    12abc
4091    12ABC
4092
4093/[^a]*+/i
4094    12abc
4095    12ABC
4096
4097/[^a]*?X/i
4098    ** Failers
4099    12abc
4100    12ABC
4101
4102/[^a]+?X/i
4103    ** Failers
4104    12abc
4105    12ABC
4106
4107/[^a]?X/i
4108    12aXbcX
4109    12AXBCX
4110    BCX
4111
4112/[^a]??X/i
4113    12aXbcX
4114    12AXBCX
4115    BCX
4116
4117/[^a]?+X/i
4118    12aXbcX
4119    12AXBCX
4120    BCX
4121
4122/[^a]{2,3}/i
4123    abcdef
4124    ABCDEF
4125
4126/[^a]{2,3}?/i
4127    abcdef
4128    ABCDEF
4129
4130/[^a]{2,3}+/i
4131    abcdef
4132    ABCDEF
4133
4134/((a|)+)+Z/
4135    Z
4136
4137/(a)b|(a)c/
4138    ac
4139
4140/(?>(a))b|(a)c/
4141    ac
4142
4143/(?=(a))ab|(a)c/
4144    ac
4145
4146/((?>(a))b|(a)c)/
4147    ac
4148
4149/((?>(a))b|(a)c)++/
4150    ac
4151
4152/(?:(?>(a))b|(a)c)++/
4153    ac
4154
4155/(?=(?>(a))b|(a)c)(..)/
4156    ac
4157
4158/(?>(?>(a))b|(a)c)/
4159    ac
4160
4161/(?:(?>([ab])))+a=/+
4162    =ba=
4163
4164/(?>([ab]))+a=/+
4165    =ba=
4166
4167/((?>(a+)b)+(aabab))/
4168    aaaabaaabaabab
4169
4170/(?>a+|ab)+?c/
4171    aabc
4172
4173/(?>a+|ab)+c/
4174    aabc
4175
4176/(?:a+|ab)+c/
4177    aabc
4178
4179/(?(?=(a))a)/
4180    a
4181
4182/(?(?=(a))a)(b)/
4183    ab
4184
4185/^(?:a|ab)++c/
4186    aaaabc
4187
4188/^(?>a|ab)++c/
4189    aaaabc
4190
4191/^(?:a|ab)+c/
4192    aaaabc
4193
4194/(?=abc){3}abc/+
4195    abcabcabc
4196    ** Failers
4197    xyz
4198
4199/(?=abc)+abc/+
4200    abcabcabc
4201    ** Failers
4202    xyz
4203
4204/(?=abc)++abc/+
4205    abcabcabc
4206    ** Failers
4207    xyz
4208
4209/(?=abc){0}xyz/
4210    xyz
4211
4212/(?=abc){1}xyz/
4213    ** Failers
4214    xyz
4215
4216/(?=(a))?./
4217    ab
4218    bc
4219
4220/(?=(a))??./
4221    ab
4222    bc
4223
4224/^(?=(?1))?[az]([abc])d/
4225    abd
4226    zcdxx
4227
4228/^(?!a){0}\w+/
4229    aaaaa
4230
4231/(?<=(abc))?xyz/
4232    abcxyz
4233    pqrxyz
4234
4235/^[\g<a>]+/
4236    ggg<<<aaa>>>
4237    ** Failers
4238    \\ga
4239
4240/^[\ga]+/
4241    gggagagaxyz
4242
4243/^[:a[:digit:]]+/
4244    aaaa444:::Z
4245
4246/^[:a[:digit:]:b]+/
4247    aaaa444:::bbbZ
4248
4249/[:a]xxx[b:]/
4250     :xxx:
4251
4252/(?<=a{2})b/i
4253    xaabc
4254    ** Failers
4255    xabc
4256
4257/(?<!a{2})b/i
4258    xabc
4259    ** Failers
4260    xaabc
4261
4262/(?<=a\h)c/
4263    xa c
4264
4265/(?<=[^a]{2})b/
4266    axxbc
4267    aAAbc
4268    ** Failers
4269    xaabc
4270
4271/(?<=[^a]{2})b/i
4272    axxbc
4273    ** Failers
4274    aAAbc
4275    xaabc
4276
4277/(?<=a\H)c/
4278    abc
4279
4280/(?<=a\V)c/
4281    abc
4282
4283/(?<=a\v)c/
4284    a\nc
4285
4286/(?(?=c)c|d)++Y/
4287    XcccddYX
4288
4289/(?(?=c)c|d)*+Y/
4290    XcccddYX
4291
4292/^(a{2,3}){2,}+a/
4293    aaaaaaa
4294    ** Failers
4295    aaaaaa
4296    aaaaaaaaa
4297
4298/^(a{2,3})++a/
4299    ** Failers
4300    aaaaaa
4301
4302/^(a{2,3})*+a/
4303    ** Failers
4304    aaaaaa
4305
4306/ab\Cde/
4307    abXde
4308
4309/(?<=ab\Cde)X/
4310    abZdeX
4311
4312/a[\CD]b/
4313    aCb
4314    aDb
4315
4316/a[\C-X]b/
4317    aJb
4318
4319/\H\h\V\v/
4320    X X\x0a
4321    X\x09X\x0b
4322    ** Failers
4323    \xa0 X\x0a
4324
4325/\H*\h+\V?\v{3,4}/
4326    \x09\x20\xa0X\x0a\x0b\x0c\x0d\x0a
4327    \x09\x20\xa0\x0a\x0b\x0c\x0d\x0a
4328    \x09\x20\xa0\x0a\x0b\x0c
4329    ** Failers
4330    \x09\x20\xa0\x0a\x0b
4331
4332/\H{3,4}/
4333    XY  ABCDE
4334    XY  PQR ST
4335
4336/.\h{3,4}./
4337    XY  AB    PQRS
4338
4339/\h*X\h?\H+Y\H?Z/
4340    >XNNNYZ
4341    >  X NYQZ
4342    ** Failers
4343    >XYZ
4344    >  X NY Z
4345
4346/\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c/
4347    >XY\x0aZ\x0aA\x0bNN\x0c
4348    >\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
4349
4350/(foo)\Kbar/
4351    foobar
4352
4353/(foo)(\Kbar|baz)/
4354    foobar
4355    foobaz
4356
4357/(foo\Kbar)baz/
4358    foobarbaz
4359
4360/abc\K|def\K/g+
4361    Xabcdefghi
4362
4363/ab\Kc|de\Kf/g+
4364    Xabcdefghi
4365
4366/(?=C)/g+
4367    ABCDECBA
4368
4369/^abc\K/+
4370    abcdef
4371    ** Failers
4372    defabcxyz
4373
4374/^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-02}Z/
4375    ababababbbabZXXXX
4376
4377/(?<A>tom|bon)-\g{A}/
4378    tom-tom
4379    bon-bon
4380
4381/(^(a|b\g{-1}))/
4382    bacxxx
4383
4384/(?|(abc)|(xyz))\1/
4385    abcabc
4386    xyzxyz
4387    ** Failers
4388    abcxyz
4389    xyzabc
4390
4391/(?|(abc)|(xyz))(?1)/
4392    abcabc
4393    xyzabc
4394    ** Failers
4395    xyzxyz
4396
4397/^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/
4398    XYabcdY
4399
4400/^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/
4401    XYabcdY
4402
4403/^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/
4404    XYabcdY
4405
4406/(?'abc'\w+):\k<abc>{2}/
4407    a:aaxyz
4408    ab:ababxyz
4409    ** Failers
4410    a:axyz
4411    ab:abxyz
4412
4413/(?'abc'\w+):\g{abc}{2}/
4414    a:aaxyz
4415    ab:ababxyz
4416    ** Failers
4417    a:axyz
4418    ab:abxyz
4419
4420/^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)/x
4421    abd
4422    ce
4423
4424/^(a.)\g-1Z/
4425    aXaXZ
4426
4427/^(a.)\g{-1}Z/
4428    aXaXZ
4429
4430/^(?(DEFINE) (?<A> a) (?<B> b) )  (?&A) (?&B) /x
4431    abcd
4432
4433/(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT))
4434  (?(DEFINE)
4435  (?<NAME_PAT>[a-z]+)
4436  (?<ADDRESS_PAT>\d+)
4437  )/x
4438    metcalfe 33
4439
4440/(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}/
4441    1.2.3.4
4442    131.111.10.206
4443    10.0.0.0
4444    ** Failers
4445    10.6
4446    455.3.4.5
4447
4448/\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))/
4449    1.2.3.4
4450    131.111.10.206
4451    10.0.0.0
4452    ** Failers
4453    10.6
4454    455.3.4.5
4455
4456/^(\w++|\s++)*$/
4457    now is the time for all good men to come to the aid of the party
4458    *** Failers
4459    this is not a line with only words and spaces!
4460
4461/(\d++)(\w)/
4462    12345a
4463    *** Failers
4464    12345+
4465
4466/a++b/
4467    aaab
4468
4469/(a++b)/
4470    aaab
4471
4472/(a++)b/
4473    aaab
4474
4475/([^()]++|\([^()]*\))+/
4476    ((abc(ade)ufh()()x
4477
4478/\(([^()]++|\([^()]+\))+\)/
4479    (abc)
4480    (abc(def)xyz)
4481    *** Failers
4482    ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
4483
4484/^([^()]|\((?1)*\))*$/
4485    abc
4486    a(b)c
4487    a(b(c))d
4488    *** Failers)
4489    a(b(c)d
4490
4491/^>abc>([^()]|\((?1)*\))*<xyz<$/
4492   >abc>123<xyz<
4493   >abc>1(2)3<xyz<
4494   >abc>(1(2)3)<xyz<
4495
4496/^(?:((.)(?1)\2|)|((.)(?3)\4|.))$/i
4497    1221
4498    Satanoscillatemymetallicsonatas
4499    AmanaplanacanalPanama
4500    AblewasIereIsawElba
4501    *** Failers
4502    Thequickbrownfox
4503
4504/^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/
4505    12
4506    (((2+2)*-3)-7)
4507    -12
4508    *** Failers
4509    ((2+2)*-3)-7)
4510
4511/^(x(y|(?1){2})z)/
4512    xyz
4513    xxyzxyzz
4514    *** Failers
4515    xxyzz
4516    xxyzxyzxyzz
4517
4518/((< (?: (?(R) \d++  | [^<>]*+) | (?2)) * >))/x
4519    <>
4520    <abcd>
4521    <abc <123> hij>
4522    <abc <def> hij>
4523    <abc<>def>
4524    <abc<>
4525    *** Failers
4526    <abc
4527
4528/^a+(*FAIL)/
4529    aaaaaa
4530
4531/a+b?c+(*FAIL)/
4532    aaabccc
4533
4534/a+b?(*PRUNE)c+(*FAIL)/
4535    aaabccc
4536
4537/a+b?(*COMMIT)c+(*FAIL)/
4538    aaabccc
4539
4540/a+b?(*SKIP)c+(*FAIL)/
4541    aaabcccaaabccc
4542
4543/^(?:aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
4544    aaaxxxxxx
4545    aaa++++++
4546    bbbxxxxx
4547    bbb+++++
4548    cccxxxx
4549    ccc++++
4550    dddddddd
4551
4552/^(aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
4553    aaaxxxxxx
4554    aaa++++++
4555    bbbxxxxx
4556    bbb+++++
4557    cccxxxx
4558    ccc++++
4559    dddddddd
4560
4561/a+b?(*THEN)c+(*FAIL)/
4562    aaabccc
4563
4564/(A (A|B(*ACCEPT)|C) D)(E)/x
4565    AB
4566    ABX
4567    AADE
4568    ACDE
4569    ** Failers
4570    AD
4571
4572/^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$/i
4573    1221
4574    Satan, oscillate my metallic sonatas!
4575    A man, a plan, a canal: Panama!
4576    Able was I ere I saw Elba.
4577    *** Failers
4578    The quick brown fox
4579
4580/^((.)(?1)\2|.)$/
4581    a
4582    aba
4583    aabaa
4584    abcdcba
4585    pqaabaaqp
4586    ablewasiereisawelba
4587    rhubarb
4588    the quick brown fox
4589
4590/(a)(?<=b(?1))/
4591    baz
4592    ** Failers
4593    caz
4594
4595/(?<=b(?1))(a)/
4596    zbaaz
4597    ** Failers
4598    aaa
4599
4600/(?<X>a)(?<=b(?&X))/
4601    baz
4602
4603/^(?|(abc)|(def))\1/
4604    abcabc
4605    defdef
4606    ** Failers
4607    abcdef
4608    defabc
4609
4610/^(?|(abc)|(def))(?1)/
4611    abcabc
4612    defabc
4613    ** Failers
4614    defdef
4615    abcdef
4616
4617/(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |b(?<quote> (?<apostrophe>')|(?<realquote>")) ) (?('quote')[a-z]+|[0-9]+)/xJ
4618    a\"aaaaa
4619    b\"aaaaa
4620    ** Failers
4621    b\"11111
4622
4623/(?:(?1)|B)(A(*F)|C)/
4624    ABCD
4625    CCD
4626    ** Failers
4627    CAD
4628
4629/^(?:(?1)|B)(A(*F)|C)/
4630    CCD
4631    BCD
4632    ** Failers
4633    ABCD
4634    CAD
4635    BAD
4636
4637/(?:(?1)|B)(A(*ACCEPT)XX|C)D/
4638    AAD
4639    ACD
4640    BAD
4641    BCD
4642    BAX
4643    ** Failers
4644    ACX
4645    ABC
4646
4647/(?(DEFINE)(A))B(?1)C/
4648    BAC
4649
4650/(?(DEFINE)((A)\2))B(?1)C/
4651    BAAC
4652
4653/(?<pn> \( ( [^()]++ | (?&pn) )* \) )/x
4654    (ab(cd)ef)
4655
4656/^(?=a(*SKIP)b|ac)/
4657    ** Failers
4658    ac
4659
4660/^(?=a(*PRUNE)b)/
4661    ab
4662    ** Failers
4663    ac
4664
4665/^(?=a(*ACCEPT)b)/
4666    ac
4667
4668/(?>a\Kb)/
4669    ab
4670
4671/((?>a\Kb))/
4672    ab
4673
4674/(a\Kb)/
4675    ab
4676
4677/^a\Kcz|ac/
4678    ac
4679
4680/(?>a\Kbz|ab)/
4681    ab
4682
4683/^(?&t)(?(DEFINE)(?<t>a\Kb))$/
4684    ab
4685
4686/^([^()]|\((?1)*\))*$/
4687    a(b)c
4688    a(b(c)d)e
4689
4690/(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))/
4691    0
4692    00
4693    0000
4694
4695/(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))/
4696    0
4697    00
4698    0000
4699
4700/--- This one does fail, as expected, in Perl. It needs the complex item at the
4701     end of the pattern. A single letter instead of (B|D) makes it not fail,
4702     which I think is a Perl bug. --- /
4703
4704/A(*COMMIT)(B|D)/
4705    ACABX
4706
4707/--- Check the use of names for failure ---/
4708
4709/^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
4710    ** Failers
4711    AC
4712    CB
4713
4714/--- Force no study, otherwise mark is not seen. The studied version is in
4715     test 2 because it isn't Perl-compatible. ---/
4716
4717/(*MARK:A)(*SKIP:B)(C|X)/KSS
4718    C
4719    D
4720
4721/^(A(*THEN:A)B|C(*THEN:B)D)/K
4722    ** Failers
4723    CB
4724
4725/^(?:A(*THEN:A)B|C(*THEN:B)D)/K
4726    CB
4727
4728/^(?>A(*THEN:A)B|C(*THEN:B)D)/K
4729    CB
4730
4731/--- This should succeed, as the skip causes bump to offset 1 (the mark). Note
4732that we have to have something complicated such as (B|Z) at the end because,
4733for Perl, a simple character somehow causes an unwanted optimization to mess
4734with the handling of backtracking verbs. ---/
4735
4736/A(*MARK:A)A+(*SKIP:A)(B|Z) | AC/xK
4737    AAAC
4738
4739/--- Test skipping over a non-matching mark. ---/
4740
4741/A(*MARK:A)A+(*MARK:B)(*SKIP:A)(B|Z) | AC/xK
4742    AAAC
4743
4744/--- Check shorthand for MARK ---/
4745
4746/A(*:A)A+(*SKIP:A)(B|Z) | AC/xK
4747    AAAC
4748
4749/--- Don't loop! Force no study, otherwise mark is not seen. ---/
4750
4751/(*:A)A+(*SKIP:A)(B|Z)/KSS
4752    AAAC
4753
4754/--- This should succeed, as a non-existent skip name disables the skip ---/
4755
4756/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/xK
4757    AAAC
4758
4759/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC(*:B)/xK
4760    AAAC
4761
4762/--- COMMIT at the start of a pattern should act like an anchor. Again,
4763however, we need the complication for Perl. ---/
4764
4765/(*COMMIT)(A|P)(B|P)(C|P)/
4766    ABCDEFG
4767    ** Failers
4768    DEFGABC
4769
4770/--- COMMIT inside an atomic group can't stop backtracking over the group. ---/
4771
4772/(\w+)(?>b(*COMMIT))\w{2}/
4773    abbb
4774
4775/(\w+)b(*COMMIT)\w{2}/
4776    abbb
4777
4778/--- Check opening parens in comment when seeking forward reference. ---/
4779
4780/(?&t)(?#()(?(DEFINE)(?<t>a))/
4781    bac
4782
4783/--- COMMIT should override THEN ---/
4784
4785/(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?/
4786  yes
4787
4788/(?>(*COMMIT)(yes|no)(*THEN)(*F))?/
4789  yes
4790
4791/b?(*SKIP)c/
4792    bc
4793    abc
4794
4795/(*SKIP)bc/
4796    a
4797
4798/(*SKIP)b/
4799    a
4800
4801/(?P<abn>(?P=abn)xxx|)+/
4802    xxx
4803
4804/(?i:([^b]))(?1)/
4805    aa
4806    aA
4807    ** Failers
4808    ab
4809    aB
4810    Ba
4811    ba
4812
4813/^(?&t)*+(?(DEFINE)(?<t>a))\w$/
4814    aaaaaaX
4815    ** Failers
4816    aaaaaa
4817
4818/^(?&t)*(?(DEFINE)(?<t>a))\w$/
4819    aaaaaaX
4820    aaaaaa
4821
4822/^(a)*+(\w)/
4823    aaaaX
4824    YZ
4825    ** Failers
4826    aaaa
4827
4828/^(?:a)*+(\w)/
4829    aaaaX
4830    YZ
4831    ** Failers
4832    aaaa
4833
4834/^(a)++(\w)/
4835    aaaaX
4836    ** Failers
4837    aaaa
4838    YZ
4839
4840/^(?:a)++(\w)/
4841    aaaaX
4842    ** Failers
4843    aaaa
4844    YZ
4845
4846/^(a)?+(\w)/
4847    aaaaX
4848    YZ
4849
4850/^(?:a)?+(\w)/
4851    aaaaX
4852    YZ
4853
4854/^(a){2,}+(\w)/
4855    aaaaX
4856    ** Failers
4857    aaa
4858    YZ
4859
4860/^(?:a){2,}+(\w)/
4861    aaaaX
4862    ** Failers
4863    aaa
4864    YZ
4865
4866/(a|)*(?1)b/
4867    b
4868    ab
4869    aab
4870
4871/(a)++(?1)b/
4872    ** Failers
4873    ab
4874    aab
4875
4876/(a)*+(?1)b/
4877    ** Failers
4878    ab
4879    aab
4880
4881/(?1)(?:(b)){0}/
4882    b
4883
4884/(foo ( \( ((?:(?> [^()]+ )|(?2))*) \) ) )/x
4885    foo(bar(baz)+baz(bop))
4886
4887/(A (A|B(*ACCEPT)|C) D)(E)/x
4888    AB
4889
4890/\A.*?(a|bc)/
4891    ba
4892
4893/\A.*?(?:a|bc)++/
4894    ba
4895
4896/\A.*?(a|bc)++/
4897    ba
4898
4899/\A.*?(?:a|bc|d)/
4900    ba
4901
4902/(?:(b))++/
4903    beetle
4904
4905/(?(?=(a(*ACCEPT)z))a)/
4906    a
4907
4908/^(a)(?1)+ab/
4909    aaaab
4910
4911/^(a)(?1)++ab/
4912    aaaab
4913
4914/^(?=a(*:M))aZ/K
4915    aZbc
4916
4917/^(?!(*:M)b)aZ/K
4918    aZbc
4919
4920/(?(DEFINE)(a))?b(?1)/
4921    backgammon
4922
4923/^\N+/
4924    abc\ndef
4925
4926/^\N{1,}/
4927    abc\ndef
4928
4929/(?(R)a+|(?R)b)/
4930    aaaabcde
4931
4932/(?(R)a+|((?R))b)/
4933    aaaabcde
4934
4935/((?(R)a+|(?1)b))/
4936    aaaabcde
4937
4938/((?(R1)a+|(?1)b))/
4939    aaaabcde
4940
4941/((?(R)a|(?1)))*/
4942    aaa
4943
4944/((?(R)a|(?1)))+/
4945    aaa
4946
4947/a(*:any
4948name)/K
4949    abc
4950
4951/(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))/
4952    a
4953    ba
4954    bba
4955
4956/--- Checking revised (*THEN) handling ---/
4957
4958/--- Capture ---/
4959
4960/^.*? (a(*THEN)b) c/x
4961    aabc
4962
4963/^.*? (a(*THEN)b|(*F)) c/x
4964    aabc
4965
4966/^.*? ( (a(*THEN)b) | (*F) ) c/x
4967    aabc
4968
4969/^.*? ( (a(*THEN)b) ) c/x
4970    aabc
4971
4972/--- Non-capture ---/
4973
4974/^.*? (?:a(*THEN)b) c/x
4975    aabc
4976
4977/^.*? (?:a(*THEN)b|(*F)) c/x
4978    aabc
4979
4980/^.*? (?: (?:a(*THEN)b) | (*F) ) c/x
4981    aabc
4982
4983/^.*? (?: (?:a(*THEN)b) ) c/x
4984    aabc
4985
4986/--- Atomic ---/
4987
4988/^.*? (?>a(*THEN)b) c/x
4989    aabc
4990
4991/^.*? (?>a(*THEN)b|(*F)) c/x
4992    aabc
4993
4994/^.*? (?> (?>a(*THEN)b) | (*F) ) c/x
4995    aabc
4996
4997/^.*? (?> (?>a(*THEN)b) ) c/x
4998    aabc
4999
5000/--- Possessive capture ---/
5001
5002/^.*? (a(*THEN)b)++ c/x
5003    aabc
5004
5005/^.*? (a(*THEN)b|(*F))++ c/x
5006    aabc
5007
5008/^.*? ( (a(*THEN)b)++ | (*F) )++ c/x
5009    aabc
5010
5011/^.*? ( (a(*THEN)b)++ )++ c/x
5012    aabc
5013
5014/--- Possessive non-capture ---/
5015
5016/^.*? (?:a(*THEN)b)++ c/x
5017    aabc
5018
5019/^.*? (?:a(*THEN)b|(*F))++ c/x
5020    aabc
5021
5022/^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c/x
5023    aabc
5024
5025/^.*? (?: (?:a(*THEN)b)++ )++ c/x
5026    aabc
5027
5028/--- Condition assertion ---/
5029
5030/^(?(?=a(*THEN)b)ab|ac)/
5031    ac
5032
5033/--- Condition ---/
5034
5035/^.*?(?(?=a)a|b(*THEN)c)/
5036    ba
5037
5038/^.*?(?:(?(?=a)a|b(*THEN)c)|d)/
5039    ba
5040
5041/^.*?(?(?=a)a(*THEN)b|c)/
5042    ac
5043
5044/--- Assertion ---/
5045
5046/^.*(?=a(*THEN)b)/
5047    aabc
5048
5049/------------------------------/
5050
5051/(?>a(*:m))/imsxSK
5052    a
5053
5054/(?>(a)(*:m))/imsxSK
5055    a
5056
5057/(?<=a(*ACCEPT)b)c/
5058    xacd
5059
5060/(?<=(a(*ACCEPT)b))c/
5061    xacd
5062
5063/(?<=(a(*COMMIT)b))c/
5064    xabcd
5065    ** Failers
5066    xacd
5067
5068/(?<!a(*FAIL)b)c/
5069    xcd
5070    acd
5071
5072/(?<=a(*:N)b)c/K
5073    xabcd
5074
5075/(?<=a(*PRUNE)b)c/
5076    xabcd
5077
5078/(?<=a(*SKIP)b)c/
5079    xabcd
5080
5081/(?<=a(*THEN)b)c/
5082    xabcd
5083
5084/(a)(?2){2}(.)/
5085    abcd
5086
5087/(*MARK:A)(*PRUNE:B)(C|X)/KS
5088    C
5089    D
5090
5091/(*MARK:A)(*PRUNE:B)(C|X)/KSS
5092    C
5093    D
5094
5095/(*MARK:A)(*THEN:B)(C|X)/KS
5096    C
5097    D
5098
5099/(*MARK:A)(*THEN:B)(C|X)/KSY
5100    C
5101    D
5102
5103/(*MARK:A)(*THEN:B)(C|X)/KSS
5104    C
5105    D
5106
5107/--- This should fail, as the skip causes a bump to offset 3 (the skip) ---/
5108
5109/A(*MARK:A)A+(*SKIP)(B|Z) | AC/xK
5110    AAAC
5111
5112/--- Same --/
5113
5114/A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/xK
5115    AAAC
5116
5117/A(*:A)A+(*SKIP)(B|Z) | AC/xK
5118    AAAC
5119
5120/--- This should fail, as a null name is the same as no name ---/
5121
5122/A(*MARK:A)A+(*SKIP:)(B|Z) | AC/xK
5123    AAAC
5124
5125/--- A check on what happens after hitting a mark and them bumping along to
5126something that does not even start. Perl reports tags after the failures here,
5127though it does not when the individual letters are made into something
5128more complicated. ---/
5129
5130/A(*:A)B|XX(*:B)Y/K
5131    AABC
5132    XXYZ
5133    ** Failers
5134    XAQQ
5135    XAQQXZZ
5136    AXQQQ
5137    AXXQQQ
5138
5139/^(A(*THEN:A)B|C(*THEN:B)D)/K
5140    AB
5141    CD
5142    ** Failers
5143    AC
5144    CB
5145
5146/^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
5147    AB
5148    CD
5149    ** Failers
5150    AC
5151    CB
5152
5153/--- An empty name does not pass back an empty string. It is the same as if no
5154name were given. ---/
5155
5156/^(A(*PRUNE:)B|C(*PRUNE:B)D)/K
5157    AB
5158    CD
5159
5160/--- PRUNE goes to next bumpalong; COMMIT does not. ---/
5161
5162/A(*PRUNE:A)B/K
5163    ACAB
5164
5165/--- Mark names can be duplicated ---/
5166
5167/A(*:A)B|X(*:A)Y/K
5168    AABC
5169    XXYZ
5170
5171/b(*:m)f|a(*:n)w/K
5172    aw
5173    ** Failers
5174    abc
5175
5176/b(*:m)f|aw/K
5177    abaw
5178    ** Failers
5179    abc
5180    abax
5181
5182/A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC/xK
5183    AAAC
5184
5185/a(*PRUNE:X)bc|qq/KY
5186    ** Failers
5187    axy
5188
5189/a(*THEN:X)bc|qq/KY
5190    ** Failers
5191    axy
5192
5193/(?=a(*MARK:A)b)..x/K
5194    abxy
5195    ** Failers
5196    abpq
5197
5198/(?=a(*MARK:A)b)..(*:Y)x/K
5199    abxy
5200    ** Failers
5201    abpq
5202
5203/(?=a(*PRUNE:A)b)..x/K
5204    abxy
5205    ** Failers
5206    abpq
5207
5208/(?=a(*PRUNE:A)b)..(*:Y)x/K
5209    abxy
5210    ** Failers
5211    abpq
5212
5213/(?=a(*THEN:A)b)..x/K
5214    abxy
5215    ** Failers
5216    abpq
5217
5218/(?=a(*THEN:A)b)..(*:Y)x/K
5219    abxy
5220    ** Failers
5221    abpq
5222
5223/(another)?(\1?)test/
5224    hello world test
5225
5226/(another)?(\1+)test/
5227    hello world test
5228
5229/(a(*COMMIT)b){0}a(?1)|aac/
5230    aac
5231
5232/((?:a?)*)*c/
5233  aac
5234
5235/((?>a?)*)*c/
5236  aac
5237
5238/(?>.*?a)(?<=ba)/
5239    aba
5240
5241/(?:.*?a)(?<=ba)/
5242    aba
5243
5244/.*?a(*PRUNE)b/
5245    aab
5246
5247/.*?a(*PRUNE)b/s
5248    aab
5249
5250/^a(*PRUNE)b/s
5251    aab
5252
5253/.*?a(*SKIP)b/
5254    aab
5255
5256/(?>.*?a)b/s
5257    aab
5258
5259/(?>.*?a)b/
5260    aab
5261
5262/(?>^a)b/s
5263    aab
5264
5265/(?>.*?)(?<=(abcd)|(wxyz))/
5266    alphabetabcd
5267    endingwxyz
5268
5269/(?>.*)(?<=(abcd)|(wxyz))/
5270    alphabetabcd
5271    endingwxyz
5272
5273"(?>.*)foo"
5274    abcdfooxyz
5275
5276"(?>.*?)foo"
5277    abcdfooxyz
5278
5279/(?:(a(*PRUNE)b)){0}(?:(?1)|ac)/
5280    ac
5281
5282/(?:(a(*SKIP)b)){0}(?:(?1)|ac)/
5283    ac
5284
5285/(?<=(*SKIP)ac)a/
5286    aa
5287
5288/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/xK
5289    AAAC
5290
5291/a(*SKIP:m)x|ac(*:n)(*SKIP:n)d|ac/K
5292    acacd
5293
5294/A(*SKIP:m)x|A(*SKIP:n)x|AB/K
5295    AB
5296
5297/((*SKIP:r)d){0}a(*SKIP:m)x|ac(*:n)|ac/K
5298    acacd
5299
5300/-- Tests that try to figure out how Perl works. My hypothesis is that the
5301    first verb that is backtracked onto is the one that acts. This seems to be
5302    the case almost all the time, but there is one exception that is perhaps a
5303    bug. --/
5304
5305/-- This matches "aaaac"; each PRUNE advances one character until the subject
5306    no longer starts with 5 'a's. --/
5307
5308/aaaaa(*PRUNE)b|a+c/
5309    aaaaaac
5310
5311/-- Putting SKIP in front of PRUNE makes no difference, as it is never
5312backtracked onto, whether or not it has a label. --/
5313
5314/aaaaa(*SKIP)(*PRUNE)b|a+c/
5315    aaaaaac
5316
5317/aaaaa(*SKIP:N)(*PRUNE)b|a+c/
5318    aaaaaac
5319
5320/aaaa(*:N)a(*SKIP:N)(*PRUNE)b|a+c/
5321    aaaaaac
5322
5323/-- Putting THEN in front makes no difference. */
5324
5325/aaaaa(*THEN)(*PRUNE)b|a+c/
5326    aaaaaac
5327
5328/-- However, putting COMMIT in front of the prune changes it to "no match". I
5329    think this is inconsistent and possibly a bug. For the moment, running this
5330    test is moved out of the Perl-compatible file. --/
5331
5332/aaaaa(*COMMIT)(*PRUNE)b|a+c/
5333
5334
5335/---- OK, lets play the same game again using SKIP instead of PRUNE. ----/
5336
5337/-- This matches "ac" because SKIP forces the next match to start on the
5338    sixth "a". --/
5339
5340/aaaaa(*SKIP)b|a+c/
5341    aaaaaac
5342
5343/-- Putting PRUNE in front makes no difference. --/
5344
5345/aaaaa(*PRUNE)(*SKIP)b|a+c/
5346    aaaaaac
5347
5348/-- Putting THEN in front makes no difference. --/
5349
5350/aaaaa(*THEN)(*SKIP)b|a+c/
5351    aaaaaac
5352
5353/-- In this case, neither does COMMIT. This still matches "ac". --/
5354
5355/aaaaa(*COMMIT)(*SKIP)b|a+c/
5356    aaaaaac
5357
5358/-- This gives "no match", as expected. --/
5359
5360/aaaaa(*COMMIT)b|a+c/
5361    aaaaaac
5362
5363
5364/------ Tests using THEN ------/
5365
5366/-- This matches "aaaaaac", as expected. --/
5367
5368/aaaaa(*THEN)b|a+c/
5369    aaaaaac
5370
5371/-- Putting SKIP in front makes no difference. --/
5372
5373/aaaaa(*SKIP)(*THEN)b|a+c/
5374    aaaaaac
5375
5376/-- Putting PRUNE in front makes no difference. --/
5377
5378/aaaaa(*PRUNE)(*THEN)b|a+c/
5379    aaaaaac
5380
5381/-- Putting COMMIT in front makes no difference. --/
5382
5383/aaaaa(*COMMIT)(*THEN)b|a+c/
5384    aaaaaac
5385
5386/-- End of "priority" tests --/
5387
5388/aaaaa(*:m)(*PRUNE:m)(*SKIP:m)m|a+/
5389    aaaaaa
5390
5391/aaaaa(*:m)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/
5392    aaaaaa
5393
5394/aaaaa(*:n)(*PRUNE:m)(*SKIP:m)m|a+/
5395    aaaaaa
5396
5397/aaaaa(*:n)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/
5398    aaaaaa
5399
5400/a(*MARK:A)aa(*PRUNE:A)a(*SKIP:A)b|a+c/
5401    aaaac
5402
5403/a(*MARK:A)aa(*MARK:A)a(*SKIP:A)b|a+c/
5404    aaaac
5405
5406/aaa(*PRUNE:A)a(*SKIP:A)b|a+c/
5407    aaaac
5408
5409/aaa(*MARK:A)a(*SKIP:A)b|a+c/
5410    aaaac
5411
5412/a(*:m)a(*COMMIT)(*SKIP:m)b|a+c/K
5413    aaaaaac
5414
5415/.?(a|b(*THEN)c)/
5416    ba
5417
5418/(a(*COMMIT)b)c|abd/
5419    abc
5420    abd
5421
5422/(?=a(*COMMIT)b)abc|abd/
5423    abc
5424    abd
5425
5426/(?>a(*COMMIT)b)c|abd/
5427    abc
5428    abd
5429
5430/a(?=b(*COMMIT)c)[^d]|abd/
5431    abd
5432    abc
5433
5434/a(?=bc).|abd/
5435    abd
5436    abc
5437
5438/a(?>b(*COMMIT)c)d|abd/
5439    abceabd
5440
5441/a(?>bc)d|abd/
5442    abceabd
5443
5444/(?>a(*COMMIT)b)c|abd/
5445    abd
5446
5447/(?>a(*COMMIT)c)d|abd/
5448    abd
5449
5450/((?=a(*COMMIT)b)ab|ac){0}(?:(?1)|a(c))/
5451    ac
5452
5453/-- These tests were formerly in test 2, but changes in PCRE and Perl have
5454    made them compatible. --/
5455
5456/^(a)?(?(1)a|b)+$/
5457    *** Failers
5458    a
5459
5460/(?=a\Kb)ab/
5461    ab
5462
5463/(?!a\Kb)ac/
5464    ac
5465
5466/^abc(?<=b\Kc)d/
5467    abcd
5468
5469/^abc(?<!b\Kq)d/
5470    abcd
5471
5472
5473/A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC/xK
5474    AAAC
5475
5476/^((abc|abcx)(*THEN)y|abcd)/
5477    abcd
5478    *** Failers
5479    abcxy
5480
5481/^((yes|no)(*THEN)(*F))?/
5482  yes
5483
5484/(A (.*)   C? (*THEN)  | A D) (*FAIL)/x
5485AbcdCBefgBhiBqz
5486
5487/(A (.*)   C? (*THEN)  | A D) z/x
5488AbcdCBefgBhiBqz
5489
5490/(A (.*)   C? (*THEN)  | A D) \s* (*FAIL)/x
5491AbcdCBefgBhiBqz
5492
5493/(A (.*)   C? (*THEN)  | A D) \s* z/x
5494AbcdCBefgBhiBqz
5495
5496/(A (.*)   (?:C|) (*THEN)  | A D) (*FAIL)/x
5497AbcdCBefgBhiBqz
5498
5499/(A (.*)   (?:C|) (*THEN)  | A D) z/x
5500AbcdCBefgBhiBqz
5501
5502/(A (.*)   C{0,6} (*THEN)  | A D) (*FAIL)/x
5503AbcdCBefgBhiBqz
5504
5505/(A (.*)   C{0,6} (*THEN)  | A D) z/x
5506AbcdCBefgBhiBqz
5507
5508/(A (.*)   (CE){0,6} (*THEN)  | A D) (*FAIL)/x
5509AbcdCEBefgBhiBqz
5510
5511/(A (.*)   (CE){0,6} (*THEN)  | A D) z/x
5512AbcdCEBefgBhiBqz
5513
5514/(A (.*)   (CE*){0,6} (*THEN)  | A D) (*FAIL)/x
5515AbcdCBefgBhiBqz
5516
5517/(A (.*)   (CE*){0,6} (*THEN)  | A D) z/x
5518AbcdCBefgBhiBqz
5519
5520/(?=a(*COMMIT)b|ac)ac|ac/
5521    ac
5522
5523/(?=a(*COMMIT)b|(ac)) ac | (a)c/x
5524    ac
5525
5526/--------/
5527
5528/(?(?!b(*THEN)a)bn|bnn)/
5529   bnn
5530
5531/(?!b(*SKIP)a)bn|bnn/
5532    bnn
5533
5534/(?(?!b(*SKIP)a)bn|bnn)/
5535   bnn
5536
5537/(?!b(*PRUNE)a)bn|bnn/
5538    bnn
5539
5540/(?(?!b(*PRUNE)a)bn|bnn)/
5541   bnn
5542
5543/(?!b(*COMMIT)a)bn|bnn/
5544    bnn
5545
5546/(?(?!b(*COMMIT)a)bn|bnn)/
5547   bnn
5548
5549/(?=b(*SKIP)a)bn|bnn/
5550    bnn
5551
5552/(?=b(*THEN)a)bn|bnn/
5553    bnn
5554
5555 /^(?!a(*SKIP)b)/
5556     ac
5557
5558 /^(?!a(*SKIP)b)../
5559     acd
5560
5561/(?!a(*SKIP)b)../
5562     acd
5563
5564/^(?(?!a(*SKIP)b))/
5565     ac
5566
5567/^(?!a(*PRUNE)b)../
5568     acd
5569
5570/(?!a(*PRUNE)b)../
5571     acd
5572
5573 /(?!a(*COMMIT)b)ac|cd/
5574     ac
5575
5576/\A.*?(?:a|bc)/
5577    ba
5578
5579/^(A(*THEN)B|C(*THEN)D)/
5580    CD
5581
5582/(*:m(m)(?&y)(?(DEFINE)(?<y>b))/K
5583    abc
5584
5585/(*PRUNE:m(m)(?&y)(?(DEFINE)(?<y>b))/K
5586    abc
5587
5588/(*SKIP:m(m)(?&y)(?(DEFINE)(?<y>b))/K
5589    abc
5590
5591/(*THEN:m(m)(?&y)(?(DEFINE)(?<y>b))/K
5592    abc
5593
5594/^\d*\w{4}/
5595    1234
5596    123
5597
5598/^[^b]*\w{4}/
5599    aaaa
5600    aaa
5601
5602/^[^b]*\w{4}/i
5603    aaaa
5604    aaa
5605
5606/^a*\w{4}/
5607    aaaa
5608    aaa
5609
5610/^a*\w{4}/i
5611    aaaa
5612    aaa
5613
5614/(?(?=ab)ab)/+
5615    ca
5616    cd
5617
5618/(?:(?<n>foo)|(?<n>bar))\k<n>/J
5619    foofoo
5620    barbar
5621
5622/(?<n>A)(?:(?<n>foo)|(?<n>bar))\k<n>/J
5623    AfooA
5624    AbarA
5625    ** Failers
5626    Afoofoo
5627    Abarbar
5628
5629/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
5630    1 IN SOA non-sp1 non-sp2(
5631
5632/^ (?:(?<A>A)|(?'B'B)(?<A>A)) (?('A')x) (?(<B>)y)$/xJ
5633    Ax
5634    BAxy
5635
5636/^A\xZ/
5637    A\0Z
5638
5639/^A\o{123}B/
5640    A\123B
5641
5642/ ^ a + + b $ /x
5643    aaaab
5644
5645/ ^ a + #comment
5646  + b $ /x
5647    aaaab
5648
5649/ ^ a + #comment
5650  #comment
5651  + b $ /x
5652    aaaab
5653
5654/ ^ (?> a + ) b $ /x
5655    aaaab
5656
5657/ ^ ( a + ) + + \w $ /x
5658    aaaab
5659
5660/(?:a\Kb)*+/+
5661    ababc
5662
5663/(?>a\Kb)*/+
5664    ababc
5665
5666/(?:a\Kb)*/+
5667    ababc
5668
5669/(a\Kb)*+/+
5670    ababc
5671
5672/(a\Kb)*/+
5673    ababc
5674
5675/(?:x|(?:(xx|yy)+|x|x|x|x|x)|a|a|a)bc/
5676    acb
5677
5678'\A(?:[^\"]++|\"(?:[^\"]*+|\"\")*+\")++'
5679    NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
5680
5681'\A(?:[^\"]++|\"(?:[^\"]++|\"\")*+\")++'
5682    NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
5683
5684'\A(?:[^\"]++|\"(?:[^\"]++|\"\")++\")++'
5685    NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
5686
5687'\A([^\"1]++|[\"2]([^\"3]*+|[\"4][\"5])*+[\"6])++'
5688    NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
5689
5690/^\w+(?>\s*)(?<=\w)/
5691  test test
5692
5693/(?P<same>a)(?P<same>b)/gJ
5694    abbaba
5695
5696/(?P<same>a)(?P<same>b)(?P=same)/gJ
5697    abbaba
5698
5699/(?P=same)?(?P<same>a)(?P<same>b)/gJ
5700    abbaba
5701
5702/(?:(?P=same)?(?:(?P<same>a)|(?P<same>b))(?P=same))+/gJ
5703    bbbaaabaabb
5704
5705/(?:(?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)?/gJ
5706    bbbaaaccccaaabbbcc
5707
5708/(?P<Name>a)?(?P<Name2>b)?(?(<Name>)c|d)*l/
5709    acl
5710    bdl
5711    adl
5712    bcl
5713
5714/\sabc/
5715    \x{0b}abc
5716
5717/[\Qa]\E]+/
5718    aa]]
5719
5720/[\Q]a\E]+/
5721    aa]]
5722
5723/(?:((abcd))|(((?:(?:(?:(?:abc|(?:abcdef))))b)abcdefghi)abc)|((*ACCEPT)))/
5724    1234abcd
5725
5726/(\2)(\1)/
5727
5728"Z*(|d*){216}"
5729
5730"(?1)(?#?'){8}(a)"
5731    baaaaaaaaac
5732
5733"(?|(\k'Pm')|(?'Pm'))"
5734    abcd
5735
5736/-- End of testinput1 --/
5737