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