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