Annotation of embedaddon/php/ext/pcre/pcrelib/testdata/testoutput1, revision 1.1.1.2
1.1 misho 1: /-- This set of tests is for features that are compatible with all versions of
1.1.1.2 ! misho 2: Perl >= 5.10, in non-UTF-8 mode. It should run clean for both the 8-bit and
! 3: 16-bit PCRE libraries. --/
1.1 misho 4:
5: /the quick brown fox/
6: the quick brown fox
7: 0: the quick brown fox
8: The quick brown FOX
9: No match
10: What do you know about the quick brown fox?
11: 0: the quick brown fox
12: What do you know about THE QUICK BROWN FOX?
13: No match
14:
15: /The quick brown fox/i
16: the quick brown fox
17: 0: the quick brown fox
18: The quick brown FOX
19: 0: The quick brown FOX
20: What do you know about the quick brown fox?
21: 0: the quick brown fox
22: What do you know about THE QUICK BROWN FOX?
23: 0: THE QUICK BROWN FOX
24:
25: /abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
26: abcd\t\n\r\f\a\e9;\$\\?caxyz
27: 0: abcd\x09\x0a\x0d\x0c\x07\x1b9;$\?caxyz
28:
29: /a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
30: abxyzpqrrrabbxyyyypqAzz
31: 0: abxyzpqrrrabbxyyyypqAzz
32: abxyzpqrrrabbxyyyypqAzz
33: 0: abxyzpqrrrabbxyyyypqAzz
34: aabxyzpqrrrabbxyyyypqAzz
35: 0: aabxyzpqrrrabbxyyyypqAzz
36: aaabxyzpqrrrabbxyyyypqAzz
37: 0: aaabxyzpqrrrabbxyyyypqAzz
38: aaaabxyzpqrrrabbxyyyypqAzz
39: 0: aaaabxyzpqrrrabbxyyyypqAzz
40: abcxyzpqrrrabbxyyyypqAzz
41: 0: abcxyzpqrrrabbxyyyypqAzz
42: aabcxyzpqrrrabbxyyyypqAzz
43: 0: aabcxyzpqrrrabbxyyyypqAzz
44: aaabcxyzpqrrrabbxyyyypAzz
45: 0: aaabcxyzpqrrrabbxyyyypAzz
46: aaabcxyzpqrrrabbxyyyypqAzz
47: 0: aaabcxyzpqrrrabbxyyyypqAzz
48: aaabcxyzpqrrrabbxyyyypqqAzz
49: 0: aaabcxyzpqrrrabbxyyyypqqAzz
50: aaabcxyzpqrrrabbxyyyypqqqAzz
51: 0: aaabcxyzpqrrrabbxyyyypqqqAzz
52: aaabcxyzpqrrrabbxyyyypqqqqAzz
53: 0: aaabcxyzpqrrrabbxyyyypqqqqAzz
54: aaabcxyzpqrrrabbxyyyypqqqqqAzz
55: 0: aaabcxyzpqrrrabbxyyyypqqqqqAzz
56: aaabcxyzpqrrrabbxyyyypqqqqqqAzz
57: 0: aaabcxyzpqrrrabbxyyyypqqqqqqAzz
58: aaaabcxyzpqrrrabbxyyyypqAzz
59: 0: aaaabcxyzpqrrrabbxyyyypqAzz
60: abxyzzpqrrrabbxyyyypqAzz
61: 0: abxyzzpqrrrabbxyyyypqAzz
62: aabxyzzzpqrrrabbxyyyypqAzz
63: 0: aabxyzzzpqrrrabbxyyyypqAzz
64: aaabxyzzzzpqrrrabbxyyyypqAzz
65: 0: aaabxyzzzzpqrrrabbxyyyypqAzz
66: aaaabxyzzzzpqrrrabbxyyyypqAzz
67: 0: aaaabxyzzzzpqrrrabbxyyyypqAzz
68: abcxyzzpqrrrabbxyyyypqAzz
69: 0: abcxyzzpqrrrabbxyyyypqAzz
70: aabcxyzzzpqrrrabbxyyyypqAzz
71: 0: aabcxyzzzpqrrrabbxyyyypqAzz
72: aaabcxyzzzzpqrrrabbxyyyypqAzz
73: 0: aaabcxyzzzzpqrrrabbxyyyypqAzz
74: aaaabcxyzzzzpqrrrabbxyyyypqAzz
75: 0: aaaabcxyzzzzpqrrrabbxyyyypqAzz
76: aaaabcxyzzzzpqrrrabbbxyyyypqAzz
77: 0: aaaabcxyzzzzpqrrrabbbxyyyypqAzz
78: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
79: 0: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
80: aaabcxyzpqrrrabbxyyyypABzz
81: 0: aaabcxyzpqrrrabbxyyyypABzz
82: aaabcxyzpqrrrabbxyyyypABBzz
83: 0: aaabcxyzpqrrrabbxyyyypABBzz
84: >>>aaabxyzpqrrrabbxyyyypqAzz
85: 0: aaabxyzpqrrrabbxyyyypqAzz
86: >aaaabxyzpqrrrabbxyyyypqAzz
87: 0: aaaabxyzpqrrrabbxyyyypqAzz
88: >>>>abcxyzpqrrrabbxyyyypqAzz
89: 0: abcxyzpqrrrabbxyyyypqAzz
90: *** Failers
91: No match
92: abxyzpqrrabbxyyyypqAzz
93: No match
94: abxyzpqrrrrabbxyyyypqAzz
95: No match
96: abxyzpqrrrabxyyyypqAzz
97: No match
98: aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
99: No match
100: aaaabcxyzzzzpqrrrabbbxyyypqAzz
101: No match
102: aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
103: No match
104:
105: /^(abc){1,2}zz/
106: abczz
107: 0: abczz
108: 1: abc
109: abcabczz
110: 0: abcabczz
111: 1: abc
112: *** Failers
113: No match
114: zz
115: No match
116: abcabcabczz
117: No match
118: >>abczz
119: No match
120:
121: /^(b+?|a){1,2}?c/
122: bc
123: 0: bc
124: 1: b
125: bbc
126: 0: bbc
127: 1: b
128: bbbc
129: 0: bbbc
130: 1: bb
131: bac
132: 0: bac
133: 1: a
134: bbac
135: 0: bbac
136: 1: a
137: aac
138: 0: aac
139: 1: a
140: abbbbbbbbbbbc
141: 0: abbbbbbbbbbbc
142: 1: bbbbbbbbbbb
143: bbbbbbbbbbbac
144: 0: bbbbbbbbbbbac
145: 1: a
146: *** Failers
147: No match
148: aaac
149: No match
150: abbbbbbbbbbbac
151: No match
152:
153: /^(b+|a){1,2}c/
154: bc
155: 0: bc
156: 1: b
157: bbc
158: 0: bbc
159: 1: bb
160: bbbc
161: 0: bbbc
162: 1: bbb
163: bac
164: 0: bac
165: 1: a
166: bbac
167: 0: bbac
168: 1: a
169: aac
170: 0: aac
171: 1: a
172: abbbbbbbbbbbc
173: 0: abbbbbbbbbbbc
174: 1: bbbbbbbbbbb
175: bbbbbbbbbbbac
176: 0: bbbbbbbbbbbac
177: 1: a
178: *** Failers
179: No match
180: aaac
181: No match
182: abbbbbbbbbbbac
183: No match
184:
185: /^(b+|a){1,2}?bc/
186: bbc
187: 0: bbc
188: 1: b
189:
190: /^(b*|ba){1,2}?bc/
191: babc
192: 0: babc
193: 1: ba
194: bbabc
195: 0: bbabc
196: 1: ba
197: bababc
198: 0: bababc
199: 1: ba
200: *** Failers
201: No match
202: bababbc
203: No match
204: babababc
205: No match
206:
207: /^(ba|b*){1,2}?bc/
208: babc
209: 0: babc
210: 1: ba
211: bbabc
212: 0: bbabc
213: 1: ba
214: bababc
215: 0: bababc
216: 1: ba
217: *** Failers
218: No match
219: bababbc
220: No match
221: babababc
222: No match
223:
224: /^\ca\cA\c[\c{\c:/
225: \x01\x01\e;z
226: 0: \x01\x01\x1b;z
227:
228: /^[ab\]cde]/
229: athing
230: 0: a
231: bthing
232: 0: b
233: ]thing
234: 0: ]
235: cthing
236: 0: c
237: dthing
238: 0: d
239: ething
240: 0: e
241: *** Failers
242: No match
243: fthing
244: No match
245: [thing
246: No match
247: \\thing
248: No match
249:
250: /^[]cde]/
251: ]thing
252: 0: ]
253: cthing
254: 0: c
255: dthing
256: 0: d
257: ething
258: 0: e
259: *** Failers
260: No match
261: athing
262: No match
263: fthing
264: No match
265:
266: /^[^ab\]cde]/
267: fthing
268: 0: f
269: [thing
270: 0: [
271: \\thing
272: 0: \
273: *** Failers
274: 0: *
275: athing
276: No match
277: bthing
278: No match
279: ]thing
280: No match
281: cthing
282: No match
283: dthing
284: No match
285: ething
286: No match
287:
288: /^[^]cde]/
289: athing
290: 0: a
291: fthing
292: 0: f
293: *** Failers
294: 0: *
295: ]thing
296: No match
297: cthing
298: No match
299: dthing
300: No match
301: ething
302: No match
303:
304: /^\/
305:
306: 0: \x81
307:
308: /^/
309:
310: 0: \xff
311:
312: /^[0-9]+$/
313: 0
314: 0: 0
315: 1
316: 0: 1
317: 2
318: 0: 2
319: 3
320: 0: 3
321: 4
322: 0: 4
323: 5
324: 0: 5
325: 6
326: 0: 6
327: 7
328: 0: 7
329: 8
330: 0: 8
331: 9
332: 0: 9
333: 10
334: 0: 10
335: 100
336: 0: 100
337: *** Failers
338: No match
339: abc
340: No match
341:
342: /^.*nter/
343: enter
344: 0: enter
345: inter
346: 0: inter
347: uponter
348: 0: uponter
349:
350: /^xxx[0-9]+$/
351: xxx0
352: 0: xxx0
353: xxx1234
354: 0: xxx1234
355: *** Failers
356: No match
357: xxx
358: No match
359:
360: /^.+[0-9][0-9][0-9]$/
361: x123
362: 0: x123
363: xx123
364: 0: xx123
365: 123456
366: 0: 123456
367: *** Failers
368: No match
369: 123
370: No match
371: x1234
372: 0: x1234
373:
374: /^.+?[0-9][0-9][0-9]$/
375: x123
376: 0: x123
377: xx123
378: 0: xx123
379: 123456
380: 0: 123456
381: *** Failers
382: No match
383: 123
384: No match
385: x1234
386: 0: x1234
387:
388: /^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
389: abc!pqr=apquxz.ixr.zzz.ac.uk
390: 0: abc!pqr=apquxz.ixr.zzz.ac.uk
391: 1: abc
392: 2: pqr
393: *** Failers
394: No match
395: !pqr=apquxz.ixr.zzz.ac.uk
396: No match
397: abc!=apquxz.ixr.zzz.ac.uk
398: No match
399: abc!pqr=apquxz:ixr.zzz.ac.uk
400: No match
401: abc!pqr=apquxz.ixr.zzz.ac.ukk
402: No match
403:
404: /:/
405: Well, we need a colon: somewhere
406: 0: :
407: *** Fail if we don't
408: No match
409:
410: /([\da-f:]+)$/i
411: 0abc
412: 0: 0abc
413: 1: 0abc
414: abc
415: 0: abc
416: 1: abc
417: fed
418: 0: fed
419: 1: fed
420: E
421: 0: E
422: 1: E
423: ::
424: 0: ::
425: 1: ::
426: 5f03:12C0::932e
427: 0: 5f03:12C0::932e
428: 1: 5f03:12C0::932e
429: fed def
430: 0: def
431: 1: def
432: Any old stuff
433: 0: ff
434: 1: ff
435: *** Failers
436: No match
437: 0zzz
438: No match
439: gzzz
440: No match
441: fed\x20
442: No match
443: Any old rubbish
444: No match
445:
446: /^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
447: .1.2.3
448: 0: .1.2.3
449: 1: 1
450: 2: 2
451: 3: 3
452: A.12.123.0
453: 0: A.12.123.0
454: 1: 12
455: 2: 123
456: 3: 0
457: *** Failers
458: No match
459: .1.2.3333
460: No match
461: 1.2.3
462: No match
463: 1234.2.3
464: No match
465:
466: /^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
467: 1 IN SOA non-sp1 non-sp2(
468: 0: 1 IN SOA non-sp1 non-sp2(
469: 1: 1
470: 2: non-sp1
471: 3: non-sp2
472: 1 IN SOA non-sp1 non-sp2 (
473: 0: 1 IN SOA non-sp1 non-sp2 (
474: 1: 1
475: 2: non-sp1
476: 3: non-sp2
477: *** Failers
478: No match
479: 1IN SOA non-sp1 non-sp2(
480: No match
481:
482: /^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
483: a.
484: 0: a.
485: Z.
486: 0: Z.
487: 2.
488: 0: 2.
489: ab-c.pq-r.
490: 0: ab-c.pq-r.
491: 1: .pq-r
492: sxk.zzz.ac.uk.
493: 0: sxk.zzz.ac.uk.
494: 1: .uk
495: x-.y-.
496: 0: x-.y-.
497: 1: .y-
498: *** Failers
499: No match
500: -abc.peq.
501: No match
502:
503: /^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
504: *.a
505: 0: *.a
506: *.b0-a
507: 0: *.b0-a
508: 1: 0-a
509: *.c3-b.c
510: 0: *.c3-b.c
511: 1: 3-b
512: 2: .c
513: *.c-a.b-c
514: 0: *.c-a.b-c
515: 1: -a
516: 2: .b-c
517: 3: -c
518: *** Failers
519: No match
520: *.0
521: No match
522: *.a-
523: No match
524: *.a-b.c-
525: No match
526: *.c-a.0-c
527: No match
528:
529: /^(?=ab(de))(abd)(e)/
530: abde
531: 0: abde
532: 1: de
533: 2: abd
534: 3: e
535:
536: /^(?!(ab)de|x)(abd)(f)/
537: abdf
538: 0: abdf
539: 1: <unset>
540: 2: abd
541: 3: f
542:
543: /^(?=(ab(cd)))(ab)/
544: abcd
545: 0: ab
546: 1: abcd
547: 2: cd
548: 3: ab
549:
550: /^[\da-f](\.[\da-f])*$/i
551: a.b.c.d
552: 0: a.b.c.d
553: 1: .d
554: A.B.C.D
555: 0: A.B.C.D
556: 1: .D
557: a.b.c.1.2.3.C
558: 0: a.b.c.1.2.3.C
559: 1: .C
560:
561: /^\".*\"\s*(;.*)?$/
562: \"1234\"
563: 0: "1234"
564: \"abcd\" ;
565: 0: "abcd" ;
566: 1: ;
567: \"\" ; rhubarb
568: 0: "" ; rhubarb
569: 1: ; rhubarb
570: *** Failers
571: No match
572: \"1234\" : things
573: No match
574:
575: /^$/
576: \
577: 0:
578: *** Failers
579: No match
580:
581: / ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/x
582: ab c
583: 0: ab c
584: *** Failers
585: No match
586: abc
587: No match
588: ab cde
589: No match
590:
591: /(?x) ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/
592: ab c
593: 0: ab c
594: *** Failers
595: No match
596: abc
597: No match
598: ab cde
599: No match
600:
601: /^ a\ b[c ]d $/x
602: a bcd
603: 0: a bcd
604: a b d
605: 0: a b d
606: *** Failers
607: No match
608: abcd
609: No match
610: ab d
611: No match
612:
613: /^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
614: abcdefhijklm
615: 0: abcdefhijklm
616: 1: abc
617: 2: bc
618: 3: c
619: 4: def
620: 5: ef
621: 6: f
622: 7: hij
623: 8: ij
624: 9: j
625: 10: klm
626: 11: lm
627: 12: m
628:
629: /^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
630: abcdefhijklm
631: 0: abcdefhijklm
632: 1: bc
633: 2: c
634: 3: ef
635: 4: f
636: 5: ij
637: 6: j
638: 7: lm
639: 8: m
640:
641: /^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
642: a+ Z0+\x08\n\x1d\x12
643: 0: a+ Z0+\x08\x0a\x1d\x12
644:
645: /^[.^$|()*+?{,}]+/
646: .^\$(*+)|{?,?}
647: 0: .^$(*+)|{?,?}
648:
649: /^a*\w/
650: z
651: 0: z
652: az
653: 0: az
654: aaaz
655: 0: aaaz
656: a
657: 0: a
658: aa
659: 0: aa
660: aaaa
661: 0: aaaa
662: a+
663: 0: a
664: aa+
665: 0: aa
666:
667: /^a*?\w/
668: z
669: 0: z
670: az
671: 0: a
672: aaaz
673: 0: a
674: a
675: 0: a
676: aa
677: 0: a
678: aaaa
679: 0: a
680: a+
681: 0: a
682: aa+
683: 0: a
684:
685: /^a+\w/
686: az
687: 0: az
688: aaaz
689: 0: aaaz
690: aa
691: 0: aa
692: aaaa
693: 0: aaaa
694: aa+
695: 0: aa
696:
697: /^a+?\w/
698: az
699: 0: az
700: aaaz
701: 0: aa
702: aa
703: 0: aa
704: aaaa
705: 0: aa
706: aa+
707: 0: aa
708:
709: /^\d{8}\w{2,}/
710: 1234567890
711: 0: 1234567890
712: 12345678ab
713: 0: 12345678ab
714: 12345678__
715: 0: 12345678__
716: *** Failers
717: No match
718: 1234567
719: No match
720:
721: /^[aeiou\d]{4,5}$/
722: uoie
723: 0: uoie
724: 1234
725: 0: 1234
726: 12345
727: 0: 12345
728: aaaaa
729: 0: aaaaa
730: *** Failers
731: No match
732: 123456
733: No match
734:
735: /^[aeiou\d]{4,5}?/
736: uoie
737: 0: uoie
738: 1234
739: 0: 1234
740: 12345
741: 0: 1234
742: aaaaa
743: 0: aaaa
744: 123456
745: 0: 1234
746:
747: /\A(abc|def)=(\1){2,3}\Z/
748: abc=abcabc
749: 0: abc=abcabc
750: 1: abc
751: 2: abc
752: def=defdefdef
753: 0: def=defdefdef
754: 1: def
755: 2: def
756: *** Failers
757: No match
758: abc=defdef
759: No match
760:
761: /^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
762: abcdefghijkcda2
763: 0: abcdefghijkcda2
764: 1: a
765: 2: b
766: 3: c
767: 4: d
768: 5: e
769: 6: f
770: 7: g
771: 8: h
772: 9: i
773: 10: j
774: 11: k
775: 12: cd
776: abcdefghijkkkkcda2
777: 0: abcdefghijkkkkcda2
778: 1: a
779: 2: b
780: 3: c
781: 4: d
782: 5: e
783: 6: f
784: 7: g
785: 8: h
786: 9: i
787: 10: j
788: 11: k
789: 12: cd
790:
791: /(cat(a(ract|tonic)|erpillar)) \1()2(3)/
792: cataract cataract23
793: 0: cataract cataract23
794: 1: cataract
795: 2: aract
796: 3: ract
797: 4:
798: 5: 3
799: catatonic catatonic23
800: 0: catatonic catatonic23
801: 1: catatonic
802: 2: atonic
803: 3: tonic
804: 4:
805: 5: 3
806: caterpillar caterpillar23
807: 0: caterpillar caterpillar23
808: 1: caterpillar
809: 2: erpillar
810: 3: <unset>
811: 4:
812: 5: 3
813:
814:
815: /^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]/
816: From abcd Mon Sep 01 12:33:02 1997
817: 0: From abcd Mon Sep 01 12:33
818: 1: abcd
819:
820: /^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
821: From abcd Mon Sep 01 12:33:02 1997
822: 0: From abcd Mon Sep 01 12:33
823: 1: Sep
824: From abcd Mon Sep 1 12:33:02 1997
825: 0: From abcd Mon Sep 1 12:33
826: 1: Sep
827: *** Failers
828: No match
829: From abcd Sep 01 12:33:02 1997
830: No match
831:
832: /^12.34/s
833: 12\n34
834: 0: 12\x0a34
835: 12\r34
836: 0: 12\x0d34
837:
838: /\w+(?=\t)/
839: the quick brown\t fox
840: 0: brown
841:
842: /foo(?!bar)(.*)/
843: foobar is foolish see?
844: 0: foolish see?
845: 1: lish see?
846:
847: /(?:(?!foo)...|^.{0,2})bar(.*)/
848: foobar crowbar etc
849: 0: rowbar etc
850: 1: etc
851: barrel
852: 0: barrel
853: 1: rel
854: 2barrel
855: 0: 2barrel
856: 1: rel
857: A barrel
858: 0: A barrel
859: 1: rel
860:
861: /^(\D*)(?=\d)(?!123)/
862: abc456
863: 0: abc
864: 1: abc
865: *** Failers
866: No match
867: abc123
868: No match
869:
870: /^1234(?# test newlines
871: inside)/
872: 1234
873: 0: 1234
874:
875: /^1234 #comment in extended re
876: /x
877: 1234
878: 0: 1234
879:
880: /#rhubarb
881: abcd/x
882: abcd
883: 0: abcd
884:
885: /^abcd#rhubarb/x
886: abcd
887: 0: abcd
888:
889: /^(a)\1{2,3}(.)/
890: aaab
891: 0: aaab
892: 1: a
893: 2: b
894: aaaab
895: 0: aaaab
896: 1: a
897: 2: b
898: aaaaab
899: 0: aaaaa
900: 1: a
901: 2: a
902: aaaaaab
903: 0: aaaaa
904: 1: a
905: 2: a
906:
907: /(?!^)abc/
908: the abc
909: 0: abc
910: *** Failers
911: No match
912: abc
913: No match
914:
915: /(?=^)abc/
916: abc
917: 0: abc
918: *** Failers
919: No match
920: the abc
921: No match
922:
923: /^[ab]{1,3}(ab*|b)/
924: aabbbbb
925: 0: aabb
926: 1: b
927:
928: /^[ab]{1,3}?(ab*|b)/
929: aabbbbb
930: 0: aabbbbb
931: 1: abbbbb
932:
933: /^[ab]{1,3}?(ab*?|b)/
934: aabbbbb
935: 0: aa
936: 1: a
937:
938: /^[ab]{1,3}(ab*?|b)/
939: aabbbbb
940: 0: aabb
941: 1: b
942:
943: / (?: [\040\t] | \(
944: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
945: \) )* # optional leading comment
946: (?: (?:
947: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
948: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
949: |
950: " (?: # opening quote...
951: [^\\\x80-\xff\n\015"] # Anything except backslash and quote
952: | # or
953: \\ [^\x80-\xff] # Escaped something (something != CR)
954: )* " # closing quote
955: ) # initial word
956: (?: (?: [\040\t] | \(
957: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
958: \) )* \. (?: [\040\t] | \(
959: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
960: \) )* (?:
961: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
962: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
963: |
964: " (?: # opening quote...
965: [^\\\x80-\xff\n\015"] # Anything except backslash and quote
966: | # or
967: \\ [^\x80-\xff] # Escaped something (something != CR)
968: )* " # closing quote
969: ) )* # further okay, if led by a period
970: (?: [\040\t] | \(
971: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
972: \) )* @ (?: [\040\t] | \(
973: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
974: \) )* (?:
975: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
976: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
977: | \[ # [
978: (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
979: \] # ]
980: ) # initial subdomain
981: (?: #
982: (?: [\040\t] | \(
983: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
984: \) )* \. # if led by a period...
985: (?: [\040\t] | \(
986: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
987: \) )* (?:
988: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
989: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
990: | \[ # [
991: (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
992: \] # ]
993: ) # ...further okay
994: )*
995: # address
996: | # or
997: (?:
998: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
999: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1000: |
1001: " (?: # opening quote...
1002: [^\\\x80-\xff\n\015"] # Anything except backslash and quote
1003: | # or
1004: \\ [^\x80-\xff] # Escaped something (something != CR)
1005: )* " # closing quote
1006: ) # one word, optionally followed by....
1007: (?:
1008: [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] | # atom and space parts, or...
1009: \(
1010: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1011: \) | # comments, or...
1012:
1013: " (?: # opening quote...
1014: [^\\\x80-\xff\n\015"] # Anything except backslash and quote
1015: | # or
1016: \\ [^\x80-\xff] # Escaped something (something != CR)
1017: )* " # closing quote
1018: # quoted strings
1019: )*
1020: < (?: [\040\t] | \(
1021: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1022: \) )* # leading <
1023: (?: @ (?: [\040\t] | \(
1024: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1025: \) )* (?:
1026: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1027: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1028: | \[ # [
1029: (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1030: \] # ]
1031: ) # initial subdomain
1032: (?: #
1033: (?: [\040\t] | \(
1034: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1035: \) )* \. # if led by a period...
1036: (?: [\040\t] | \(
1037: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1038: \) )* (?:
1039: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1040: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1041: | \[ # [
1042: (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1043: \] # ]
1044: ) # ...further okay
1045: )*
1046:
1047: (?: (?: [\040\t] | \(
1048: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1049: \) )* , (?: [\040\t] | \(
1050: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1051: \) )* @ (?: [\040\t] | \(
1052: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1053: \) )* (?:
1054: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1055: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1056: | \[ # [
1057: (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1058: \] # ]
1059: ) # initial subdomain
1060: (?: #
1061: (?: [\040\t] | \(
1062: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1063: \) )* \. # if led by a period...
1064: (?: [\040\t] | \(
1065: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1066: \) )* (?:
1067: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1068: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1069: | \[ # [
1070: (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1071: \] # ]
1072: ) # ...further okay
1073: )*
1074: )* # further okay, if led by comma
1075: : # closing colon
1076: (?: [\040\t] | \(
1077: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1078: \) )* )? # optional route
1079: (?:
1080: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1081: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1082: |
1083: " (?: # opening quote...
1084: [^\\\x80-\xff\n\015"] # Anything except backslash and quote
1085: | # or
1086: \\ [^\x80-\xff] # Escaped something (something != CR)
1087: )* " # closing quote
1088: ) # initial word
1089: (?: (?: [\040\t] | \(
1090: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1091: \) )* \. (?: [\040\t] | \(
1092: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1093: \) )* (?:
1094: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1095: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1096: |
1097: " (?: # opening quote...
1098: [^\\\x80-\xff\n\015"] # Anything except backslash and quote
1099: | # or
1100: \\ [^\x80-\xff] # Escaped something (something != CR)
1101: )* " # closing quote
1102: ) )* # further okay, if led by a period
1103: (?: [\040\t] | \(
1104: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1105: \) )* @ (?: [\040\t] | \(
1106: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1107: \) )* (?:
1108: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1109: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1110: | \[ # [
1111: (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1112: \] # ]
1113: ) # initial subdomain
1114: (?: #
1115: (?: [\040\t] | \(
1116: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1117: \) )* \. # if led by a period...
1118: (?: [\040\t] | \(
1119: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1120: \) )* (?:
1121: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1122: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1123: | \[ # [
1124: (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1125: \] # ]
1126: ) # ...further okay
1127: )*
1128: # address spec
1129: (?: [\040\t] | \(
1130: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1131: \) )* > # trailing >
1132: # name and address
1133: ) (?: [\040\t] | \(
1134: (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1135: \) )* # optional trailing comment
1136: /x
1137: Alan Other <user\@dom.ain>
1138: 0: Alan Other <user@dom.ain>
1139: <user\@dom.ain>
1140: 0: user@dom.ain
1141: user\@dom.ain
1142: 0: user@dom.ain
1143: \"A. Other\" <user.1234\@dom.ain> (a comment)
1144: 0: "A. Other" <user.1234@dom.ain> (a comment)
1145: A. Other <user.1234\@dom.ain> (a comment)
1146: 0: Other <user.1234@dom.ain> (a comment)
1147: \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
1148: 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
1149: A missing angle <user\@some.where
1150: 0: user@some.where
1151: *** Failers
1152: No match
1153: The quick brown fox
1154: No match
1155:
1156: /[\040\t]* # Nab whitespace.
1157: (?:
1158: \( # (
1159: [^\\\x80-\xff\n\015()] * # normal*
1160: (?: # (
1161: (?: \\ [^\x80-\xff] |
1162: \( # (
1163: [^\\\x80-\xff\n\015()] * # normal*
1164: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1165: \) # )
1166: ) # special
1167: [^\\\x80-\xff\n\015()] * # normal*
1168: )* # )*
1169: \) # )
1170: [\040\t]* )* # If comment found, allow more spaces.
1171: # optional leading comment
1172: (?:
1173: (?:
1174: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1175: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1176: # Atom
1177: | # or
1178: " # "
1179: [^\\\x80-\xff\n\015"] * # normal
1180: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1181: " # "
1182: # Quoted string
1183: )
1184: [\040\t]* # Nab whitespace.
1185: (?:
1186: \( # (
1187: [^\\\x80-\xff\n\015()] * # normal*
1188: (?: # (
1189: (?: \\ [^\x80-\xff] |
1190: \( # (
1191: [^\\\x80-\xff\n\015()] * # normal*
1192: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1193: \) # )
1194: ) # special
1195: [^\\\x80-\xff\n\015()] * # normal*
1196: )* # )*
1197: \) # )
1198: [\040\t]* )* # If comment found, allow more spaces.
1199: (?:
1200: \.
1201: [\040\t]* # Nab whitespace.
1202: (?:
1203: \( # (
1204: [^\\\x80-\xff\n\015()] * # normal*
1205: (?: # (
1206: (?: \\ [^\x80-\xff] |
1207: \( # (
1208: [^\\\x80-\xff\n\015()] * # normal*
1209: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1210: \) # )
1211: ) # special
1212: [^\\\x80-\xff\n\015()] * # normal*
1213: )* # )*
1214: \) # )
1215: [\040\t]* )* # If comment found, allow more spaces.
1216: (?:
1217: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1218: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1219: # Atom
1220: | # or
1221: " # "
1222: [^\\\x80-\xff\n\015"] * # normal
1223: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1224: " # "
1225: # Quoted string
1226: )
1227: [\040\t]* # Nab whitespace.
1228: (?:
1229: \( # (
1230: [^\\\x80-\xff\n\015()] * # normal*
1231: (?: # (
1232: (?: \\ [^\x80-\xff] |
1233: \( # (
1234: [^\\\x80-\xff\n\015()] * # normal*
1235: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1236: \) # )
1237: ) # special
1238: [^\\\x80-\xff\n\015()] * # normal*
1239: )* # )*
1240: \) # )
1241: [\040\t]* )* # If comment found, allow more spaces.
1242: # additional words
1243: )*
1244: @
1245: [\040\t]* # Nab whitespace.
1246: (?:
1247: \( # (
1248: [^\\\x80-\xff\n\015()] * # normal*
1249: (?: # (
1250: (?: \\ [^\x80-\xff] |
1251: \( # (
1252: [^\\\x80-\xff\n\015()] * # normal*
1253: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1254: \) # )
1255: ) # special
1256: [^\\\x80-\xff\n\015()] * # normal*
1257: )* # )*
1258: \) # )
1259: [\040\t]* )* # If comment found, allow more spaces.
1260: (?:
1261: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1262: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1263: |
1264: \[ # [
1265: (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1266: \] # ]
1267: )
1268: [\040\t]* # Nab whitespace.
1269: (?:
1270: \( # (
1271: [^\\\x80-\xff\n\015()] * # normal*
1272: (?: # (
1273: (?: \\ [^\x80-\xff] |
1274: \( # (
1275: [^\\\x80-\xff\n\015()] * # normal*
1276: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1277: \) # )
1278: ) # special
1279: [^\\\x80-\xff\n\015()] * # normal*
1280: )* # )*
1281: \) # )
1282: [\040\t]* )* # If comment found, allow more spaces.
1283: # optional trailing comments
1284: (?:
1285: \.
1286: [\040\t]* # Nab whitespace.
1287: (?:
1288: \( # (
1289: [^\\\x80-\xff\n\015()] * # normal*
1290: (?: # (
1291: (?: \\ [^\x80-\xff] |
1292: \( # (
1293: [^\\\x80-\xff\n\015()] * # normal*
1294: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1295: \) # )
1296: ) # special
1297: [^\\\x80-\xff\n\015()] * # normal*
1298: )* # )*
1299: \) # )
1300: [\040\t]* )* # If comment found, allow more spaces.
1301: (?:
1302: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1303: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1304: |
1305: \[ # [
1306: (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1307: \] # ]
1308: )
1309: [\040\t]* # Nab whitespace.
1310: (?:
1311: \( # (
1312: [^\\\x80-\xff\n\015()] * # normal*
1313: (?: # (
1314: (?: \\ [^\x80-\xff] |
1315: \( # (
1316: [^\\\x80-\xff\n\015()] * # normal*
1317: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1318: \) # )
1319: ) # special
1320: [^\\\x80-\xff\n\015()] * # normal*
1321: )* # )*
1322: \) # )
1323: [\040\t]* )* # If comment found, allow more spaces.
1324: # optional trailing comments
1325: )*
1326: # address
1327: | # or
1328: (?:
1329: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1330: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1331: # Atom
1332: | # or
1333: " # "
1334: [^\\\x80-\xff\n\015"] * # normal
1335: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1336: " # "
1337: # Quoted string
1338: )
1339: # leading word
1340: [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # "normal" atoms and or spaces
1341: (?:
1342: (?:
1343: \( # (
1344: [^\\\x80-\xff\n\015()] * # normal*
1345: (?: # (
1346: (?: \\ [^\x80-\xff] |
1347: \( # (
1348: [^\\\x80-\xff\n\015()] * # normal*
1349: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1350: \) # )
1351: ) # special
1352: [^\\\x80-\xff\n\015()] * # normal*
1353: )* # )*
1354: \) # )
1355: |
1356: " # "
1357: [^\\\x80-\xff\n\015"] * # normal
1358: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1359: " # "
1360: ) # "special" comment or quoted string
1361: [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # more "normal"
1362: )*
1363: <
1364: [\040\t]* # Nab whitespace.
1365: (?:
1366: \( # (
1367: [^\\\x80-\xff\n\015()] * # normal*
1368: (?: # (
1369: (?: \\ [^\x80-\xff] |
1370: \( # (
1371: [^\\\x80-\xff\n\015()] * # normal*
1372: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1373: \) # )
1374: ) # special
1375: [^\\\x80-\xff\n\015()] * # normal*
1376: )* # )*
1377: \) # )
1378: [\040\t]* )* # If comment found, allow more spaces.
1379: # <
1380: (?:
1381: @
1382: [\040\t]* # Nab whitespace.
1383: (?:
1384: \( # (
1385: [^\\\x80-\xff\n\015()] * # normal*
1386: (?: # (
1387: (?: \\ [^\x80-\xff] |
1388: \( # (
1389: [^\\\x80-\xff\n\015()] * # normal*
1390: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1391: \) # )
1392: ) # special
1393: [^\\\x80-\xff\n\015()] * # normal*
1394: )* # )*
1395: \) # )
1396: [\040\t]* )* # If comment found, allow more spaces.
1397: (?:
1398: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1399: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1400: |
1401: \[ # [
1402: (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1403: \] # ]
1404: )
1405: [\040\t]* # Nab whitespace.
1406: (?:
1407: \( # (
1408: [^\\\x80-\xff\n\015()] * # normal*
1409: (?: # (
1410: (?: \\ [^\x80-\xff] |
1411: \( # (
1412: [^\\\x80-\xff\n\015()] * # normal*
1413: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1414: \) # )
1415: ) # special
1416: [^\\\x80-\xff\n\015()] * # normal*
1417: )* # )*
1418: \) # )
1419: [\040\t]* )* # If comment found, allow more spaces.
1420: # optional trailing comments
1421: (?:
1422: \.
1423: [\040\t]* # Nab whitespace.
1424: (?:
1425: \( # (
1426: [^\\\x80-\xff\n\015()] * # normal*
1427: (?: # (
1428: (?: \\ [^\x80-\xff] |
1429: \( # (
1430: [^\\\x80-\xff\n\015()] * # normal*
1431: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1432: \) # )
1433: ) # special
1434: [^\\\x80-\xff\n\015()] * # normal*
1435: )* # )*
1436: \) # )
1437: [\040\t]* )* # If comment found, allow more spaces.
1438: (?:
1439: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1440: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1441: |
1442: \[ # [
1443: (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1444: \] # ]
1445: )
1446: [\040\t]* # Nab whitespace.
1447: (?:
1448: \( # (
1449: [^\\\x80-\xff\n\015()] * # normal*
1450: (?: # (
1451: (?: \\ [^\x80-\xff] |
1452: \( # (
1453: [^\\\x80-\xff\n\015()] * # normal*
1454: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1455: \) # )
1456: ) # special
1457: [^\\\x80-\xff\n\015()] * # normal*
1458: )* # )*
1459: \) # )
1460: [\040\t]* )* # If comment found, allow more spaces.
1461: # optional trailing comments
1462: )*
1463: (?: ,
1464: [\040\t]* # Nab whitespace.
1465: (?:
1466: \( # (
1467: [^\\\x80-\xff\n\015()] * # normal*
1468: (?: # (
1469: (?: \\ [^\x80-\xff] |
1470: \( # (
1471: [^\\\x80-\xff\n\015()] * # normal*
1472: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1473: \) # )
1474: ) # special
1475: [^\\\x80-\xff\n\015()] * # normal*
1476: )* # )*
1477: \) # )
1478: [\040\t]* )* # If comment found, allow more spaces.
1479: @
1480: [\040\t]* # Nab whitespace.
1481: (?:
1482: \( # (
1483: [^\\\x80-\xff\n\015()] * # normal*
1484: (?: # (
1485: (?: \\ [^\x80-\xff] |
1486: \( # (
1487: [^\\\x80-\xff\n\015()] * # normal*
1488: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1489: \) # )
1490: ) # special
1491: [^\\\x80-\xff\n\015()] * # normal*
1492: )* # )*
1493: \) # )
1494: [\040\t]* )* # If comment found, allow more spaces.
1495: (?:
1496: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1497: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1498: |
1499: \[ # [
1500: (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1501: \] # ]
1502: )
1503: [\040\t]* # Nab whitespace.
1504: (?:
1505: \( # (
1506: [^\\\x80-\xff\n\015()] * # normal*
1507: (?: # (
1508: (?: \\ [^\x80-\xff] |
1509: \( # (
1510: [^\\\x80-\xff\n\015()] * # normal*
1511: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1512: \) # )
1513: ) # special
1514: [^\\\x80-\xff\n\015()] * # normal*
1515: )* # )*
1516: \) # )
1517: [\040\t]* )* # If comment found, allow more spaces.
1518: # optional trailing comments
1519: (?:
1520: \.
1521: [\040\t]* # Nab whitespace.
1522: (?:
1523: \( # (
1524: [^\\\x80-\xff\n\015()] * # normal*
1525: (?: # (
1526: (?: \\ [^\x80-\xff] |
1527: \( # (
1528: [^\\\x80-\xff\n\015()] * # normal*
1529: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1530: \) # )
1531: ) # special
1532: [^\\\x80-\xff\n\015()] * # normal*
1533: )* # )*
1534: \) # )
1535: [\040\t]* )* # If comment found, allow more spaces.
1536: (?:
1537: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1538: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1539: |
1540: \[ # [
1541: (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1542: \] # ]
1543: )
1544: [\040\t]* # Nab whitespace.
1545: (?:
1546: \( # (
1547: [^\\\x80-\xff\n\015()] * # normal*
1548: (?: # (
1549: (?: \\ [^\x80-\xff] |
1550: \( # (
1551: [^\\\x80-\xff\n\015()] * # normal*
1552: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1553: \) # )
1554: ) # special
1555: [^\\\x80-\xff\n\015()] * # normal*
1556: )* # )*
1557: \) # )
1558: [\040\t]* )* # If comment found, allow more spaces.
1559: # optional trailing comments
1560: )*
1561: )* # additional domains
1562: :
1563: [\040\t]* # Nab whitespace.
1564: (?:
1565: \( # (
1566: [^\\\x80-\xff\n\015()] * # normal*
1567: (?: # (
1568: (?: \\ [^\x80-\xff] |
1569: \( # (
1570: [^\\\x80-\xff\n\015()] * # normal*
1571: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1572: \) # )
1573: ) # special
1574: [^\\\x80-\xff\n\015()] * # normal*
1575: )* # )*
1576: \) # )
1577: [\040\t]* )* # If comment found, allow more spaces.
1578: # optional trailing comments
1579: )? # optional route
1580: (?:
1581: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1582: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1583: # Atom
1584: | # or
1585: " # "
1586: [^\\\x80-\xff\n\015"] * # normal
1587: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1588: " # "
1589: # Quoted string
1590: )
1591: [\040\t]* # Nab whitespace.
1592: (?:
1593: \( # (
1594: [^\\\x80-\xff\n\015()] * # normal*
1595: (?: # (
1596: (?: \\ [^\x80-\xff] |
1597: \( # (
1598: [^\\\x80-\xff\n\015()] * # normal*
1599: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1600: \) # )
1601: ) # special
1602: [^\\\x80-\xff\n\015()] * # normal*
1603: )* # )*
1604: \) # )
1605: [\040\t]* )* # If comment found, allow more spaces.
1606: (?:
1607: \.
1608: [\040\t]* # Nab whitespace.
1609: (?:
1610: \( # (
1611: [^\\\x80-\xff\n\015()] * # normal*
1612: (?: # (
1613: (?: \\ [^\x80-\xff] |
1614: \( # (
1615: [^\\\x80-\xff\n\015()] * # normal*
1616: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1617: \) # )
1618: ) # special
1619: [^\\\x80-\xff\n\015()] * # normal*
1620: )* # )*
1621: \) # )
1622: [\040\t]* )* # If comment found, allow more spaces.
1623: (?:
1624: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1625: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1626: # Atom
1627: | # or
1628: " # "
1629: [^\\\x80-\xff\n\015"] * # normal
1630: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1631: " # "
1632: # Quoted string
1633: )
1634: [\040\t]* # Nab whitespace.
1635: (?:
1636: \( # (
1637: [^\\\x80-\xff\n\015()] * # normal*
1638: (?: # (
1639: (?: \\ [^\x80-\xff] |
1640: \( # (
1641: [^\\\x80-\xff\n\015()] * # normal*
1642: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1643: \) # )
1644: ) # special
1645: [^\\\x80-\xff\n\015()] * # normal*
1646: )* # )*
1647: \) # )
1648: [\040\t]* )* # If comment found, allow more spaces.
1649: # additional words
1650: )*
1651: @
1652: [\040\t]* # Nab whitespace.
1653: (?:
1654: \( # (
1655: [^\\\x80-\xff\n\015()] * # normal*
1656: (?: # (
1657: (?: \\ [^\x80-\xff] |
1658: \( # (
1659: [^\\\x80-\xff\n\015()] * # normal*
1660: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1661: \) # )
1662: ) # special
1663: [^\\\x80-\xff\n\015()] * # normal*
1664: )* # )*
1665: \) # )
1666: [\040\t]* )* # If comment found, allow more spaces.
1667: (?:
1668: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1669: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1670: |
1671: \[ # [
1672: (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1673: \] # ]
1674: )
1675: [\040\t]* # Nab whitespace.
1676: (?:
1677: \( # (
1678: [^\\\x80-\xff\n\015()] * # normal*
1679: (?: # (
1680: (?: \\ [^\x80-\xff] |
1681: \( # (
1682: [^\\\x80-\xff\n\015()] * # normal*
1683: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1684: \) # )
1685: ) # special
1686: [^\\\x80-\xff\n\015()] * # normal*
1687: )* # )*
1688: \) # )
1689: [\040\t]* )* # If comment found, allow more spaces.
1690: # optional trailing comments
1691: (?:
1692: \.
1693: [\040\t]* # Nab whitespace.
1694: (?:
1695: \( # (
1696: [^\\\x80-\xff\n\015()] * # normal*
1697: (?: # (
1698: (?: \\ [^\x80-\xff] |
1699: \( # (
1700: [^\\\x80-\xff\n\015()] * # normal*
1701: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1702: \) # )
1703: ) # special
1704: [^\\\x80-\xff\n\015()] * # normal*
1705: )* # )*
1706: \) # )
1707: [\040\t]* )* # If comment found, allow more spaces.
1708: (?:
1709: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1710: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1711: |
1712: \[ # [
1713: (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1714: \] # ]
1715: )
1716: [\040\t]* # Nab whitespace.
1717: (?:
1718: \( # (
1719: [^\\\x80-\xff\n\015()] * # normal*
1720: (?: # (
1721: (?: \\ [^\x80-\xff] |
1722: \( # (
1723: [^\\\x80-\xff\n\015()] * # normal*
1724: (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1725: \) # )
1726: ) # special
1727: [^\\\x80-\xff\n\015()] * # normal*
1728: )* # )*
1729: \) # )
1730: [\040\t]* )* # If comment found, allow more spaces.
1731: # optional trailing comments
1732: )*
1733: # address spec
1734: > # >
1735: # name and address
1736: )
1737: /x
1738: Alan Other <user\@dom.ain>
1739: 0: Alan Other <user@dom.ain>
1740: <user\@dom.ain>
1741: 0: user@dom.ain
1742: user\@dom.ain
1743: 0: user@dom.ain
1744: \"A. Other\" <user.1234\@dom.ain> (a comment)
1745: 0: "A. Other" <user.1234@dom.ain>
1746: A. Other <user.1234\@dom.ain> (a comment)
1747: 0: Other <user.1234@dom.ain>
1748: \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
1749: 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
1750: A missing angle <user\@some.where
1751: 0: user@some.where
1752: *** Failers
1753: No match
1754: The quick brown fox
1755: No match
1756:
1757: /abc\0def\00pqr\000xyz\0000AB/
1758: abc\0def\00pqr\000xyz\0000AB
1759: 0: abc\x00def\x00pqr\x00xyz\x000AB
1760: abc456 abc\0def\00pqr\000xyz\0000ABCDE
1761: 0: abc\x00def\x00pqr\x00xyz\x000AB
1762:
1763: /abc\x0def\x00pqr\x000xyz\x0000AB/
1764: abc\x0def\x00pqr\x000xyz\x0000AB
1765: 0: abc\x0def\x00pqr\x000xyz\x0000AB
1766: abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
1767: 0: abc\x0def\x00pqr\x000xyz\x0000AB
1768:
1769: /^[\000-\037]/
1770: \0A
1771: 0: \x00
1772: \01B
1773: 0: \x01
1774: \037C
1775: 0: \x1f
1776:
1777: /\0*/
1778: \0\0\0\0
1779: 0: \x00\x00\x00\x00
1780:
1781: /A\x0{2,3}Z/
1782: The A\x0\x0Z
1783: 0: A\x00\x00Z
1784: An A\0\x0\0Z
1785: 0: A\x00\x00\x00Z
1786: *** Failers
1787: No match
1788: A\0Z
1789: No match
1790: A\0\x0\0\x0Z
1791: No match
1792:
1793: /^(cow|)\1(bell)/
1794: cowcowbell
1795: 0: cowcowbell
1796: 1: cow
1797: 2: bell
1798: bell
1799: 0: bell
1800: 1:
1801: 2: bell
1802: *** Failers
1803: No match
1804: cowbell
1805: No match
1806:
1807: /^\s/
1808: \040abc
1809: 0:
1810: \x0cabc
1811: 0: \x0c
1812: \nabc
1813: 0: \x0a
1814: \rabc
1815: 0: \x0d
1816: \tabc
1817: 0: \x09
1818: *** Failers
1819: No match
1820: abc
1821: No match
1822:
1823: /^a b
1824: c/x
1825: abc
1826: 0: abc
1827:
1828: /^(a|)\1*b/
1829: ab
1830: 0: ab
1831: 1: a
1832: aaaab
1833: 0: aaaab
1834: 1: a
1835: b
1836: 0: b
1837: 1:
1838: *** Failers
1839: No match
1840: acb
1841: No match
1842:
1843: /^(a|)\1+b/
1844: aab
1845: 0: aab
1846: 1: a
1847: aaaab
1848: 0: aaaab
1849: 1: a
1850: b
1851: 0: b
1852: 1:
1853: *** Failers
1854: No match
1855: ab
1856: No match
1857:
1858: /^(a|)\1?b/
1859: ab
1860: 0: ab
1861: 1: a
1862: aab
1863: 0: aab
1864: 1: a
1865: b
1866: 0: b
1867: 1:
1868: *** Failers
1869: No match
1870: acb
1871: No match
1872:
1873: /^(a|)\1{2}b/
1874: aaab
1875: 0: aaab
1876: 1: a
1877: b
1878: 0: b
1879: 1:
1880: *** Failers
1881: No match
1882: ab
1883: No match
1884: aab
1885: No match
1886: aaaab
1887: No match
1888:
1889: /^(a|)\1{2,3}b/
1890: aaab
1891: 0: aaab
1892: 1: a
1893: aaaab
1894: 0: aaaab
1895: 1: a
1896: b
1897: 0: b
1898: 1:
1899: *** Failers
1900: No match
1901: ab
1902: No match
1903: aab
1904: No match
1905: aaaaab
1906: No match
1907:
1908: /ab{1,3}bc/
1909: abbbbc
1910: 0: abbbbc
1911: abbbc
1912: 0: abbbc
1913: abbc
1914: 0: abbc
1915: *** Failers
1916: No match
1917: abc
1918: No match
1919: abbbbbc
1920: No match
1921:
1922: /([^.]*)\.([^:]*):[T ]+(.*)/
1923: track1.title:TBlah blah blah
1924: 0: track1.title:TBlah blah blah
1925: 1: track1
1926: 2: title
1927: 3: Blah blah blah
1928:
1929: /([^.]*)\.([^:]*):[T ]+(.*)/i
1930: track1.title:TBlah blah blah
1931: 0: track1.title:TBlah blah blah
1932: 1: track1
1933: 2: title
1934: 3: Blah blah blah
1935:
1936: /([^.]*)\.([^:]*):[t ]+(.*)/i
1937: track1.title:TBlah blah blah
1938: 0: track1.title:TBlah blah blah
1939: 1: track1
1940: 2: title
1941: 3: Blah blah blah
1942:
1943: /^[W-c]+$/
1944: WXY_^abc
1945: 0: WXY_^abc
1946: *** Failers
1947: No match
1948: wxy
1949: No match
1950:
1951: /^[W-c]+$/i
1952: WXY_^abc
1953: 0: WXY_^abc
1954: wxy_^ABC
1955: 0: wxy_^ABC
1956:
1957: /^[\x3f-\x5F]+$/i
1958: WXY_^abc
1959: 0: WXY_^abc
1960: wxy_^ABC
1961: 0: wxy_^ABC
1962:
1963: /^abc$/m
1964: abc
1965: 0: abc
1966: qqq\nabc
1967: 0: abc
1968: abc\nzzz
1969: 0: abc
1970: qqq\nabc\nzzz
1971: 0: abc
1972:
1973: /^abc$/
1974: abc
1975: 0: abc
1976: *** Failers
1977: No match
1978: qqq\nabc
1979: No match
1980: abc\nzzz
1981: No match
1982: qqq\nabc\nzzz
1983: No match
1984:
1985: /\Aabc\Z/m
1986: abc
1987: 0: abc
1988: abc\n
1989: 0: abc
1990: *** Failers
1991: No match
1992: qqq\nabc
1993: No match
1994: abc\nzzz
1995: No match
1996: qqq\nabc\nzzz
1997: No match
1998:
1999: /\A(.)*\Z/s
2000: abc\ndef
2001: 0: abc\x0adef
2002: 1: f
2003:
2004: /\A(.)*\Z/m
2005: *** Failers
2006: 0: *** Failers
2007: 1: s
2008: abc\ndef
2009: No match
2010:
2011: /(?:b)|(?::+)/
2012: b::c
2013: 0: b
2014: c::b
2015: 0: ::
2016:
2017: /[-az]+/
2018: az-
2019: 0: az-
2020: *** Failers
2021: 0: a
2022: b
2023: No match
2024:
2025: /[az-]+/
2026: za-
2027: 0: za-
2028: *** Failers
2029: 0: a
2030: b
2031: No match
2032:
2033: /[a\-z]+/
2034: a-z
2035: 0: a-z
2036: *** Failers
2037: 0: a
2038: b
2039: No match
2040:
2041: /[a-z]+/
2042: abcdxyz
2043: 0: abcdxyz
2044:
2045: /[\d-]+/
2046: 12-34
2047: 0: 12-34
2048: *** Failers
2049: No match
2050: aaa
2051: No match
2052:
2053: /[\d-z]+/
2054: 12-34z
2055: 0: 12-34z
2056: *** Failers
2057: No match
2058: aaa
2059: No match
2060:
2061: /\x5c/
2062: \\
2063: 0: \
2064:
2065: /\x20Z/
2066: the Zoo
2067: 0: Z
2068: *** Failers
2069: No match
2070: Zulu
2071: No match
2072:
2073: /(abc)\1/i
2074: abcabc
2075: 0: abcabc
2076: 1: abc
2077: ABCabc
2078: 0: ABCabc
2079: 1: ABC
2080: abcABC
2081: 0: abcABC
2082: 1: abc
2083:
2084: /ab{3cd/
2085: ab{3cd
2086: 0: ab{3cd
2087:
2088: /ab{3,cd/
2089: ab{3,cd
2090: 0: ab{3,cd
2091:
2092: /ab{3,4a}cd/
2093: ab{3,4a}cd
2094: 0: ab{3,4a}cd
2095:
2096: /{4,5a}bc/
2097: {4,5a}bc
2098: 0: {4,5a}bc
2099:
2100: /abc$/
2101: abc
2102: 0: abc
2103: abc\n
2104: 0: abc
2105: *** Failers
2106: No match
2107: abc\ndef
2108: No match
2109:
2110: /(abc)\123/
2111: abc\x53
2112: 0: abcS
2113: 1: abc
2114:
2115: /(abc)\223/
2116: abc\x93
2117: 0: abc\x93
2118: 1: abc
2119:
2120: /(abc)\323/
2121: abc\xd3
2122: 0: abc\xd3
2123: 1: abc
2124:
2125: /(abc)\100/
2126: abc\x40
2127: 0: abc@
2128: 1: abc
2129: abc\100
2130: 0: abc@
2131: 1: abc
2132:
2133: /(abc)\1000/
2134: abc\x400
2135: 0: abc@0
2136: 1: abc
2137: abc\x40\x30
2138: 0: abc@0
2139: 1: abc
2140: abc\1000
2141: 0: abc@0
2142: 1: abc
2143: abc\100\x30
2144: 0: abc@0
2145: 1: abc
2146: abc\100\060
2147: 0: abc@0
2148: 1: abc
2149: abc\100\60
2150: 0: abc@0
2151: 1: abc
2152:
2153: /abc\81/
2154: abc\081
2155: 0: abc\x0081
2156: abc\0\x38\x31
2157: 0: abc\x0081
2158:
2159: /abc\91/
2160: abc\091
2161: 0: abc\x0091
2162: abc\0\x39\x31
2163: 0: abc\x0091
2164:
2165: /(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
2166: abcdefghijkllS
2167: 0: abcdefghijkllS
2168: 1: a
2169: 2: b
2170: 3: c
2171: 4: d
2172: 5: e
2173: 6: f
2174: 7: g
2175: 8: h
2176: 9: i
2177: 10: j
2178: 11: k
2179: 12: l
2180:
2181: /(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
2182: abcdefghijk\12S
2183: 0: abcdefghijk\x0aS
2184: 1: a
2185: 2: b
2186: 3: c
2187: 4: d
2188: 5: e
2189: 6: f
2190: 7: g
2191: 8: h
2192: 9: i
2193: 10: j
2194: 11: k
2195:
2196: /ab\idef/
2197: abidef
2198: 0: abidef
2199:
2200: /a{0}bc/
2201: bc
2202: 0: bc
2203:
2204: /(a|(bc)){0,0}?xyz/
2205: xyz
2206: 0: xyz
2207:
2208: /abc[\10]de/
2209: abc\010de
2210: 0: abc\x08de
2211:
2212: /abc[\1]de/
2213: abc\1de
2214: 0: abc\x01de
2215:
2216: /(abc)[\1]de/
2217: abc\1de
2218: 0: abc\x01de
2219: 1: abc
2220:
2221: /(?s)a.b/
2222: a\nb
2223: 0: a\x0ab
2224:
2225: /^([^a])([^\b])([^c]*)([^d]{3,4})/
2226: baNOTccccd
2227: 0: baNOTcccc
2228: 1: b
2229: 2: a
2230: 3: NOT
2231: 4: cccc
2232: baNOTcccd
2233: 0: baNOTccc
2234: 1: b
2235: 2: a
2236: 3: NOT
2237: 4: ccc
2238: baNOTccd
2239: 0: baNOTcc
2240: 1: b
2241: 2: a
2242: 3: NO
2243: 4: Tcc
2244: bacccd
2245: 0: baccc
2246: 1: b
2247: 2: a
2248: 3:
2249: 4: ccc
2250: *** Failers
2251: 0: *** Failers
2252: 1: *
2253: 2: *
2254: 3: * Fail
2255: 4: ers
2256: anything
2257: No match
2258: b\bc
2259: No match
2260: baccd
2261: No match
2262:
2263: /[^a]/
2264: Abc
2265: 0: A
2266:
2267: /[^a]/i
2268: Abc
2269: 0: b
2270:
2271: /[^a]+/
2272: AAAaAbc
2273: 0: AAA
2274:
2275: /[^a]+/i
2276: AAAaAbc
2277: 0: bc
2278:
2279: /[^a]+/
2280: bbb\nccc
2281: 0: bbb\x0accc
2282:
2283: /[^k]$/
2284: abc
2285: 0: c
2286: *** Failers
2287: 0: s
2288: abk
2289: No match
2290:
2291: /[^k]{2,3}$/
2292: abc
2293: 0: abc
2294: kbc
2295: 0: bc
2296: kabc
2297: 0: abc
2298: *** Failers
2299: 0: ers
2300: abk
2301: No match
2302: akb
2303: No match
2304: akk
2305: No match
2306:
2307: /^\d{8,}\@.+[^k]$/
2308: 12345678\@a.b.c.d
2309: 0: 12345678@a.b.c.d
2310: 123456789\@x.y.z
2311: 0: 123456789@x.y.z
2312: *** Failers
2313: No match
2314: 12345678\@x.y.uk
2315: No match
2316: 1234567\@a.b.c.d
2317: No match
2318:
2319: /(a)\1{8,}/
2320: aaaaaaaaa
2321: 0: aaaaaaaaa
2322: 1: a
2323: aaaaaaaaaa
2324: 0: aaaaaaaaaa
2325: 1: a
2326: *** Failers
2327: No match
2328: aaaaaaa
2329: No match
2330:
2331: /[^a]/
2332: aaaabcd
2333: 0: b
2334: aaAabcd
2335: 0: A
2336:
2337: /[^a]/i
2338: aaaabcd
2339: 0: b
2340: aaAabcd
2341: 0: b
2342:
2343: /[^az]/
2344: aaaabcd
2345: 0: b
2346: aaAabcd
2347: 0: A
2348:
2349: /[^az]/i
2350: aaaabcd
2351: 0: b
2352: aaAabcd
2353: 0: b
2354:
2355: /\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/
2356: \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
2357: 0: \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff
2358:
2359: /P[^*]TAIRE[^*]{1,6}?LL/
2360: xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
2361: 0: PSTAIREISLL
2362:
2363: /P[^*]TAIRE[^*]{1,}?LL/
2364: xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
2365: 0: PSTAIREISLL
2366:
2367: /(\.\d\d[1-9]?)\d+/
2368: 1.230003938
2369: 0: .230003938
2370: 1: .23
2371: 1.875000282
2372: 0: .875000282
2373: 1: .875
2374: 1.235
2375: 0: .235
2376: 1: .23
2377:
2378: /(\.\d\d((?=0)|\d(?=\d)))/
2379: 1.230003938
2380: 0: .23
2381: 1: .23
2382: 2:
2383: 1.875000282
2384: 0: .875
2385: 1: .875
2386: 2: 5
2387: *** Failers
2388: No match
2389: 1.235
2390: No match
2391:
2392: /a(?)b/
2393: ab
2394: 0: ab
2395:
2396: /\b(foo)\s+(\w+)/i
2397: Food is on the foo table
2398: 0: foo table
2399: 1: foo
2400: 2: table
2401:
2402: /foo(.*)bar/
2403: The food is under the bar in the barn.
2404: 0: food is under the bar in the bar
2405: 1: d is under the bar in the
2406:
2407: /foo(.*?)bar/
2408: The food is under the bar in the barn.
2409: 0: food is under the bar
2410: 1: d is under the
2411:
2412: /(.*)(\d*)/
2413: I have 2 numbers: 53147
2414: 0: I have 2 numbers: 53147
2415: 1: I have 2 numbers: 53147
2416: 2:
2417:
2418: /(.*)(\d+)/
2419: I have 2 numbers: 53147
2420: 0: I have 2 numbers: 53147
2421: 1: I have 2 numbers: 5314
2422: 2: 7
2423:
2424: /(.*?)(\d*)/
2425: I have 2 numbers: 53147
2426: 0:
2427: 1:
2428: 2:
2429:
2430: /(.*?)(\d+)/
2431: I have 2 numbers: 53147
2432: 0: I have 2
2433: 1: I have
2434: 2: 2
2435:
2436: /(.*)(\d+)$/
2437: I have 2 numbers: 53147
2438: 0: I have 2 numbers: 53147
2439: 1: I have 2 numbers: 5314
2440: 2: 7
2441:
2442: /(.*?)(\d+)$/
2443: I have 2 numbers: 53147
2444: 0: I have 2 numbers: 53147
2445: 1: I have 2 numbers:
2446: 2: 53147
2447:
2448: /(.*)\b(\d+)$/
2449: I have 2 numbers: 53147
2450: 0: I have 2 numbers: 53147
2451: 1: I have 2 numbers:
2452: 2: 53147
2453:
2454: /(.*\D)(\d+)$/
2455: I have 2 numbers: 53147
2456: 0: I have 2 numbers: 53147
2457: 1: I have 2 numbers:
2458: 2: 53147
2459:
2460: /^\D*(?!123)/
2461: ABC123
2462: 0: AB
2463:
2464: /^(\D*)(?=\d)(?!123)/
2465: ABC445
2466: 0: ABC
2467: 1: ABC
2468: *** Failers
2469: No match
2470: ABC123
2471: No match
2472:
2473: /^[W-]46]/
2474: W46]789
2475: 0: W46]
2476: -46]789
2477: 0: -46]
2478: *** Failers
2479: No match
2480: Wall
2481: No match
2482: Zebra
2483: No match
2484: 42
2485: No match
2486: [abcd]
2487: No match
2488: ]abcd[
2489: No match
2490:
2491: /^[W-\]46]/
2492: W46]789
2493: 0: W
2494: Wall
2495: 0: W
2496: Zebra
2497: 0: Z
2498: Xylophone
2499: 0: X
2500: 42
2501: 0: 4
2502: [abcd]
2503: 0: [
2504: ]abcd[
2505: 0: ]
2506: \\backslash
2507: 0: \
2508: *** Failers
2509: No match
2510: -46]789
2511: No match
2512: well
2513: No match
2514:
2515: /\d\d\/\d\d\/\d\d\d\d/
2516: 01/01/2000
2517: 0: 01/01/2000
2518:
2519: /word (?:[a-zA-Z0-9]+ ){0,10}otherword/
2520: word cat dog elephant mussel cow horse canary baboon snake shark otherword
2521: 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
2522: word cat dog elephant mussel cow horse canary baboon snake shark
2523: No match
2524:
2525: /word (?:[a-zA-Z0-9]+ ){0,300}otherword/
2526: 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
2527: No match
2528:
2529: /^(a){0,0}/
2530: bcd
2531: 0:
2532: abc
2533: 0:
2534: aab
2535: 0:
2536:
2537: /^(a){0,1}/
2538: bcd
2539: 0:
2540: abc
2541: 0: a
2542: 1: a
2543: aab
2544: 0: a
2545: 1: a
2546:
2547: /^(a){0,2}/
2548: bcd
2549: 0:
2550: abc
2551: 0: a
2552: 1: a
2553: aab
2554: 0: aa
2555: 1: a
2556:
2557: /^(a){0,3}/
2558: bcd
2559: 0:
2560: abc
2561: 0: a
2562: 1: a
2563: aab
2564: 0: aa
2565: 1: a
2566: aaa
2567: 0: aaa
2568: 1: a
2569:
2570: /^(a){0,}/
2571: bcd
2572: 0:
2573: abc
2574: 0: a
2575: 1: a
2576: aab
2577: 0: aa
2578: 1: a
2579: aaa
2580: 0: aaa
2581: 1: a
2582: aaaaaaaa
2583: 0: aaaaaaaa
2584: 1: a
2585:
2586: /^(a){1,1}/
2587: bcd
2588: No match
2589: abc
2590: 0: a
2591: 1: a
2592: aab
2593: 0: a
2594: 1: a
2595:
2596: /^(a){1,2}/
2597: bcd
2598: No match
2599: abc
2600: 0: a
2601: 1: a
2602: aab
2603: 0: aa
2604: 1: a
2605:
2606: /^(a){1,3}/
2607: bcd
2608: No match
2609: abc
2610: 0: a
2611: 1: a
2612: aab
2613: 0: aa
2614: 1: a
2615: aaa
2616: 0: aaa
2617: 1: a
2618:
2619: /^(a){1,}/
2620: bcd
2621: No match
2622: abc
2623: 0: a
2624: 1: a
2625: aab
2626: 0: aa
2627: 1: a
2628: aaa
2629: 0: aaa
2630: 1: a
2631: aaaaaaaa
2632: 0: aaaaaaaa
2633: 1: a
2634:
2635: /.*\.gif/
2636: borfle\nbib.gif\nno
2637: 0: bib.gif
2638:
2639: /.{0,}\.gif/
2640: borfle\nbib.gif\nno
2641: 0: bib.gif
2642:
2643: /.*\.gif/m
2644: borfle\nbib.gif\nno
2645: 0: bib.gif
2646:
2647: /.*\.gif/s
2648: borfle\nbib.gif\nno
2649: 0: borfle\x0abib.gif
2650:
2651: /.*\.gif/ms
2652: borfle\nbib.gif\nno
2653: 0: borfle\x0abib.gif
2654:
2655: /.*$/
2656: borfle\nbib.gif\nno
2657: 0: no
2658:
2659: /.*$/m
2660: borfle\nbib.gif\nno
2661: 0: borfle
2662:
2663: /.*$/s
2664: borfle\nbib.gif\nno
2665: 0: borfle\x0abib.gif\x0ano
2666:
2667: /.*$/ms
2668: borfle\nbib.gif\nno
2669: 0: borfle\x0abib.gif\x0ano
2670:
2671: /.*$/
2672: borfle\nbib.gif\nno\n
2673: 0: no
2674:
2675: /.*$/m
2676: borfle\nbib.gif\nno\n
2677: 0: borfle
2678:
2679: /.*$/s
2680: borfle\nbib.gif\nno\n
2681: 0: borfle\x0abib.gif\x0ano\x0a
2682:
2683: /.*$/ms
2684: borfle\nbib.gif\nno\n
2685: 0: borfle\x0abib.gif\x0ano\x0a
2686:
2687: /(.*X|^B)/
2688: abcde\n1234Xyz
2689: 0: 1234X
2690: 1: 1234X
2691: BarFoo
2692: 0: B
2693: 1: B
2694: *** Failers
2695: No match
2696: abcde\nBar
2697: No match
2698:
2699: /(.*X|^B)/m
2700: abcde\n1234Xyz
2701: 0: 1234X
2702: 1: 1234X
2703: BarFoo
2704: 0: B
2705: 1: B
2706: abcde\nBar
2707: 0: B
2708: 1: B
2709:
2710: /(.*X|^B)/s
2711: abcde\n1234Xyz
2712: 0: abcde\x0a1234X
2713: 1: abcde\x0a1234X
2714: BarFoo
2715: 0: B
2716: 1: B
2717: *** Failers
2718: No match
2719: abcde\nBar
2720: No match
2721:
2722: /(.*X|^B)/ms
2723: abcde\n1234Xyz
2724: 0: abcde\x0a1234X
2725: 1: abcde\x0a1234X
2726: BarFoo
2727: 0: B
2728: 1: B
2729: abcde\nBar
2730: 0: B
2731: 1: B
2732:
2733: /(?s)(.*X|^B)/
2734: abcde\n1234Xyz
2735: 0: abcde\x0a1234X
2736: 1: abcde\x0a1234X
2737: BarFoo
2738: 0: B
2739: 1: B
2740: *** Failers
2741: No match
2742: abcde\nBar
2743: No match
2744:
2745: /(?s:.*X|^B)/
2746: abcde\n1234Xyz
2747: 0: abcde\x0a1234X
2748: BarFoo
2749: 0: B
2750: *** Failers
2751: No match
2752: abcde\nBar
2753: No match
2754:
2755: /^.*B/
2756: **** Failers
2757: No match
2758: abc\nB
2759: No match
2760:
2761: /(?s)^.*B/
2762: abc\nB
2763: 0: abc\x0aB
2764:
2765: /(?m)^.*B/
2766: abc\nB
2767: 0: B
2768:
2769: /(?ms)^.*B/
2770: abc\nB
2771: 0: abc\x0aB
2772:
2773: /(?ms)^B/
2774: abc\nB
2775: 0: B
2776:
2777: /(?s)B$/
2778: B\n
2779: 0: B
2780:
2781: /^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
2782: 123456654321
2783: 0: 123456654321
2784:
2785: /^\d\d\d\d\d\d\d\d\d\d\d\d/
2786: 123456654321
2787: 0: 123456654321
2788:
2789: /^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
2790: 123456654321
2791: 0: 123456654321
2792:
2793: /^[abc]{12}/
2794: abcabcabcabc
2795: 0: abcabcabcabc
2796:
2797: /^[a-c]{12}/
2798: abcabcabcabc
2799: 0: abcabcabcabc
2800:
2801: /^(a|b|c){12}/
2802: abcabcabcabc
2803: 0: abcabcabcabc
2804: 1: c
2805:
2806: /^[abcdefghijklmnopqrstuvwxy0123456789]/
2807: n
2808: 0: n
2809: *** Failers
2810: No match
2811: z
2812: No match
2813:
2814: /abcde{0,0}/
2815: abcd
2816: 0: abcd
2817: *** Failers
2818: No match
2819: abce
2820: No match
2821:
2822: /ab[cd]{0,0}e/
2823: abe
2824: 0: abe
2825: *** Failers
2826: No match
2827: abcde
2828: No match
2829:
2830: /ab(c){0,0}d/
2831: abd
2832: 0: abd
2833: *** Failers
2834: No match
2835: abcd
2836: No match
2837:
2838: /a(b*)/
2839: a
2840: 0: a
2841: 1:
2842: ab
2843: 0: ab
2844: 1: b
2845: abbbb
2846: 0: abbbb
2847: 1: bbbb
2848: *** Failers
2849: 0: a
2850: 1:
2851: bbbbb
2852: No match
2853:
2854: /ab\d{0}e/
2855: abe
2856: 0: abe
2857: *** Failers
2858: No match
2859: ab1e
2860: No match
2861:
2862: /"([^\\"]+|\\.)*"/
2863: the \"quick\" brown fox
2864: 0: "quick"
2865: 1: quick
2866: \"the \\\"quick\\\" brown fox\"
2867: 0: "the \"quick\" brown fox"
2868: 1: brown fox
2869:
2870: /.*?/g+
2871: abc
2872: 0:
2873: 0+ abc
2874: 0: a
2875: 0+ bc
2876: 0:
2877: 0+ bc
2878: 0: b
2879: 0+ c
2880: 0:
2881: 0+ c
2882: 0: c
2883: 0+
2884: 0:
2885: 0+
2886:
2887: /\b/g+
2888: abc
2889: 0:
2890: 0+ abc
2891: 0:
2892: 0+
2893:
2894: /\b/+g
2895: abc
2896: 0:
2897: 0+ abc
2898: 0:
2899: 0+
2900:
2901: //g
2902: abc
2903: 0:
2904: 0:
2905: 0:
2906: 0:
2907:
2908: /<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
2909: <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>
2910: 0: <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>
2911: 1: BGCOLOR='#DBE9E9'
2912: 2: align=left valign=top
2913: 3: 43.
2914: 4: <a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)
2915: 5:
2916: 6:
2917: 7: <unset>
2918: 8: align=left valign=top
2919: 9: Lega lstaff.com
2920: 10: align=left valign=top
2921: 11: CA - Statewide
2922:
2923: /a[^a]b/
2924: acb
2925: 0: acb
2926: a\nb
2927: 0: a\x0ab
2928:
2929: /a.b/
2930: acb
2931: 0: acb
2932: *** Failers
2933: No match
2934: a\nb
2935: No match
2936:
2937: /a[^a]b/s
2938: acb
2939: 0: acb
2940: a\nb
2941: 0: a\x0ab
2942:
2943: /a.b/s
2944: acb
2945: 0: acb
2946: a\nb
2947: 0: a\x0ab
2948:
2949: /^(b+?|a){1,2}?c/
2950: bac
2951: 0: bac
2952: 1: a
2953: bbac
2954: 0: bbac
2955: 1: a
2956: bbbac
2957: 0: bbbac
2958: 1: a
2959: bbbbac
2960: 0: bbbbac
2961: 1: a
2962: bbbbbac
2963: 0: bbbbbac
2964: 1: a
2965:
2966: /^(b+|a){1,2}?c/
2967: bac
2968: 0: bac
2969: 1: a
2970: bbac
2971: 0: bbac
2972: 1: a
2973: bbbac
2974: 0: bbbac
2975: 1: a
2976: bbbbac
2977: 0: bbbbac
2978: 1: a
2979: bbbbbac
2980: 0: bbbbbac
2981: 1: a
2982:
2983: /(?!\A)x/m
2984: x\nb\n
2985: No match
2986: a\bx\n
2987: 0: x
2988:
2989: /\x0{ab}/
2990: \0{ab}
2991: 0: \x00{ab}
2992:
2993: /(A|B)*?CD/
2994: CD
2995: 0: CD
2996:
2997: /(A|B)*CD/
2998: CD
2999: 0: CD
3000:
3001: /(AB)*?\1/
3002: ABABAB
3003: 0: ABAB
3004: 1: AB
3005:
3006: /(AB)*\1/
3007: ABABAB
3008: 0: ABABAB
3009: 1: AB
3010:
3011: /(?<!bar)foo/
3012: foo
3013: 0: foo
3014: catfood
3015: 0: foo
3016: arfootle
3017: 0: foo
3018: rfoosh
3019: 0: foo
3020: *** Failers
3021: No match
3022: barfoo
3023: No match
3024: towbarfoo
3025: No match
3026:
3027: /\w{3}(?<!bar)foo/
3028: catfood
3029: 0: catfoo
3030: *** Failers
3031: No match
3032: foo
3033: No match
3034: barfoo
3035: No match
3036: towbarfoo
3037: No match
3038:
3039: /(?<=(foo)a)bar/
3040: fooabar
3041: 0: bar
3042: 1: foo
3043: *** Failers
3044: No match
3045: bar
3046: No match
3047: foobbar
3048: No match
3049:
3050: /\Aabc\z/m
3051: abc
3052: 0: abc
3053: *** Failers
3054: No match
3055: abc\n
3056: No match
3057: qqq\nabc
3058: No match
3059: abc\nzzz
3060: No match
3061: qqq\nabc\nzzz
3062: No match
3063:
3064: "(?>.*/)foo"
3065: /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
3066: No match
3067:
3068: "(?>.*/)foo"
3069: /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
3070: 0: /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
3071:
3072: /(?>(\.\d\d[1-9]?))\d+/
3073: 1.230003938
3074: 0: .230003938
3075: 1: .23
3076: 1.875000282
3077: 0: .875000282
3078: 1: .875
3079: *** Failers
3080: No match
3081: 1.235
3082: No match
3083:
3084: /^((?>\w+)|(?>\s+))*$/
3085: now is the time for all good men to come to the aid of the party
3086: 0: now is the time for all good men to come to the aid of the party
3087: 1: party
3088: *** Failers
3089: No match
3090: this is not a line with only words and spaces!
3091: No match
3092:
3093: /(\d+)(\w)/
3094: 12345a
3095: 0: 12345a
3096: 1: 12345
3097: 2: a
3098: 12345+
3099: 0: 12345
3100: 1: 1234
3101: 2: 5
3102:
3103: /((?>\d+))(\w)/
3104: 12345a
3105: 0: 12345a
3106: 1: 12345
3107: 2: a
3108: *** Failers
3109: No match
3110: 12345+
3111: No match
3112:
3113: /(?>a+)b/
3114: aaab
3115: 0: aaab
3116:
3117: /((?>a+)b)/
3118: aaab
3119: 0: aaab
3120: 1: aaab
3121:
3122: /(?>(a+))b/
3123: aaab
3124: 0: aaab
3125: 1: aaa
3126:
3127: /(?>b)+/
3128: aaabbbccc
3129: 0: bbb
3130:
3131: /(?>a+|b+|c+)*c/
3132: aaabbbbccccd
3133: 0: aaabbbbc
3134:
3135: /((?>[^()]+)|\([^()]*\))+/
3136: ((abc(ade)ufh()()x
3137: 0: abc(ade)ufh()()x
3138: 1: x
3139:
3140: /\(((?>[^()]+)|\([^()]+\))+\)/
3141: (abc)
3142: 0: (abc)
3143: 1: abc
3144: (abc(def)xyz)
3145: 0: (abc(def)xyz)
3146: 1: xyz
3147: *** Failers
3148: No match
3149: ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
3150: No match
3151:
3152: /a(?-i)b/i
3153: ab
3154: 0: ab
3155: Ab
3156: 0: Ab
3157: *** Failers
3158: No match
3159: aB
3160: No match
3161: AB
3162: No match
3163:
3164: /(a (?x)b c)d e/
3165: a bcd e
3166: 0: a bcd e
3167: 1: a bc
3168: *** Failers
3169: No match
3170: a b cd e
3171: No match
3172: abcd e
3173: No match
3174: a bcde
3175: No match
3176:
3177: /(a b(?x)c d (?-x)e f)/
3178: a bcde f
3179: 0: a bcde f
3180: 1: a bcde f
3181: *** Failers
3182: No match
3183: abcdef
3184: No match
3185:
3186: /(a(?i)b)c/
3187: abc
3188: 0: abc
3189: 1: ab
3190: aBc
3191: 0: aBc
3192: 1: aB
3193: *** Failers
3194: No match
3195: abC
3196: No match
3197: aBC
3198: No match
3199: Abc
3200: No match
3201: ABc
3202: No match
3203: ABC
3204: No match
3205: AbC
3206: No match
3207:
3208: /a(?i:b)c/
3209: abc
3210: 0: abc
3211: aBc
3212: 0: aBc
3213: *** Failers
3214: No match
3215: ABC
3216: No match
3217: abC
3218: No match
3219: aBC
3220: No match
3221:
3222: /a(?i:b)*c/
3223: aBc
3224: 0: aBc
3225: aBBc
3226: 0: aBBc
3227: *** Failers
3228: No match
3229: aBC
3230: No match
3231: aBBC
3232: No match
3233:
3234: /a(?=b(?i)c)\w\wd/
3235: abcd
3236: 0: abcd
3237: abCd
3238: 0: abCd
3239: *** Failers
3240: No match
3241: aBCd
3242: No match
3243: abcD
3244: No match
3245:
3246: /(?s-i:more.*than).*million/i
3247: more than million
3248: 0: more than million
3249: more than MILLION
3250: 0: more than MILLION
3251: more \n than Million
3252: 0: more \x0a than Million
3253: *** Failers
3254: No match
3255: MORE THAN MILLION
3256: No match
3257: more \n than \n million
3258: No match
3259:
3260: /(?:(?s-i)more.*than).*million/i
3261: more than million
3262: 0: more than million
3263: more than MILLION
3264: 0: more than MILLION
3265: more \n than Million
3266: 0: more \x0a than Million
3267: *** Failers
3268: No match
3269: MORE THAN MILLION
3270: No match
3271: more \n than \n million
3272: No match
3273:
3274: /(?>a(?i)b+)+c/
3275: abc
3276: 0: abc
3277: aBbc
3278: 0: aBbc
3279: aBBc
3280: 0: aBBc
3281: *** Failers
3282: No match
3283: Abc
3284: No match
3285: abAb
3286: No match
3287: abbC
3288: No match
3289:
3290: /(?=a(?i)b)\w\wc/
3291: abc
3292: 0: abc
3293: aBc
3294: 0: aBc
3295: *** Failers
3296: No match
3297: Ab
3298: No match
3299: abC
3300: No match
3301: aBC
3302: No match
3303:
3304: /(?<=a(?i)b)(\w\w)c/
3305: abxxc
3306: 0: xxc
3307: 1: xx
3308: aBxxc
3309: 0: xxc
3310: 1: xx
3311: *** Failers
3312: No match
3313: Abxxc
3314: No match
3315: ABxxc
3316: No match
3317: abxxC
3318: No match
3319:
3320: /(?:(a)|b)(?(1)A|B)/
3321: aA
3322: 0: aA
3323: 1: a
3324: bB
3325: 0: bB
3326: *** Failers
3327: No match
3328: aB
3329: No match
3330: bA
3331: No match
3332:
3333: /^(a)?(?(1)a|b)+$/
3334: aa
3335: 0: aa
3336: 1: a
3337: b
3338: 0: b
3339: bb
3340: 0: bb
3341: *** Failers
3342: No match
3343: ab
3344: No match
3345:
3346: /^(?(?=abc)\w{3}:|\d\d)$/
3347: abc:
3348: 0: abc:
3349: 12
3350: 0: 12
3351: *** Failers
3352: No match
3353: 123
3354: No match
3355: xyz
3356: No match
3357:
3358: /^(?(?!abc)\d\d|\w{3}:)$/
3359: abc:
3360: 0: abc:
3361: 12
3362: 0: 12
3363: *** Failers
3364: No match
3365: 123
3366: No match
3367: xyz
3368: No match
3369:
3370: /(?(?<=foo)bar|cat)/
3371: foobar
3372: 0: bar
3373: cat
3374: 0: cat
3375: fcat
3376: 0: cat
3377: focat
3378: 0: cat
3379: *** Failers
3380: No match
3381: foocat
3382: No match
3383:
3384: /(?(?<!foo)cat|bar)/
3385: foobar
3386: 0: bar
3387: cat
3388: 0: cat
3389: fcat
3390: 0: cat
3391: focat
3392: 0: cat
3393: *** Failers
3394: No match
3395: foocat
3396: No match
3397:
3398: /( \( )? [^()]+ (?(1) \) |) /x
3399: abcd
3400: 0: abcd
3401: (abcd)
3402: 0: (abcd)
3403: 1: (
3404: the quick (abcd) fox
3405: 0: the quick
3406: (abcd
3407: 0: abcd
3408:
3409: /( \( )? [^()]+ (?(1) \) ) /x
3410: abcd
3411: 0: abcd
3412: (abcd)
3413: 0: (abcd)
3414: 1: (
3415: the quick (abcd) fox
3416: 0: the quick
3417: (abcd
3418: 0: abcd
3419:
3420: /^(?(2)a|(1)(2))+$/
3421: 12
3422: 0: 12
3423: 1: 1
3424: 2: 2
3425: 12a
3426: 0: 12a
3427: 1: 1
3428: 2: 2
3429: 12aa
3430: 0: 12aa
3431: 1: 1
3432: 2: 2
3433: *** Failers
3434: No match
3435: 1234
3436: No match
3437:
3438: /((?i)blah)\s+\1/
3439: blah blah
3440: 0: blah blah
3441: 1: blah
3442: BLAH BLAH
3443: 0: BLAH BLAH
3444: 1: BLAH
3445: Blah Blah
3446: 0: Blah Blah
3447: 1: Blah
3448: blaH blaH
3449: 0: blaH blaH
3450: 1: blaH
3451: *** Failers
3452: No match
3453: blah BLAH
3454: No match
3455: Blah blah
3456: No match
3457: blaH blah
3458: No match
3459:
3460: /((?i)blah)\s+(?i:\1)/
3461: blah blah
3462: 0: blah blah
3463: 1: blah
3464: BLAH BLAH
3465: 0: BLAH BLAH
3466: 1: BLAH
3467: Blah Blah
3468: 0: Blah Blah
3469: 1: Blah
3470: blaH blaH
3471: 0: blaH blaH
3472: 1: blaH
3473: blah BLAH
3474: 0: blah BLAH
3475: 1: blah
3476: Blah blah
3477: 0: Blah blah
3478: 1: Blah
3479: blaH blah
3480: 0: blaH blah
3481: 1: blaH
3482:
3483: /(?>a*)*/
3484: a
3485: 0: a
3486: aa
3487: 0: aa
3488: aaaa
3489: 0: aaaa
3490:
3491: /(abc|)+/
3492: abc
3493: 0: abc
3494: 1:
3495: abcabc
3496: 0: abcabc
3497: 1:
3498: abcabcabc
3499: 0: abcabcabc
3500: 1:
3501: xyz
3502: 0:
3503: 1:
3504:
3505: /([a]*)*/
3506: a
3507: 0: a
3508: 1:
3509: aaaaa
3510: 0: aaaaa
3511: 1:
3512:
3513: /([ab]*)*/
3514: a
3515: 0: a
3516: 1:
3517: b
3518: 0: b
3519: 1:
3520: ababab
3521: 0: ababab
3522: 1:
3523: aaaabcde
3524: 0: aaaab
3525: 1:
3526: bbbb
3527: 0: bbbb
3528: 1:
3529:
3530: /([^a]*)*/
3531: b
3532: 0: b
3533: 1:
3534: bbbb
3535: 0: bbbb
3536: 1:
3537: aaa
3538: 0:
3539: 1:
3540:
3541: /([^ab]*)*/
3542: cccc
3543: 0: cccc
3544: 1:
3545: abab
3546: 0:
3547: 1:
3548:
3549: /([a]*?)*/
3550: a
3551: 0:
3552: 1:
3553: aaaa
3554: 0:
3555: 1:
3556:
3557: /([ab]*?)*/
3558: a
3559: 0:
3560: 1:
3561: b
3562: 0:
3563: 1:
3564: abab
3565: 0:
3566: 1:
3567: baba
3568: 0:
3569: 1:
3570:
3571: /([^a]*?)*/
3572: b
3573: 0:
3574: 1:
3575: bbbb
3576: 0:
3577: 1:
3578: aaa
3579: 0:
3580: 1:
3581:
3582: /([^ab]*?)*/
3583: c
3584: 0:
3585: 1:
3586: cccc
3587: 0:
3588: 1:
3589: baba
3590: 0:
3591: 1:
3592:
3593: /(?>a*)*/
3594: a
3595: 0: a
3596: aaabcde
3597: 0: aaa
3598:
3599: /((?>a*))*/
3600: aaaaa
3601: 0: aaaaa
3602: 1:
3603: aabbaa
3604: 0: aa
3605: 1:
3606:
3607: /((?>a*?))*/
3608: aaaaa
3609: 0:
3610: 1:
3611: aabbaa
3612: 0:
3613: 1:
3614:
3615: /(?(?=[^a-z]+[a-z]) \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} ) /x
3616: 12-sep-98
3617: 0: 12-sep-98
3618: 12-09-98
3619: 0: 12-09-98
3620: *** Failers
3621: No match
3622: sep-12-98
3623: No match
3624:
3625: /(?<=(foo))bar\1/
3626: foobarfoo
3627: 0: barfoo
3628: 1: foo
3629: foobarfootling
3630: 0: barfoo
3631: 1: foo
3632: *** Failers
3633: No match
3634: foobar
3635: No match
3636: barfoo
3637: No match
3638:
3639: /(?i:saturday|sunday)/
3640: saturday
3641: 0: saturday
3642: sunday
3643: 0: sunday
3644: Saturday
3645: 0: Saturday
3646: Sunday
3647: 0: Sunday
3648: SATURDAY
3649: 0: SATURDAY
3650: SUNDAY
3651: 0: SUNDAY
3652: SunDay
3653: 0: SunDay
3654:
3655: /(a(?i)bc|BB)x/
3656: abcx
3657: 0: abcx
3658: 1: abc
3659: aBCx
3660: 0: aBCx
3661: 1: aBC
3662: bbx
3663: 0: bbx
3664: 1: bb
3665: BBx
3666: 0: BBx
3667: 1: BB
3668: *** Failers
3669: No match
3670: abcX
3671: No match
3672: aBCX
3673: No match
3674: bbX
3675: No match
3676: BBX
3677: No match
3678:
3679: /^([ab](?i)[cd]|[ef])/
3680: ac
3681: 0: ac
3682: 1: ac
3683: aC
3684: 0: aC
3685: 1: aC
3686: bD
3687: 0: bD
3688: 1: bD
3689: elephant
3690: 0: e
3691: 1: e
3692: Europe
3693: 0: E
3694: 1: E
3695: frog
3696: 0: f
3697: 1: f
3698: France
3699: 0: F
3700: 1: F
3701: *** Failers
3702: No match
3703: Africa
3704: No match
3705:
3706: /^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
3707: ab
3708: 0: ab
3709: 1: ab
3710: aBd
3711: 0: aBd
3712: 1: aBd
3713: xy
3714: 0: xy
3715: 1: xy
3716: xY
3717: 0: xY
3718: 1: xY
3719: zebra
3720: 0: z
3721: 1: z
3722: Zambesi
3723: 0: Z
3724: 1: Z
3725: *** Failers
3726: No match
3727: aCD
3728: No match
3729: XY
3730: No match
3731:
3732: /(?<=foo\n)^bar/m
3733: foo\nbar
3734: 0: bar
3735: *** Failers
3736: No match
3737: bar
3738: No match
3739: baz\nbar
3740: No match
3741:
3742: /(?<=(?<!foo)bar)baz/
3743: barbaz
3744: 0: baz
3745: barbarbaz
3746: 0: baz
3747: koobarbaz
3748: 0: baz
3749: *** Failers
3750: No match
3751: baz
3752: No match
3753: foobarbaz
3754: No match
3755:
3756: /The cases of aaaa and aaaaaa are missed out below because Perl does things/
3757: /differently. We know that odd, and maybe incorrect, things happen with/
3758: No match
3759: /recursive references in Perl, as far as 5.11.3 - see some stuff in test #2./
3760: No match
3761:
3762: /^(a\1?){4}$/
3763: a
3764: No match
3765: aa
3766: No match
3767: aaa
3768: No match
3769: aaaaa
3770: 0: aaaaa
3771: 1: a
3772: aaaaaaa
3773: 0: aaaaaaa
3774: 1: a
3775: aaaaaaaa
3776: No match
3777: aaaaaaaaa
3778: No match
3779: aaaaaaaaaa
3780: 0: aaaaaaaaaa
3781: 1: aaaa
3782: aaaaaaaaaaa
3783: No match
3784: aaaaaaaaaaaa
3785: No match
3786: aaaaaaaaaaaaa
3787: No match
3788: aaaaaaaaaaaaaa
3789: No match
3790: aaaaaaaaaaaaaaa
3791: No match
3792: aaaaaaaaaaaaaaaa
3793: No match
3794:
3795: /^(a\1?)(a\1?)(a\2?)(a\3?)$/
3796: a
3797: No match
3798: aa
3799: No match
3800: aaa
3801: No match
3802: aaaa
3803: 0: aaaa
3804: 1: a
3805: 2: a
3806: 3: a
3807: 4: a
3808: aaaaa
3809: 0: aaaaa
3810: 1: a
3811: 2: aa
3812: 3: a
3813: 4: a
3814: aaaaaa
3815: 0: aaaaaa
3816: 1: a
3817: 2: aa
3818: 3: a
3819: 4: aa
3820: aaaaaaa
3821: 0: aaaaaaa
3822: 1: a
3823: 2: aa
3824: 3: aaa
3825: 4: a
3826: aaaaaaaa
3827: No match
3828: aaaaaaaaa
3829: No match
3830: aaaaaaaaaa
3831: 0: aaaaaaaaaa
3832: 1: a
3833: 2: aa
3834: 3: aaa
3835: 4: aaaa
3836: aaaaaaaaaaa
3837: No match
3838: aaaaaaaaaaaa
3839: No match
3840: aaaaaaaaaaaaa
3841: No match
3842: aaaaaaaaaaaaaa
3843: No match
3844: aaaaaaaaaaaaaaa
3845: No match
3846: aaaaaaaaaaaaaaaa
3847: No match
3848:
3849: /The following tests are taken from the Perl 5.005 test suite; some of them/
3850: /are compatible with 5.004, but I'd rather not have to sort them out./
3851: No match
3852:
3853: /abc/
3854: abc
3855: 0: abc
3856: xabcy
3857: 0: abc
3858: ababc
3859: 0: abc
3860: *** Failers
3861: No match
3862: xbc
3863: No match
3864: axc
3865: No match
3866: abx
3867: No match
3868:
3869: /ab*c/
3870: abc
3871: 0: abc
3872:
3873: /ab*bc/
3874: abc
3875: 0: abc
3876: abbc
3877: 0: abbc
3878: abbbbc
3879: 0: abbbbc
3880:
3881: /.{1}/
3882: abbbbc
3883: 0: a
3884:
3885: /.{3,4}/
3886: abbbbc
3887: 0: abbb
3888:
3889: /ab{0,}bc/
3890: abbbbc
3891: 0: abbbbc
3892:
3893: /ab+bc/
3894: abbc
3895: 0: abbc
3896: *** Failers
3897: No match
3898: abc
3899: No match
3900: abq
3901: No match
3902:
3903: /ab{1,}bc/
3904:
3905: /ab+bc/
3906: abbbbc
3907: 0: abbbbc
3908:
3909: /ab{1,}bc/
3910: abbbbc
3911: 0: abbbbc
3912:
3913: /ab{1,3}bc/
3914: abbbbc
3915: 0: abbbbc
3916:
3917: /ab{3,4}bc/
3918: abbbbc
3919: 0: abbbbc
3920:
3921: /ab{4,5}bc/
3922: *** Failers
3923: No match
3924: abq
3925: No match
3926: abbbbc
3927: No match
3928:
3929: /ab?bc/
3930: abbc
3931: 0: abbc
3932: abc
3933: 0: abc
3934:
3935: /ab{0,1}bc/
3936: abc
3937: 0: abc
3938:
3939: /ab?bc/
3940:
3941: /ab?c/
3942: abc
3943: 0: abc
3944:
3945: /ab{0,1}c/
3946: abc
3947: 0: abc
3948:
3949: /^abc$/
3950: abc
3951: 0: abc
3952: *** Failers
3953: No match
3954: abbbbc
3955: No match
3956: abcc
3957: No match
3958:
3959: /^abc/
3960: abcc
3961: 0: abc
3962:
3963: /^abc$/
3964:
3965: /abc$/
3966: aabc
3967: 0: abc
3968: *** Failers
3969: No match
3970: aabc
3971: 0: abc
3972: aabcd
3973: No match
3974:
3975: /^/
3976: abc
3977: 0:
3978:
3979: /$/
3980: abc
3981: 0:
3982:
3983: /a.c/
3984: abc
3985: 0: abc
3986: axc
3987: 0: axc
3988:
3989: /a.*c/
3990: axyzc
3991: 0: axyzc
3992:
3993: /a[bc]d/
3994: abd
3995: 0: abd
3996: *** Failers
3997: No match
3998: axyzd
3999: No match
4000: abc
4001: No match
4002:
4003: /a[b-d]e/
4004: ace
4005: 0: ace
4006:
4007: /a[b-d]/
4008: aac
4009: 0: ac
4010:
4011: /a[-b]/
4012: a-
4013: 0: a-
4014:
4015: /a[b-]/
4016: a-
4017: 0: a-
4018:
4019: /a]/
4020: a]
4021: 0: a]
4022:
4023: /a[]]b/
4024: a]b
4025: 0: a]b
4026:
4027: /a[^bc]d/
4028: aed
4029: 0: aed
4030: *** Failers
4031: No match
4032: abd
4033: No match
4034: abd
4035: No match
4036:
4037: /a[^-b]c/
4038: adc
4039: 0: adc
4040:
4041: /a[^]b]c/
4042: adc
4043: 0: adc
4044: *** Failers
4045: No match
4046: a-c
4047: 0: a-c
4048: a]c
4049: No match
4050:
4051: /\ba\b/
4052: a-
4053: 0: a
4054: -a
4055: 0: a
4056: -a-
4057: 0: a
4058:
4059: /\by\b/
4060: *** Failers
4061: No match
4062: xy
4063: No match
4064: yz
4065: No match
4066: xyz
4067: No match
4068:
4069: /\Ba\B/
4070: *** Failers
4071: 0: a
4072: a-
4073: No match
4074: -a
4075: No match
4076: -a-
4077: No match
4078:
4079: /\By\b/
4080: xy
4081: 0: y
4082:
4083: /\by\B/
4084: yz
4085: 0: y
4086:
4087: /\By\B/
4088: xyz
4089: 0: y
4090:
4091: /\w/
4092: a
4093: 0: a
4094:
4095: /\W/
4096: -
4097: 0: -
4098: *** Failers
4099: 0: *
4100: -
4101: 0: -
4102: a
4103: No match
4104:
4105: /a\sb/
4106: a b
4107: 0: a b
4108:
4109: /a\Sb/
4110: a-b
4111: 0: a-b
4112: *** Failers
4113: No match
4114: a-b
4115: 0: a-b
4116: a b
4117: No match
4118:
4119: /\d/
4120: 1
4121: 0: 1
4122:
4123: /\D/
4124: -
4125: 0: -
4126: *** Failers
4127: 0: *
4128: -
4129: 0: -
4130: 1
4131: No match
4132:
4133: /[\w]/
4134: a
4135: 0: a
4136:
4137: /[\W]/
4138: -
4139: 0: -
4140: *** Failers
4141: 0: *
4142: -
4143: 0: -
4144: a
4145: No match
4146:
4147: /a[\s]b/
4148: a b
4149: 0: a b
4150:
4151: /a[\S]b/
4152: a-b
4153: 0: a-b
4154: *** Failers
4155: No match
4156: a-b
4157: 0: a-b
4158: a b
4159: No match
4160:
4161: /[\d]/
4162: 1
4163: 0: 1
4164:
4165: /[\D]/
4166: -
4167: 0: -
4168: *** Failers
4169: 0: *
4170: -
4171: 0: -
4172: 1
4173: No match
4174:
4175: /ab|cd/
4176: abc
4177: 0: ab
4178: abcd
4179: 0: ab
4180:
4181: /()ef/
4182: def
4183: 0: ef
4184: 1:
4185:
4186: /$b/
4187:
4188: /a\(b/
4189: a(b
4190: 0: a(b
4191:
4192: /a\(*b/
4193: ab
4194: 0: ab
4195: a((b
4196: 0: a((b
4197:
4198: /a\\b/
4199: a\b
4200: No match
4201:
4202: /((a))/
4203: abc
4204: 0: a
4205: 1: a
4206: 2: a
4207:
4208: /(a)b(c)/
4209: abc
4210: 0: abc
4211: 1: a
4212: 2: c
4213:
4214: /a+b+c/
4215: aabbabc
4216: 0: abc
4217:
4218: /a{1,}b{1,}c/
4219: aabbabc
4220: 0: abc
4221:
4222: /a.+?c/
4223: abcabc
4224: 0: abc
4225:
4226: /(a+|b)*/
4227: ab
4228: 0: ab
4229: 1: b
4230:
4231: /(a+|b){0,}/
4232: ab
4233: 0: ab
4234: 1: b
4235:
4236: /(a+|b)+/
4237: ab
4238: 0: ab
4239: 1: b
4240:
4241: /(a+|b){1,}/
4242: ab
4243: 0: ab
4244: 1: b
4245:
4246: /(a+|b)?/
4247: ab
4248: 0: a
4249: 1: a
4250:
4251: /(a+|b){0,1}/
4252: ab
4253: 0: a
4254: 1: a
4255:
4256: /[^ab]*/
4257: cde
4258: 0: cde
4259:
4260: /abc/
4261: *** Failers
4262: No match
4263: b
4264: No match
4265:
4266:
4267: /a*/
4268:
4269:
4270: /([abc])*d/
4271: abbbcd
4272: 0: abbbcd
4273: 1: c
4274:
4275: /([abc])*bcd/
4276: abcd
4277: 0: abcd
4278: 1: a
4279:
4280: /a|b|c|d|e/
4281: e
4282: 0: e
4283:
4284: /(a|b|c|d|e)f/
4285: ef
4286: 0: ef
4287: 1: e
4288:
4289: /abcd*efg/
4290: abcdefg
4291: 0: abcdefg
4292:
4293: /ab*/
4294: xabyabbbz
4295: 0: ab
4296: xayabbbz
4297: 0: a
4298:
4299: /(ab|cd)e/
4300: abcde
4301: 0: cde
4302: 1: cd
4303:
4304: /[abhgefdc]ij/
4305: hij
4306: 0: hij
4307:
4308: /^(ab|cd)e/
4309:
4310: /(abc|)ef/
4311: abcdef
4312: 0: ef
4313: 1:
4314:
4315: /(a|b)c*d/
4316: abcd
4317: 0: bcd
4318: 1: b
4319:
4320: /(ab|ab*)bc/
4321: abc
4322: 0: abc
4323: 1: a
4324:
4325: /a([bc]*)c*/
4326: abc
4327: 0: abc
4328: 1: bc
4329:
4330: /a([bc]*)(c*d)/
4331: abcd
4332: 0: abcd
4333: 1: bc
4334: 2: d
4335:
4336: /a([bc]+)(c*d)/
4337: abcd
4338: 0: abcd
4339: 1: bc
4340: 2: d
4341:
4342: /a([bc]*)(c+d)/
4343: abcd
4344: 0: abcd
4345: 1: b
4346: 2: cd
4347:
4348: /a[bcd]*dcdcde/
4349: adcdcde
4350: 0: adcdcde
4351:
4352: /a[bcd]+dcdcde/
4353: *** Failers
4354: No match
4355: abcde
4356: No match
4357: adcdcde
4358: No match
4359:
4360: /(ab|a)b*c/
4361: abc
4362: 0: abc
4363: 1: ab
4364:
4365: /((a)(b)c)(d)/
4366: abcd
4367: 0: abcd
4368: 1: abc
4369: 2: a
4370: 3: b
4371: 4: d
4372:
4373: /[a-zA-Z_][a-zA-Z0-9_]*/
4374: alpha
4375: 0: alpha
4376:
4377: /^a(bc+|b[eh])g|.h$/
4378: abh
4379: 0: bh
4380:
4381: /(bc+d$|ef*g.|h?i(j|k))/
4382: effgz
4383: 0: effgz
4384: 1: effgz
4385: ij
4386: 0: ij
4387: 1: ij
4388: 2: j
4389: reffgz
4390: 0: effgz
4391: 1: effgz
4392: *** Failers
4393: No match
4394: effg
4395: No match
4396: bcdd
4397: No match
4398:
4399: /((((((((((a))))))))))/
4400: a
4401: 0: a
4402: 1: a
4403: 2: a
4404: 3: a
4405: 4: a
4406: 5: a
4407: 6: a
4408: 7: a
4409: 8: a
4410: 9: a
4411: 10: a
4412:
4413: /((((((((((a))))))))))\10/
4414: aa
4415: 0: aa
4416: 1: a
4417: 2: a
4418: 3: a
4419: 4: a
4420: 5: a
4421: 6: a
4422: 7: a
4423: 8: a
4424: 9: a
4425: 10: a
4426:
4427: /(((((((((a)))))))))/
4428: a
4429: 0: a
4430: 1: a
4431: 2: a
4432: 3: a
4433: 4: a
4434: 5: a
4435: 6: a
4436: 7: a
4437: 8: a
4438: 9: a
4439:
4440: /multiple words of text/
4441: *** Failers
4442: No match
4443: aa
4444: No match
4445: uh-uh
4446: No match
4447:
4448: /multiple words/
4449: multiple words, yeah
4450: 0: multiple words
4451:
4452: /(.*)c(.*)/
4453: abcde
4454: 0: abcde
4455: 1: ab
4456: 2: de
4457:
4458: /\((.*), (.*)\)/
4459: (a, b)
4460: 0: (a, b)
4461: 1: a
4462: 2: b
4463:
4464: /[k]/
4465:
4466: /abcd/
4467: abcd
4468: 0: abcd
4469:
4470: /a(bc)d/
4471: abcd
4472: 0: abcd
4473: 1: bc
4474:
4475: /a[-]?c/
4476: ac
4477: 0: ac
4478:
4479: /(abc)\1/
4480: abcabc
4481: 0: abcabc
4482: 1: abc
4483:
4484: /([a-c]*)\1/
4485: abcabc
4486: 0: abcabc
4487: 1: abc
4488:
4489: /(a)|\1/
4490: a
4491: 0: a
4492: 1: a
4493: *** Failers
4494: 0: a
4495: 1: a
4496: ab
4497: 0: a
4498: 1: a
4499: x
4500: No match
4501:
4502: /(([a-c])b*?\2)*/
4503: ababbbcbc
4504: 0: ababb
4505: 1: bb
4506: 2: b
4507:
4508: /(([a-c])b*?\2){3}/
4509: ababbbcbc
4510: 0: ababbbcbc
4511: 1: cbc
4512: 2: c
4513:
4514: /((\3|b)\2(a)x)+/
4515: aaaxabaxbaaxbbax
4516: 0: bbax
4517: 1: bbax
4518: 2: b
4519: 3: a
4520:
4521: /((\3|b)\2(a)){2,}/
4522: bbaababbabaaaaabbaaaabba
4523: 0: bbaaaabba
4524: 1: bba
4525: 2: b
4526: 3: a
4527:
4528: /abc/i
4529: ABC
4530: 0: ABC
4531: XABCY
4532: 0: ABC
4533: ABABC
4534: 0: ABC
4535: *** Failers
4536: No match
4537: aaxabxbaxbbx
4538: No match
4539: XBC
4540: No match
4541: AXC
4542: No match
4543: ABX
4544: No match
4545:
4546: /ab*c/i
4547: ABC
4548: 0: ABC
4549:
4550: /ab*bc/i
4551: ABC
4552: 0: ABC
4553: ABBC
4554: 0: ABBC
4555:
4556: /ab*?bc/i
4557: ABBBBC
4558: 0: ABBBBC
4559:
4560: /ab{0,}?bc/i
4561: ABBBBC
4562: 0: ABBBBC
4563:
4564: /ab+?bc/i
4565: ABBC
4566: 0: ABBC
4567:
4568: /ab+bc/i
4569: *** Failers
4570: No match
4571: ABC
4572: No match
4573: ABQ
4574: No match
4575:
4576: /ab{1,}bc/i
4577:
4578: /ab+bc/i
4579: ABBBBC
4580: 0: ABBBBC
4581:
4582: /ab{1,}?bc/i
4583: ABBBBC
4584: 0: ABBBBC
4585:
4586: /ab{1,3}?bc/i
4587: ABBBBC
4588: 0: ABBBBC
4589:
4590: /ab{3,4}?bc/i
4591: ABBBBC
4592: 0: ABBBBC
4593:
4594: /ab{4,5}?bc/i
4595: *** Failers
4596: No match
4597: ABQ
4598: No match
4599: ABBBBC
4600: No match
4601:
4602: /ab??bc/i
4603: ABBC
4604: 0: ABBC
4605: ABC
4606: 0: ABC
4607:
4608: /ab{0,1}?bc/i
4609: ABC
4610: 0: ABC
4611:
4612: /ab??bc/i
4613:
4614: /ab??c/i
4615: ABC
4616: 0: ABC
4617:
4618: /ab{0,1}?c/i
4619: ABC
4620: 0: ABC
4621:
4622: /^abc$/i
4623: ABC
4624: 0: ABC
4625: *** Failers
4626: No match
4627: ABBBBC
4628: No match
4629: ABCC
4630: No match
4631:
4632: /^abc/i
4633: ABCC
4634: 0: ABC
4635:
4636: /^abc$/i
4637:
4638: /abc$/i
4639: AABC
4640: 0: ABC
4641:
4642: /^/i
4643: ABC
4644: 0:
4645:
4646: /$/i
4647: ABC
4648: 0:
4649:
4650: /a.c/i
4651: ABC
4652: 0: ABC
4653: AXC
4654: 0: AXC
4655:
4656: /a.*?c/i
4657: AXYZC
4658: 0: AXYZC
4659:
4660: /a.*c/i
4661: *** Failers
4662: No match
4663: AABC
4664: 0: AABC
4665: AXYZD
4666: No match
4667:
4668: /a[bc]d/i
4669: ABD
4670: 0: ABD
4671:
4672: /a[b-d]e/i
4673: ACE
4674: 0: ACE
4675: *** Failers
4676: No match
4677: ABC
4678: No match
4679: ABD
4680: No match
4681:
4682: /a[b-d]/i
4683: AAC
4684: 0: AC
4685:
4686: /a[-b]/i
4687: A-
4688: 0: A-
4689:
4690: /a[b-]/i
4691: A-
4692: 0: A-
4693:
4694: /a]/i
4695: A]
4696: 0: A]
4697:
4698: /a[]]b/i
4699: A]B
4700: 0: A]B
4701:
4702: /a[^bc]d/i
4703: AED
4704: 0: AED
4705:
4706: /a[^-b]c/i
4707: ADC
4708: 0: ADC
4709: *** Failers
4710: No match
4711: ABD
4712: No match
4713: A-C
4714: No match
4715:
4716: /a[^]b]c/i
4717: ADC
4718: 0: ADC
4719:
4720: /ab|cd/i
4721: ABC
4722: 0: AB
4723: ABCD
4724: 0: AB
4725:
4726: /()ef/i
4727: DEF
4728: 0: EF
4729: 1:
4730:
4731: /$b/i
4732: *** Failers
4733: No match
4734: A]C
4735: No match
4736: B
4737: No match
4738:
4739: /a\(b/i
4740: A(B
4741: 0: A(B
4742:
4743: /a\(*b/i
4744: AB
4745: 0: AB
4746: A((B
4747: 0: A((B
4748:
4749: /a\\b/i
4750: A\B
4751: No match
4752:
4753: /((a))/i
4754: ABC
4755: 0: A
4756: 1: A
4757: 2: A
4758:
4759: /(a)b(c)/i
4760: ABC
4761: 0: ABC
4762: 1: A
4763: 2: C
4764:
4765: /a+b+c/i
4766: AABBABC
4767: 0: ABC
4768:
4769: /a{1,}b{1,}c/i
4770: AABBABC
4771: 0: ABC
4772:
4773: /a.+?c/i
4774: ABCABC
4775: 0: ABC
4776:
4777: /a.*?c/i
4778: ABCABC
4779: 0: ABC
4780:
4781: /a.{0,5}?c/i
4782: ABCABC
4783: 0: ABC
4784:
4785: /(a+|b)*/i
4786: AB
4787: 0: AB
4788: 1: B
4789:
4790: /(a+|b){0,}/i
4791: AB
4792: 0: AB
4793: 1: B
4794:
4795: /(a+|b)+/i
4796: AB
4797: 0: AB
4798: 1: B
4799:
4800: /(a+|b){1,}/i
4801: AB
4802: 0: AB
4803: 1: B
4804:
4805: /(a+|b)?/i
4806: AB
4807: 0: A
4808: 1: A
4809:
4810: /(a+|b){0,1}/i
4811: AB
4812: 0: A
4813: 1: A
4814:
4815: /(a+|b){0,1}?/i
4816: AB
4817: 0:
4818:
4819: /[^ab]*/i
4820: CDE
4821: 0: CDE
4822:
4823: /abc/i
4824:
4825: /a*/i
4826:
4827:
4828: /([abc])*d/i
4829: ABBBCD
4830: 0: ABBBCD
4831: 1: C
4832:
4833: /([abc])*bcd/i
4834: ABCD
4835: 0: ABCD
4836: 1: A
4837:
4838: /a|b|c|d|e/i
4839: E
4840: 0: E
4841:
4842: /(a|b|c|d|e)f/i
4843: EF
4844: 0: EF
4845: 1: E
4846:
4847: /abcd*efg/i
4848: ABCDEFG
4849: 0: ABCDEFG
4850:
4851: /ab*/i
4852: XABYABBBZ
4853: 0: AB
4854: XAYABBBZ
4855: 0: A
4856:
4857: /(ab|cd)e/i
4858: ABCDE
4859: 0: CDE
4860: 1: CD
4861:
4862: /[abhgefdc]ij/i
4863: HIJ
4864: 0: HIJ
4865:
4866: /^(ab|cd)e/i
4867: ABCDE
4868: No match
4869:
4870: /(abc|)ef/i
4871: ABCDEF
4872: 0: EF
4873: 1:
4874:
4875: /(a|b)c*d/i
4876: ABCD
4877: 0: BCD
4878: 1: B
4879:
4880: /(ab|ab*)bc/i
4881: ABC
4882: 0: ABC
4883: 1: A
4884:
4885: /a([bc]*)c*/i
4886: ABC
4887: 0: ABC
4888: 1: BC
4889:
4890: /a([bc]*)(c*d)/i
4891: ABCD
4892: 0: ABCD
4893: 1: BC
4894: 2: D
4895:
4896: /a([bc]+)(c*d)/i
4897: ABCD
4898: 0: ABCD
4899: 1: BC
4900: 2: D
4901:
4902: /a([bc]*)(c+d)/i
4903: ABCD
4904: 0: ABCD
4905: 1: B
4906: 2: CD
4907:
4908: /a[bcd]*dcdcde/i
4909: ADCDCDE
4910: 0: ADCDCDE
4911:
4912: /a[bcd]+dcdcde/i
4913:
4914: /(ab|a)b*c/i
4915: ABC
4916: 0: ABC
4917: 1: AB
4918:
4919: /((a)(b)c)(d)/i
4920: ABCD
4921: 0: ABCD
4922: 1: ABC
4923: 2: A
4924: 3: B
4925: 4: D
4926:
4927: /[a-zA-Z_][a-zA-Z0-9_]*/i
4928: ALPHA
4929: 0: ALPHA
4930:
4931: /^a(bc+|b[eh])g|.h$/i
4932: ABH
4933: 0: BH
4934:
4935: /(bc+d$|ef*g.|h?i(j|k))/i
4936: EFFGZ
4937: 0: EFFGZ
4938: 1: EFFGZ
4939: IJ
4940: 0: IJ
4941: 1: IJ
4942: 2: J
4943: REFFGZ
4944: 0: EFFGZ
4945: 1: EFFGZ
4946: *** Failers
4947: No match
4948: ADCDCDE
4949: No match
4950: EFFG
4951: No match
4952: BCDD
4953: No match
4954:
4955: /((((((((((a))))))))))/i
4956: A
4957: 0: A
4958: 1: A
4959: 2: A
4960: 3: A
4961: 4: A
4962: 5: A
4963: 6: A
4964: 7: A
4965: 8: A
4966: 9: A
4967: 10: A
4968:
4969: /((((((((((a))))))))))\10/i
4970: AA
4971: 0: AA
4972: 1: A
4973: 2: A
4974: 3: A
4975: 4: A
4976: 5: A
4977: 6: A
4978: 7: A
4979: 8: A
4980: 9: A
4981: 10: A
4982:
4983: /(((((((((a)))))))))/i
4984: A
4985: 0: A
4986: 1: A
4987: 2: A
4988: 3: A
4989: 4: A
4990: 5: A
4991: 6: A
4992: 7: A
4993: 8: A
4994: 9: A
4995:
4996: /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
4997: A
4998: 0: A
4999: 1: A
5000:
5001: /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
5002: C
5003: 0: C
5004: 1: C
5005:
5006: /multiple words of text/i
5007: *** Failers
5008: No match
5009: AA
5010: No match
5011: UH-UH
5012: No match
5013:
5014: /multiple words/i
5015: MULTIPLE WORDS, YEAH
5016: 0: MULTIPLE WORDS
5017:
5018: /(.*)c(.*)/i
5019: ABCDE
5020: 0: ABCDE
5021: 1: AB
5022: 2: DE
5023:
5024: /\((.*), (.*)\)/i
5025: (A, B)
5026: 0: (A, B)
5027: 1: A
5028: 2: B
5029:
5030: /[k]/i
5031:
5032: /abcd/i
5033: ABCD
5034: 0: ABCD
5035:
5036: /a(bc)d/i
5037: ABCD
5038: 0: ABCD
5039: 1: BC
5040:
5041: /a[-]?c/i
5042: AC
5043: 0: AC
5044:
5045: /(abc)\1/i
5046: ABCABC
5047: 0: ABCABC
5048: 1: ABC
5049:
5050: /([a-c]*)\1/i
5051: ABCABC
5052: 0: ABCABC
5053: 1: ABC
5054:
5055: /a(?!b)./
5056: abad
5057: 0: ad
5058:
5059: /a(?=d)./
5060: abad
5061: 0: ad
5062:
5063: /a(?=c|d)./
5064: abad
5065: 0: ad
5066:
5067: /a(?:b|c|d)(.)/
5068: ace
5069: 0: ace
5070: 1: e
5071:
5072: /a(?:b|c|d)*(.)/
5073: ace
5074: 0: ace
5075: 1: e
5076:
5077: /a(?:b|c|d)+?(.)/
5078: ace
5079: 0: ace
5080: 1: e
5081: acdbcdbe
5082: 0: acd
5083: 1: d
5084:
5085: /a(?:b|c|d)+(.)/
5086: acdbcdbe
5087: 0: acdbcdbe
5088: 1: e
5089:
5090: /a(?:b|c|d){2}(.)/
5091: acdbcdbe
5092: 0: acdb
5093: 1: b
5094:
5095: /a(?:b|c|d){4,5}(.)/
5096: acdbcdbe
5097: 0: acdbcdb
5098: 1: b
5099:
5100: /a(?:b|c|d){4,5}?(.)/
5101: acdbcdbe
5102: 0: acdbcd
5103: 1: d
5104:
5105: /((foo)|(bar))*/
5106: foobar
5107: 0: foobar
5108: 1: bar
5109: 2: foo
5110: 3: bar
5111:
5112: /a(?:b|c|d){6,7}(.)/
5113: acdbcdbe
5114: 0: acdbcdbe
5115: 1: e
5116:
5117: /a(?:b|c|d){6,7}?(.)/
5118: acdbcdbe
5119: 0: acdbcdbe
5120: 1: e
5121:
5122: /a(?:b|c|d){5,6}(.)/
5123: acdbcdbe
5124: 0: acdbcdbe
5125: 1: e
5126:
5127: /a(?:b|c|d){5,6}?(.)/
5128: acdbcdbe
5129: 0: acdbcdb
5130: 1: b
5131:
5132: /a(?:b|c|d){5,7}(.)/
5133: acdbcdbe
5134: 0: acdbcdbe
5135: 1: e
5136:
5137: /a(?:b|c|d){5,7}?(.)/
5138: acdbcdbe
5139: 0: acdbcdb
5140: 1: b
5141:
5142: /a(?:b|(c|e){1,2}?|d)+?(.)/
5143: ace
5144: 0: ace
5145: 1: c
5146: 2: e
5147:
5148: /^(.+)?B/
5149: AB
5150: 0: AB
5151: 1: A
5152:
5153: /^([^a-z])|(\^)$/
5154: .
5155: 0: .
5156: 1: .
5157:
5158: /^[<>]&/
5159: <&OUT
5160: 0: <&
5161:
5162: /^(a\1?){4}$/
5163: aaaaaaaaaa
5164: 0: aaaaaaaaaa
5165: 1: aaaa
5166: *** Failers
5167: No match
5168: AB
5169: No match
5170: aaaaaaaaa
5171: No match
5172: aaaaaaaaaaa
5173: No match
5174:
5175: /^(a(?(1)\1)){4}$/
5176: aaaaaaaaaa
5177: 0: aaaaaaaaaa
5178: 1: aaaa
5179: *** Failers
5180: No match
5181: aaaaaaaaa
5182: No match
5183: aaaaaaaaaaa
5184: No match
5185:
5186: /(?:(f)(o)(o)|(b)(a)(r))*/
5187: foobar
5188: 0: foobar
5189: 1: f
5190: 2: o
5191: 3: o
5192: 4: b
5193: 5: a
5194: 6: r
5195:
5196: /(?<=a)b/
5197: ab
5198: 0: b
5199: *** Failers
5200: No match
5201: cb
5202: No match
5203: b
5204: No match
5205:
5206: /(?<!c)b/
5207: ab
5208: 0: b
5209: b
5210: 0: b
5211: b
5212: 0: b
5213:
5214: /(?:..)*a/
5215: aba
5216: 0: aba
5217:
5218: /(?:..)*?a/
5219: aba
5220: 0: a
5221:
5222: /^(?:b|a(?=(.)))*\1/
5223: abc
5224: 0: ab
5225: 1: b
5226:
5227: /^(){3,5}/
5228: abc
5229: 0:
5230: 1:
5231:
5232: /^(a+)*ax/
5233: aax
5234: 0: aax
5235: 1: a
5236:
5237: /^((a|b)+)*ax/
5238: aax
5239: 0: aax
5240: 1: a
5241: 2: a
5242:
5243: /^((a|bc)+)*ax/
5244: aax
5245: 0: aax
5246: 1: a
5247: 2: a
5248:
5249: /(a|x)*ab/
5250: cab
5251: 0: ab
5252:
5253: /(a)*ab/
5254: cab
5255: 0: ab
5256:
5257: /(?:(?i)a)b/
5258: ab
5259: 0: ab
5260:
5261: /((?i)a)b/
5262: ab
5263: 0: ab
5264: 1: a
5265:
5266: /(?:(?i)a)b/
5267: Ab
5268: 0: Ab
5269:
5270: /((?i)a)b/
5271: Ab
5272: 0: Ab
5273: 1: A
5274:
5275: /(?:(?i)a)b/
5276: *** Failers
5277: No match
5278: cb
5279: No match
5280: aB
5281: No match
5282:
5283: /((?i)a)b/
5284:
5285: /(?i:a)b/
5286: ab
5287: 0: ab
5288:
5289: /((?i:a))b/
5290: ab
5291: 0: ab
5292: 1: a
5293:
5294: /(?i:a)b/
5295: Ab
5296: 0: Ab
5297:
5298: /((?i:a))b/
5299: Ab
5300: 0: Ab
5301: 1: A
5302:
5303: /(?i:a)b/
5304: *** Failers
5305: No match
5306: aB
5307: No match
5308: aB
5309: No match
5310:
5311: /((?i:a))b/
5312:
5313: /(?:(?-i)a)b/i
5314: ab
5315: 0: ab
5316:
5317: /((?-i)a)b/i
5318: ab
5319: 0: ab
5320: 1: a
5321:
5322: /(?:(?-i)a)b/i
5323: aB
5324: 0: aB
5325:
5326: /((?-i)a)b/i
5327: aB
5328: 0: aB
5329: 1: a
5330:
5331: /(?:(?-i)a)b/i
5332: *** Failers
5333: No match
5334: aB
5335: 0: aB
5336: Ab
5337: No match
5338:
5339: /((?-i)a)b/i
5340:
5341: /(?:(?-i)a)b/i
5342: aB
5343: 0: aB
5344:
5345: /((?-i)a)b/i
5346: aB
5347: 0: aB
5348: 1: a
5349:
5350: /(?:(?-i)a)b/i
5351: *** Failers
5352: No match
5353: Ab
5354: No match
5355: AB
5356: No match
5357:
5358: /((?-i)a)b/i
5359:
5360: /(?-i:a)b/i
5361: ab
5362: 0: ab
5363:
5364: /((?-i:a))b/i
5365: ab
5366: 0: ab
5367: 1: a
5368:
5369: /(?-i:a)b/i
5370: aB
5371: 0: aB
5372:
5373: /((?-i:a))b/i
5374: aB
5375: 0: aB
5376: 1: a
5377:
5378: /(?-i:a)b/i
5379: *** Failers
5380: No match
5381: AB
5382: No match
5383: Ab
5384: No match
5385:
5386: /((?-i:a))b/i
5387:
5388: /(?-i:a)b/i
5389: aB
5390: 0: aB
5391:
5392: /((?-i:a))b/i
5393: aB
5394: 0: aB
5395: 1: a
5396:
5397: /(?-i:a)b/i
5398: *** Failers
5399: No match
5400: Ab
5401: No match
5402: AB
5403: No match
5404:
5405: /((?-i:a))b/i
5406:
5407: /((?-i:a.))b/i
5408: *** Failers
5409: No match
5410: AB
5411: No match
5412: a\nB
5413: No match
5414:
5415: /((?s-i:a.))b/i
5416: a\nB
5417: 0: a\x0aB
5418: 1: a\x0a
5419:
5420: /(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
5421: cabbbb
5422: 0: cabbbb
5423:
5424: /(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
5425: caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
5426: 0: caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
5427:
5428: /(ab)\d\1/i
5429: Ab4ab
5430: 0: Ab4ab
5431: 1: Ab
5432: ab4Ab
5433: 0: ab4Ab
5434: 1: ab
5435:
5436: /foo\w*\d{4}baz/
5437: foobar1234baz
5438: 0: foobar1234baz
5439:
5440: /x(~~)*(?:(?:F)?)?/
5441: x~~
5442: 0: x~~
5443: 1: ~~
5444:
5445: /^a(?#xxx){3}c/
5446: aaac
5447: 0: aaac
5448:
5449: /^a (?#xxx) (?#yyy) {3}c/x
5450: aaac
5451: 0: aaac
5452:
5453: /(?<![cd])b/
5454: *** Failers
5455: No match
5456: B\nB
5457: No match
5458: dbcb
5459: No match
5460:
5461: /(?<![cd])[ab]/
5462: dbaacb
5463: 0: a
5464:
5465: /(?<!(c|d))b/
5466:
5467: /(?<!(c|d))[ab]/
5468: dbaacb
5469: 0: a
5470:
5471: /(?<!cd)[ab]/
5472: cdaccb
5473: 0: b
5474:
5475: /^(?:a?b?)*$/
5476: \
5477: 0:
5478: a
5479: 0: a
5480: ab
5481: 0: ab
5482: aaa
5483: 0: aaa
5484: *** Failers
5485: No match
5486: dbcb
5487: No match
5488: a--
5489: No match
5490: aa--
5491: No match
5492:
5493: /((?s)^a(.))((?m)^b$)/
5494: a\nb\nc\n
5495: 0: a\x0ab
5496: 1: a\x0a
5497: 2: \x0a
5498: 3: b
5499:
5500: /((?m)^b$)/
5501: a\nb\nc\n
5502: 0: b
5503: 1: b
5504:
5505: /(?m)^b/
5506: a\nb\n
5507: 0: b
5508:
5509: /(?m)^(b)/
5510: a\nb\n
5511: 0: b
5512: 1: b
5513:
5514: /((?m)^b)/
5515: a\nb\n
5516: 0: b
5517: 1: b
5518:
5519: /\n((?m)^b)/
5520: a\nb\n
5521: 0: \x0ab
5522: 1: b
5523:
5524: /((?s).)c(?!.)/
5525: a\nb\nc\n
5526: 0: \x0ac
5527: 1: \x0a
5528: a\nb\nc\n
5529: 0: \x0ac
5530: 1: \x0a
5531:
5532: /((?s)b.)c(?!.)/
5533: a\nb\nc\n
5534: 0: b\x0ac
5535: 1: b\x0a
5536: a\nb\nc\n
5537: 0: b\x0ac
5538: 1: b\x0a
5539:
5540: /^b/
5541:
5542: /()^b/
5543: *** Failers
5544: No match
5545: a\nb\nc\n
5546: No match
5547: a\nb\nc\n
5548: No match
5549:
5550: /((?m)^b)/
5551: a\nb\nc\n
5552: 0: b
5553: 1: b
5554:
5555: /(x)?(?(1)a|b)/
5556: *** Failers
5557: No match
5558: a
5559: No match
5560: a
5561: No match
5562:
5563: /(x)?(?(1)b|a)/
5564: a
5565: 0: a
5566:
5567: /()?(?(1)b|a)/
5568: a
5569: 0: a
5570:
5571: /()(?(1)b|a)/
5572:
5573: /()?(?(1)a|b)/
5574: a
5575: 0: a
5576: 1:
5577:
5578: /^(\()?blah(?(1)(\)))$/
5579: (blah)
5580: 0: (blah)
5581: 1: (
5582: 2: )
5583: blah
5584: 0: blah
5585: *** Failers
5586: No match
5587: a
5588: No match
5589: blah)
5590: No match
5591: (blah
5592: No match
5593:
5594: /^(\(+)?blah(?(1)(\)))$/
5595: (blah)
5596: 0: (blah)
5597: 1: (
5598: 2: )
5599: blah
5600: 0: blah
5601: *** Failers
5602: No match
5603: blah)
5604: No match
5605: (blah
5606: No match
5607:
5608: /(?(?!a)a|b)/
5609:
5610: /(?(?!a)b|a)/
5611: a
5612: 0: a
5613:
5614: /(?(?=a)b|a)/
5615: *** Failers
5616: No match
5617: a
5618: No match
5619: a
5620: No match
5621:
5622: /(?(?=a)a|b)/
5623: a
5624: 0: a
5625:
5626: /(?=(a+?))(\1ab)/
5627: aaab
5628: 0: aab
5629: 1: a
5630: 2: aab
5631:
5632: /^(?=(a+?))\1ab/
5633:
5634: /(\w+:)+/
5635: one:
5636: 0: one:
5637: 1: one:
5638:
5639: /$(?<=^(a))/
5640: a
5641: 0:
5642: 1: a
5643:
5644: /(?=(a+?))(\1ab)/
5645: aaab
5646: 0: aab
5647: 1: a
5648: 2: aab
5649:
5650: /^(?=(a+?))\1ab/
5651: *** Failers
5652: No match
5653: aaab
5654: No match
5655: aaab
5656: No match
5657:
5658: /([\w:]+::)?(\w+)$/
5659: abcd
5660: 0: abcd
5661: 1: <unset>
5662: 2: abcd
5663: xy:z:::abcd
5664: 0: xy:z:::abcd
5665: 1: xy:z:::
5666: 2: abcd
5667:
5668: /^[^bcd]*(c+)/
5669: aexycd
5670: 0: aexyc
5671: 1: c
5672:
5673: /(a*)b+/
5674: caab
5675: 0: aab
5676: 1: aa
5677:
5678: /([\w:]+::)?(\w+)$/
5679: abcd
5680: 0: abcd
5681: 1: <unset>
5682: 2: abcd
5683: xy:z:::abcd
5684: 0: xy:z:::abcd
5685: 1: xy:z:::
5686: 2: abcd
5687: *** Failers
5688: 0: Failers
5689: 1: <unset>
5690: 2: Failers
5691: abcd:
5692: No match
5693: abcd:
5694: No match
5695:
5696: /^[^bcd]*(c+)/
5697: aexycd
5698: 0: aexyc
5699: 1: c
5700:
5701: /(>a+)ab/
5702:
5703: /(?>a+)b/
5704: aaab
5705: 0: aaab
5706:
5707: /([[:]+)/
5708: a:[b]:
5709: 0: :[
5710: 1: :[
5711:
5712: /([[=]+)/
5713: a=[b]=
5714: 0: =[
5715: 1: =[
5716:
5717: /([[.]+)/
5718: a.[b].
5719: 0: .[
5720: 1: .[
5721:
5722: /((?>a+)b)/
5723: aaab
5724: 0: aaab
5725: 1: aaab
5726:
5727: /(?>(a+))b/
5728: aaab
5729: 0: aaab
5730: 1: aaa
5731:
5732: /((?>[^()]+)|\([^()]*\))+/
5733: ((abc(ade)ufh()()x
5734: 0: abc(ade)ufh()()x
5735: 1: x
5736:
5737: /a\Z/
5738: *** Failers
5739: No match
5740: aaab
5741: No match
5742: a\nb\n
5743: No match
5744:
5745: /b\Z/
5746: a\nb\n
5747: 0: b
5748:
5749: /b\z/
5750:
5751: /b\Z/
5752: a\nb
5753: 0: b
5754:
5755: /b\z/
5756: a\nb
5757: 0: b
5758: *** Failers
5759: No match
5760:
5761: /^(?>(?(1)\.|())[^\W_](?>[a-z0-9-]*[^\W_])?)+$/
5762: a
5763: 0: a
5764: 1:
5765: abc
5766: 0: abc
5767: 1:
5768: a-b
5769: 0: a-b
5770: 1:
5771: 0-9
5772: 0: 0-9
5773: 1:
5774: a.b
5775: 0: a.b
5776: 1:
5777: 5.6.7
5778: 0: 5.6.7
5779: 1:
5780: the.quick.brown.fox
5781: 0: the.quick.brown.fox
5782: 1:
5783: a100.b200.300c
5784: 0: a100.b200.300c
5785: 1:
5786: 12-ab.1245
5787: 0: 12-ab.1245
5788: 1:
5789: *** Failers
5790: No match
5791: \
5792: No match
5793: .a
5794: No match
5795: -a
5796: No match
5797: a-
5798: No match
5799: a.
5800: No match
5801: a_b
5802: No match
5803: a.-
5804: No match
5805: a..
5806: No match
5807: ab..bc
5808: No match
5809: the.quick.brown.fox-
5810: No match
5811: the.quick.brown.fox.
5812: No match
5813: the.quick.brown.fox_
5814: No match
5815: the.quick.brown.fox+
5816: No match
5817:
5818: /(?>.*)(?<=(abcd|wxyz))/
5819: alphabetabcd
5820: 0: alphabetabcd
5821: 1: abcd
5822: endingwxyz
5823: 0: endingwxyz
5824: 1: wxyz
5825: *** Failers
5826: No match
5827: a rather long string that doesn't end with one of them
5828: No match
5829:
5830: /word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
5831: word cat dog elephant mussel cow horse canary baboon snake shark otherword
5832: 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
5833: word cat dog elephant mussel cow horse canary baboon snake shark
5834: No match
5835:
5836: /word (?>[a-zA-Z0-9]+ ){0,30}otherword/
5837: 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
5838: No match
5839:
5840: /(?<=\d{3}(?!999))foo/
5841: 999foo
5842: 0: foo
5843: 123999foo
5844: 0: foo
5845: *** Failers
5846: No match
5847: 123abcfoo
5848: No match
5849:
5850: /(?<=(?!...999)\d{3})foo/
5851: 999foo
5852: 0: foo
5853: 123999foo
5854: 0: foo
5855: *** Failers
5856: No match
5857: 123abcfoo
5858: No match
5859:
5860: /(?<=\d{3}(?!999)...)foo/
5861: 123abcfoo
5862: 0: foo
5863: 123456foo
5864: 0: foo
5865: *** Failers
5866: No match
5867: 123999foo
5868: No match
5869:
5870: /(?<=\d{3}...)(?<!999)foo/
5871: 123abcfoo
5872: 0: foo
5873: 123456foo
5874: 0: foo
5875: *** Failers
5876: No match
5877: 123999foo
5878: No match
5879:
5880: /<a[\s]+href[\s]*=[\s]* # find <a href=
5881: ([\"\'])? # find single or double quote
5882: (?(1) (.*?)\1 | ([^\s]+)) # if quote found, match up to next matching
5883: # quote, otherwise match up to next space
5884: /isx
5885: <a href=abcd xyz
5886: 0: <a href=abcd
5887: 1: <unset>
5888: 2: <unset>
5889: 3: abcd
5890: <a href=\"abcd xyz pqr\" cats
5891: 0: <a href="abcd xyz pqr"
5892: 1: "
5893: 2: abcd xyz pqr
5894: <a href=\'abcd xyz pqr\' cats
5895: 0: <a href='abcd xyz pqr'
5896: 1: '
5897: 2: abcd xyz pqr
5898:
5899: /<a\s+href\s*=\s* # find <a href=
5900: (["'])? # find single or double quote
5901: (?(1) (.*?)\1 | (\S+)) # if quote found, match up to next matching
5902: # quote, otherwise match up to next space
5903: /isx
5904: <a href=abcd xyz
5905: 0: <a href=abcd
5906: 1: <unset>
5907: 2: <unset>
5908: 3: abcd
5909: <a href=\"abcd xyz pqr\" cats
5910: 0: <a href="abcd xyz pqr"
5911: 1: "
5912: 2: abcd xyz pqr
5913: <a href = \'abcd xyz pqr\' cats
5914: 0: <a href = 'abcd xyz pqr'
5915: 1: '
5916: 2: abcd xyz pqr
5917:
5918: /<a\s+href(?>\s*)=(?>\s*) # find <a href=
5919: (["'])? # find single or double quote
5920: (?(1) (.*?)\1 | (\S+)) # if quote found, match up to next matching
5921: # quote, otherwise match up to next space
5922: /isx
5923: <a href=abcd xyz
5924: 0: <a href=abcd
5925: 1: <unset>
5926: 2: <unset>
5927: 3: abcd
5928: <a href=\"abcd xyz pqr\" cats
5929: 0: <a href="abcd xyz pqr"
5930: 1: "
5931: 2: abcd xyz pqr
5932: <a href = \'abcd xyz pqr\' cats
5933: 0: <a href = 'abcd xyz pqr'
5934: 1: '
5935: 2: abcd xyz pqr
5936:
5937: /((Z)+|A)*/
5938: ZABCDEFG
5939: 0: ZA
5940: 1: A
5941: 2: Z
5942:
5943: /(Z()|A)*/
5944: ZABCDEFG
5945: 0: ZA
5946: 1: A
5947: 2:
5948:
5949: /(Z(())|A)*/
5950: ZABCDEFG
5951: 0: ZA
5952: 1: A
5953: 2:
5954: 3:
5955:
5956: /((?>Z)+|A)*/
5957: ZABCDEFG
5958: 0: ZA
5959: 1: A
5960:
5961: /((?>)+|A)*/
5962: ZABCDEFG
5963: 0:
5964: 1:
5965:
5966: /a*/g
5967: abbab
5968: 0: a
5969: 0:
5970: 0:
5971: 0: a
5972: 0:
5973: 0:
5974:
5975: /^[a-\d]/
5976: abcde
5977: 0: a
5978: -things
5979: 0: -
5980: 0digit
5981: 0: 0
5982: *** Failers
5983: No match
5984: bcdef
5985: No match
5986:
5987: /^[\d-a]/
5988: abcde
5989: 0: a
5990: -things
5991: 0: -
5992: 0digit
5993: 0: 0
5994: *** Failers
5995: No match
5996: bcdef
5997: No match
5998:
5999: /[[:space:]]+/
6000: > \x09\x0a\x0c\x0d\x0b<
6001: 0: \x09\x0a\x0c\x0d\x0b
6002:
6003: /[[:blank:]]+/
6004: > \x09\x0a\x0c\x0d\x0b<
6005: 0: \x09
6006:
6007: /[\s]+/
6008: > \x09\x0a\x0c\x0d\x0b<
6009: 0: \x09\x0a\x0c\x0d
6010:
6011: /\s+/
6012: > \x09\x0a\x0c\x0d\x0b<
6013: 0: \x09\x0a\x0c\x0d
6014:
6015: /ab/x
6016: ab
6017: No match
6018:
6019: /(?!\A)x/m
6020: a\nxb\n
6021: 0: x
6022:
6023: /(?!^)x/m
6024: a\nxb\n
6025: No match
6026:
6027: /abc\Qabc\Eabc/
6028: abcabcabc
6029: 0: abcabcabc
6030:
6031: /abc\Q(*+|\Eabc/
6032: abc(*+|abc
6033: 0: abc(*+|abc
6034:
6035: / abc\Q abc\Eabc/x
6036: abc abcabc
6037: 0: abc abcabc
6038: *** Failers
6039: No match
6040: abcabcabc
6041: No match
6042:
6043: /abc#comment
6044: \Q#not comment
6045: literal\E/x
6046: abc#not comment\n literal
6047: 0: abc#not comment\x0a literal
6048:
6049: /abc#comment
6050: \Q#not comment
6051: literal/x
6052: abc#not comment\n literal
6053: 0: abc#not comment\x0a literal
6054:
6055: /abc#comment
6056: \Q#not comment
6057: literal\E #more comment
6058: /x
6059: abc#not comment\n literal
6060: 0: abc#not comment\x0a literal
6061:
6062: /abc#comment
6063: \Q#not comment
6064: literal\E #more comment/x
6065: abc#not comment\n literal
6066: 0: abc#not comment\x0a literal
6067:
6068: /\Qabc\$xyz\E/
6069: abc\\\$xyz
6070: 0: abc\$xyz
6071:
6072: /\Qabc\E\$\Qxyz\E/
6073: abc\$xyz
6074: 0: abc$xyz
6075:
6076: /\Gabc/
6077: abc
6078: 0: abc
6079: *** Failers
6080: No match
6081: xyzabc
6082: No match
6083:
6084: /\Gabc./g
6085: abc1abc2xyzabc3
6086: 0: abc1
6087: 0: abc2
6088:
6089: /abc./g
6090: abc1abc2xyzabc3
6091: 0: abc1
6092: 0: abc2
6093: 0: abc3
6094:
6095: /a(?x: b c )d/
6096: XabcdY
6097: 0: abcd
6098: *** Failers
6099: No match
6100: Xa b c d Y
6101: No match
6102:
6103: /((?x)x y z | a b c)/
6104: XabcY
6105: 0: abc
6106: 1: abc
6107: AxyzB
6108: 0: xyz
6109: 1: xyz
6110:
6111: /(?i)AB(?-i)C/
6112: XabCY
6113: 0: abC
6114: *** Failers
6115: No match
6116: XabcY
6117: No match
6118:
6119: /((?i)AB(?-i)C|D)E/
6120: abCE
6121: 0: abCE
6122: 1: abC
6123: DE
6124: 0: DE
6125: 1: D
6126: *** Failers
6127: No match
6128: abcE
6129: No match
6130: abCe
6131: No match
6132: dE
6133: No match
6134: De
6135: No match
6136:
6137: /(.*)\d+\1/
6138: abc123abc
6139: 0: abc123abc
6140: 1: abc
6141: abc123bc
6142: 0: bc123bc
6143: 1: bc
6144:
6145: /(.*)\d+\1/s
6146: abc123abc
6147: 0: abc123abc
6148: 1: abc
6149: abc123bc
6150: 0: bc123bc
6151: 1: bc
6152:
6153: /((.*))\d+\1/
6154: abc123abc
6155: 0: abc123abc
6156: 1: abc
6157: 2: abc
6158: abc123bc
6159: 0: bc123bc
6160: 1: bc
6161: 2: bc
6162:
6163: /-- This tests for an IPv6 address in the form where it can have up to --/
6164: /-- eight components, one and only one of which is empty. This must be --/
6165: No match
6166: /-- an internal component. --/
6167: No match
6168:
6169: /^(?!:) # colon disallowed at start
6170: (?: # start of item
6171: (?: [0-9a-f]{1,4} | # 1-4 hex digits or
6172: (?(1)0 | () ) ) # if null previously matched, fail; else null
6173: : # followed by colon
6174: ){1,7} # end item; 1-7 of them required
6175: [0-9a-f]{1,4} $ # final hex number at end of string
6176: (?(1)|.) # check that there was an empty component
6177: /xi
6178: a123::a123
6179: 0: a123::a123
6180: 1:
6181: a123:b342::abcd
6182: 0: a123:b342::abcd
6183: 1:
6184: a123:b342::324e:abcd
6185: 0: a123:b342::324e:abcd
6186: 1:
6187: a123:ddde:b342::324e:abcd
6188: 0: a123:ddde:b342::324e:abcd
6189: 1:
6190: a123:ddde:b342::324e:dcba:abcd
6191: 0: a123:ddde:b342::324e:dcba:abcd
6192: 1:
6193: a123:ddde:9999:b342::324e:dcba:abcd
6194: 0: a123:ddde:9999:b342::324e:dcba:abcd
6195: 1:
6196: *** Failers
6197: No match
6198: 1:2:3:4:5:6:7:8
6199: No match
6200: a123:bce:ddde:9999:b342::324e:dcba:abcd
6201: No match
6202: a123::9999:b342::324e:dcba:abcd
6203: No match
6204: abcde:2:3:4:5:6:7:8
6205: No match
6206: ::1
6207: No match
6208: abcd:fee0:123::
6209: No match
6210: :1
6211: No match
6212: 1:
6213: No match
6214:
6215: /[z\Qa-d]\E]/
6216: z
6217: 0: z
6218: a
6219: 0: a
6220: -
6221: 0: -
6222: d
6223: 0: d
6224: ]
6225: 0: ]
6226: *** Failers
6227: 0: a
6228: b
6229: No match
6230:
6231: /[\z\C]/
6232: z
6233: 0: z
6234: C
6235: 0: C
6236:
6237: /\M/
6238: M
6239: 0: M
6240:
6241: /(a+)*b/
6242: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
6243: No match
6244:
6245: /(?i)reg(?:ul(?:[a]|ae)r|ex)/
6246: REGular
6247: 0: REGular
6248: regulaer
6249: 0: regulaer
6250: Regex
6251: 0: Regex
6252: regulr
6253: 0: regul\xe4r
6254:
6255: /[--]+/
6256:
6257: 0: \xc5\xe6\xe5\xe4\xe0
6258:
6259: 0: \xc5\xe6\xe5\xe4\xff
6260:
6261: 0: \xc5\xe6\xe5\xe4\xc0
6262:
6263: 0: \xc5\xe6\xe5\xe4\xdf
6264:
6265: /(?<=Z)X./
6266: \x84XAZXB
6267: 0: XB
6268:
6269: /ab cd (?x) de fg/
6270: ab cd defg
6271: 0: ab cd defg
6272:
6273: /ab cd(?x) de fg/
6274: ab cddefg
6275: 0: ab cddefg
6276: ** Failers
6277: No match
6278: abcddefg
6279: No match
6280:
6281: /(?<![^f]oo)(bar)/
6282: foobarX
6283: 0: bar
6284: 1: bar
6285: ** Failers
6286: No match
6287: boobarX
6288: No match
6289:
6290: /(?<![^f])X/
6291: offX
6292: 0: X
6293: ** Failers
6294: No match
6295: onyX
6296: No match
6297:
6298: /(?<=[^f])X/
6299: onyX
6300: 0: X
6301: ** Failers
6302: No match
6303: offX
6304: No match
6305:
6306: /^/mg
6307: a\nb\nc\n
6308: 0:
6309: 0:
6310: 0:
6311: \
6312: 0:
6313:
6314: /(?<=C\n)^/mg
6315: A\nC\nC\n
6316: 0:
6317:
6318: /(?:(?(1)a|b)(X))+/
6319: bXaX
6320: 0: bXaX
6321: 1: X
6322:
6323: /(?:(?(1)\1a|b)(X|Y))+/
6324: bXXaYYaY
6325: 0: bXXaYYaY
6326: 1: Y
6327: bXYaXXaX
6328: 0: bX
6329: 1: X
6330:
6331: /()()()()()()()()()(?:(?(10)\10a|b)(X|Y))+/
6332: bXXaYYaY
6333: 0: bX
6334: 1:
6335: 2:
6336: 3:
6337: 4:
6338: 5:
6339: 6:
6340: 7:
6341: 8:
6342: 9:
6343: 10: X
6344:
6345: /[[,abc,]+]/
6346: abc]
6347: 0: abc]
6348: a,b]
6349: 0: a,b]
6350: [a,b,c]
6351: 0: [a,b,c]
6352:
6353: /(?-x: )/x
6354: A\x20B
6355: 0:
6356:
6357: "(?x)(?-x: \s*#\s*)"
6358: A # B
6359: 0: #
6360: ** Failers
6361: No match
6362: #
6363: No match
6364:
6365: "(?x-is)(?:(?-ixs) \s*#\s*) include"
6366: A #include
6367: 0: #include
6368: ** Failers
6369: No match
6370: A#include
6371: No match
6372: A #Include
6373: No match
6374:
6375: /a*b*\w/
6376: aaabbbb
6377: 0: aaabbbb
6378: aaaa
6379: 0: aaaa
6380: a
6381: 0: a
6382:
6383: /a*b?\w/
6384: aaabbbb
6385: 0: aaabb
6386: aaaa
6387: 0: aaaa
6388: a
6389: 0: a
6390:
6391: /a*b{0,4}\w/
6392: aaabbbb
6393: 0: aaabbbb
6394: aaaa
6395: 0: aaaa
6396: a
6397: 0: a
6398:
6399: /a*b{0,}\w/
6400: aaabbbb
6401: 0: aaabbbb
6402: aaaa
6403: 0: aaaa
6404: a
6405: 0: a
6406:
6407: /a*\d*\w/
6408: 0a
6409: 0: 0a
6410: a
6411: 0: a
6412:
6413: /a*b *\w/x
6414: a
6415: 0: a
6416:
6417: /a*b#comment
6418: *\w/x
6419: a
6420: 0: a
6421:
6422: /a* b *\w/x
6423: a
6424: 0: a
6425:
6426: /^\w+=.*(\\\n.*)*/
6427: abc=xyz\\\npqr
6428: 0: abc=xyz\
6429:
6430: /(?=(\w+))\1:/
6431: abcd:
6432: 0: abcd:
6433: 1: abcd
6434:
6435: /^(?=(\w+))\1:/
6436: abcd:
6437: 0: abcd:
6438: 1: abcd
6439:
6440: /^\Eabc/
6441: abc
6442: 0: abc
6443:
6444: /^[\Eabc]/
6445: a
6446: 0: a
6447: ** Failers
6448: No match
6449: E
6450: No match
6451:
6452: /^[a-\Ec]/
6453: b
6454: 0: b
6455: ** Failers
6456: No match
6457: -
6458: No match
6459: E
6460: No match
6461:
6462: /^[a\E\E-\Ec]/
6463: b
6464: 0: b
6465: ** Failers
6466: No match
6467: -
6468: No match
6469: E
6470: No match
6471:
6472: /^[\E\Qa\E-\Qz\E]+/
6473: b
6474: 0: b
6475: ** Failers
6476: No match
6477: -
6478: No match
6479:
6480: /^[a\Q]bc\E]/
6481: a
6482: 0: a
6483: ]
6484: 0: ]
6485: c
6486: 0: c
6487:
6488: /^[a-\Q\E]/
6489: a
6490: 0: a
6491: -
6492: 0: -
6493:
6494: /^(a()*)*/
6495: aaaa
6496: 0: aaaa
6497: 1: a
6498: 2:
6499:
6500: /^(?:a(?:(?:))*)*/
6501: aaaa
6502: 0: aaaa
6503:
6504: /^(a()+)+/
6505: aaaa
6506: 0: aaaa
6507: 1: a
6508: 2:
6509:
6510: /^(?:a(?:(?:))+)+/
6511: aaaa
6512: 0: aaaa
6513:
6514: /(a){0,3}(?(1)b|(c|))*D/
6515: abbD
6516: 0: abbD
6517: 1: a
6518: ccccD
6519: 0: ccccD
6520: 1: <unset>
6521: 2:
6522: D
6523: 0: D
6524: 1: <unset>
6525: 2:
6526:
6527: /(a|)*\d/
6528: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
6529: No match
6530: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
6531: 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
6532: 1:
6533:
6534: /(?>a|)*\d/
6535: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
6536: No match
6537: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
6538: 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
6539:
6540: /(?:a|)*\d/
6541: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
6542: No match
6543: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
6544: 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
6545:
6546: /\Z/g
6547: abc\n
6548: 0:
6549: 0:
6550:
6551: /^(?s)(?>.*)(?<!\n)/
6552: abc
6553: 0: abc
6554: abc\n
6555: No match
6556:
6557: /^(?![^\n]*\n\z)/
6558: abc
6559: 0:
6560: abc\n
6561: No match
6562:
6563: /\z(?<!\n)/
6564: abc
6565: 0:
6566: abc\n
6567: No match
6568:
6569: /(.*(.)?)*/
6570: abcd
6571: 0: abcd
6572: 1:
6573:
6574: /( (A | (?(1)0|) )* )/x
6575: abcd
6576: 0:
6577: 1:
6578: 2:
6579:
6580: /( ( (?(1)0|) )* )/x
6581: abcd
6582: 0:
6583: 1:
6584: 2:
6585:
6586: /( (?(1)0|)* )/x
6587: abcd
6588: 0:
6589: 1:
6590:
6591: /[[:abcd:xyz]]/
6592: a]
6593: 0: a]
6594: :]
6595: 0: :]
6596:
6597: /[abc[:x\]pqr]/
6598: a
6599: 0: a
6600: [
6601: 0: [
6602: :
6603: 0: :
6604: ]
6605: 0: ]
6606: p
6607: 0: p
6608:
6609: /.*[op][xyz]/
6610: fooabcfoo
6611: No match
6612:
6613: /(?(?=.*b)b|^)/
6614: adc
6615: 0:
6616: abc
6617: 0: b
6618:
6619: /(?(?=^.*b)b|^)/
6620: adc
6621: 0:
6622: abc
6623: No match
6624:
6625: /(?(?=.*b)b|^)*/
6626: adc
6627: 0:
6628: abc
6629: 0:
6630:
6631: /(?(?=.*b)b|^)+/
6632: adc
6633: 0:
6634: abc
6635: 0: b
6636:
6637: /(?(?=b).*b|^d)/
6638: abc
6639: 0: b
6640:
6641: /(?(?=.*b).*b|^d)/
6642: abc
6643: 0: ab
6644:
6645: /^%((?(?=[a])[^%])|b)*%$/
6646: %ab%
6647: 0: %ab%
6648: 1:
6649:
6650: /(?i)a(?-i)b|c/
6651: XabX
6652: 0: ab
6653: XAbX
6654: 0: Ab
6655: CcC
6656: 0: c
6657: ** Failers
6658: No match
6659: XABX
6660: No match
6661:
6662: /[\x00-\xff\s]+/
6663: \x0a\x0b\x0c\x0d
6664: 0: \x0a\x0b\x0c\x0d
6665:
6666: /^\c/
6667: ?
6668: 0: ?
6669:
1.1.1.2 ! misho 6670: /(abc)\1/i
! 6671: abc
! 6672: No match
! 6673:
! 6674: /(abc)\1/
! 6675: abc
! 6676: No match
! 6677:
! 6678: /[^a]*/i
! 6679: 12abc
! 6680: 0: 12
! 6681: 12ABC
! 6682: 0: 12
! 6683:
! 6684: /[^a]*+/i
! 6685: 12abc
! 6686: 0: 12
! 6687: 12ABC
! 6688: 0: 12
! 6689:
! 6690: /[^a]*?X/i
! 6691: ** Failers
! 6692: No match
! 6693: 12abc
! 6694: No match
! 6695: 12ABC
! 6696: No match
! 6697:
! 6698: /[^a]+?X/i
! 6699: ** Failers
! 6700: No match
! 6701: 12abc
! 6702: No match
! 6703: 12ABC
! 6704: No match
! 6705:
! 6706: /[^a]?X/i
! 6707: 12aXbcX
! 6708: 0: X
! 6709: 12AXBCX
! 6710: 0: X
! 6711: BCX
! 6712: 0: CX
! 6713:
! 6714: /[^a]??X/i
! 6715: 12aXbcX
! 6716: 0: X
! 6717: 12AXBCX
! 6718: 0: X
! 6719: BCX
! 6720: 0: CX
! 6721:
! 6722: /[^a]?+X/i
! 6723: 12aXbcX
! 6724: 0: cX
! 6725: 12AXBCX
! 6726: 0: CX
! 6727: BCX
! 6728: 0: CX
! 6729:
! 6730: /[^a]{2,3}/i
! 6731: abcdef
! 6732: 0: bcd
! 6733: ABCDEF
! 6734: 0: BCD
! 6735:
! 6736: /[^a]{2,3}?/i
! 6737: abcdef
! 6738: 0: bc
! 6739: ABCDEF
! 6740: 0: BC
! 6741:
! 6742: /[^a]{2,3}+/i
! 6743: abcdef
! 6744: 0: bcd
! 6745: ABCDEF
! 6746: 0: BCD
! 6747:
! 6748: /((a|)+)+Z/
! 6749: Z
! 6750: 0: Z
! 6751: 1:
! 6752: 2:
! 6753:
! 6754: /(a)b|(a)c/
! 6755: ac
! 6756: 0: ac
! 6757: 1: <unset>
! 6758: 2: a
! 6759:
! 6760: /(?>(a))b|(a)c/
! 6761: ac
! 6762: 0: ac
! 6763: 1: <unset>
! 6764: 2: a
! 6765:
! 6766: /(?=(a))ab|(a)c/
! 6767: ac
! 6768: 0: ac
! 6769: 1: <unset>
! 6770: 2: a
! 6771:
! 6772: /((?>(a))b|(a)c)/
! 6773: ac
! 6774: 0: ac
! 6775: 1: ac
! 6776: 2: <unset>
! 6777: 3: a
! 6778:
! 6779: /((?>(a))b|(a)c)++/
! 6780: ac
! 6781: 0: ac
! 6782: 1: ac
! 6783: 2: <unset>
! 6784: 3: a
! 6785:
! 6786: /(?:(?>(a))b|(a)c)++/
! 6787: ac
! 6788: 0: ac
! 6789: 1: <unset>
! 6790: 2: a
! 6791:
! 6792: /(?=(?>(a))b|(a)c)(..)/
! 6793: ac
! 6794: 0: ac
! 6795: 1: <unset>
! 6796: 2: a
! 6797: 3: ac
! 6798:
! 6799: /(?>(?>(a))b|(a)c)/
! 6800: ac
! 6801: 0: ac
! 6802: 1: <unset>
! 6803: 2: a
! 6804:
! 6805: /(?:(?>([ab])))+a=/+
! 6806: =ba=
! 6807: 0: ba=
! 6808: 0+
! 6809: 1: b
! 6810:
! 6811: /(?>([ab]))+a=/+
! 6812: =ba=
! 6813: 0: ba=
! 6814: 0+
! 6815: 1: b
! 6816:
! 6817: /((?>(a+)b)+(aabab))/
! 6818: aaaabaaabaabab
! 6819: 0: aaaabaaabaabab
! 6820: 1: aaaabaaabaabab
! 6821: 2: aaa
! 6822: 3: aabab
! 6823:
! 6824: /(?>a+|ab)+?c/
! 6825: aabc
! 6826: No match
! 6827:
! 6828: /(?>a+|ab)+c/
! 6829: aabc
! 6830: No match
! 6831:
! 6832: /(?:a+|ab)+c/
! 6833: aabc
! 6834: 0: aabc
! 6835:
! 6836: /(?(?=(a))a)/
! 6837: a
! 6838: 0: a
! 6839: 1: a
! 6840:
! 6841: /(?(?=(a))a)(b)/
! 6842: ab
! 6843: 0: ab
! 6844: 1: a
! 6845: 2: b
! 6846:
! 6847: /^(?:a|ab)++c/
! 6848: aaaabc
! 6849: No match
! 6850:
! 6851: /^(?>a|ab)++c/
! 6852: aaaabc
! 6853: No match
! 6854:
! 6855: /^(?:a|ab)+c/
! 6856: aaaabc
! 6857: 0: aaaabc
! 6858:
! 6859: /(?=abc){3}abc/+
! 6860: abcabcabc
! 6861: 0: abc
! 6862: 0+ abcabc
! 6863: ** Failers
! 6864: No match
! 6865: xyz
! 6866: No match
! 6867:
! 6868: /(?=abc)+abc/+
! 6869: abcabcabc
! 6870: 0: abc
! 6871: 0+ abcabc
! 6872: ** Failers
! 6873: No match
! 6874: xyz
! 6875: No match
! 6876:
! 6877: /(?=abc)++abc/+
! 6878: abcabcabc
! 6879: 0: abc
! 6880: 0+ abcabc
! 6881: ** Failers
! 6882: No match
! 6883: xyz
! 6884: No match
! 6885:
! 6886: /(?=abc){0}xyz/
! 6887: xyz
! 6888: 0: xyz
! 6889:
! 6890: /(?=abc){1}xyz/
! 6891: ** Failers
! 6892: No match
! 6893: xyz
! 6894: No match
! 6895:
! 6896: /(?=(a))?./
! 6897: ab
! 6898: 0: a
! 6899: 1: a
! 6900: bc
! 6901: 0: b
! 6902:
! 6903: /(?=(a))??./
! 6904: ab
! 6905: 0: a
! 6906: bc
! 6907: 0: b
! 6908:
! 6909: /^(?=(a)){0}b(?1)/
! 6910: backgammon
! 6911: 0: ba
! 6912:
! 6913: /^(?=(?1))?[az]([abc])d/
! 6914: abd
! 6915: 0: abd
! 6916: 1: b
! 6917: zcdxx
! 6918: 0: zcd
! 6919: 1: c
! 6920:
! 6921: /^(?!a){0}\w+/
! 6922: aaaaa
! 6923: 0: aaaaa
! 6924:
! 6925: /(?<=(abc))?xyz/
! 6926: abcxyz
! 6927: 0: xyz
! 6928: 1: abc
! 6929: pqrxyz
! 6930: 0: xyz
! 6931:
! 6932: /^[\g<a>]+/
! 6933: ggg<<<aaa>>>
! 6934: 0: ggg<<<aaa>>>
! 6935: ** Failers
! 6936: No match
! 6937: \\ga
! 6938: No match
! 6939:
! 6940: /^[\ga]+/
! 6941: gggagagaxyz
! 6942: 0: gggagaga
! 6943:
! 6944: /^[:a[:digit:]]+/
! 6945: aaaa444:::Z
! 6946: 0: aaaa444:::
! 6947:
! 6948: /^[:a[:digit:]:b]+/
! 6949: aaaa444:::bbbZ
! 6950: 0: aaaa444:::bbb
! 6951:
! 6952: /[:a]xxx[b:]/
! 6953: :xxx:
! 6954: 0: :xxx:
! 6955:
! 6956: /(?<=a{2})b/i
! 6957: xaabc
! 6958: 0: b
! 6959: ** Failers
! 6960: No match
! 6961: xabc
! 6962: No match
! 6963:
! 6964: /(?<!a{2})b/i
! 6965: xabc
! 6966: 0: b
! 6967: ** Failers
! 6968: No match
! 6969: xaabc
! 6970: No match
! 6971:
! 6972: /(?<=a\h)c/
! 6973: xa c
! 6974: 0: c
! 6975:
! 6976: /(?<=[^a]{2})b/
! 6977: axxbc
! 6978: 0: b
! 6979: aAAbc
! 6980: 0: b
! 6981: ** Failers
! 6982: No match
! 6983: xaabc
! 6984: No match
! 6985:
! 6986: /(?<=[^a]{2})b/i
! 6987: axxbc
! 6988: 0: b
! 6989: ** Failers
! 6990: No match
! 6991: aAAbc
! 6992: No match
! 6993: xaabc
! 6994: No match
! 6995:
! 6996: /(?<=a\H)c/
! 6997: abc
! 6998: 0: c
! 6999:
! 7000: /(?<=a\V)c/
! 7001: abc
! 7002: 0: c
! 7003:
! 7004: /(?<=a\v)c/
! 7005: a\nc
! 7006: 0: c
! 7007:
! 7008: /(?(?=c)c|d)++Y/
! 7009: XcccddYX
! 7010: 0: cccddY
! 7011:
! 7012: /(?(?=c)c|d)*+Y/
! 7013: XcccddYX
! 7014: 0: cccddY
! 7015:
! 7016: /^(a{2,3}){2,}+a/
! 7017: aaaaaaa
! 7018: 0: aaaaaaa
! 7019: 1: aaa
! 7020: ** Failers
! 7021: No match
! 7022: aaaaaa
! 7023: No match
! 7024: aaaaaaaaa
! 7025: No match
! 7026:
! 7027: /^(a{2,3})++a/
! 7028: ** Failers
! 7029: No match
! 7030: aaaaaa
! 7031: No match
! 7032:
! 7033: /^(a{2,3})*+a/
! 7034: ** Failers
! 7035: No match
! 7036: aaaaaa
! 7037: No match
! 7038:
! 7039: /ab\Cde/
! 7040: abXde
! 7041: 0: abXde
! 7042:
! 7043: /(?<=ab\Cde)X/
! 7044: abZdeX
! 7045: 0: X
! 7046:
! 7047: /a[\CD]b/
! 7048: aCb
! 7049: 0: aCb
! 7050: aDb
! 7051: 0: aDb
! 7052:
! 7053: /a[\C-X]b/
! 7054: aJb
! 7055: 0: aJb
! 7056:
! 7057: /\H\h\V\v/
! 7058: X X\x0a
! 7059: 0: X X\x0a
! 7060: X\x09X\x0b
! 7061: 0: X\x09X\x0b
! 7062: ** Failers
! 7063: No match
! 7064: \xa0 X\x0a
! 7065: No match
! 7066:
! 7067: /\H*\h+\V?\v{3,4}/
! 7068: \x09\x20\xa0X\x0a\x0b\x0c\x0d\x0a
! 7069: 0: \x09 \xa0X\x0a\x0b\x0c\x0d
! 7070: \x09\x20\xa0\x0a\x0b\x0c\x0d\x0a
! 7071: 0: \x09 \xa0\x0a\x0b\x0c\x0d
! 7072: \x09\x20\xa0\x0a\x0b\x0c
! 7073: 0: \x09 \xa0\x0a\x0b\x0c
! 7074: ** Failers
! 7075: No match
! 7076: \x09\x20\xa0\x0a\x0b
! 7077: No match
! 7078:
! 7079: /\H{3,4}/
! 7080: XY ABCDE
! 7081: 0: ABCD
! 7082: XY PQR ST
! 7083: 0: PQR
! 7084:
! 7085: /.\h{3,4}./
! 7086: XY AB PQRS
! 7087: 0: B P
! 7088:
! 7089: /\h*X\h?\H+Y\H?Z/
! 7090: >XNNNYZ
! 7091: 0: XNNNYZ
! 7092: > X NYQZ
! 7093: 0: X NYQZ
! 7094: ** Failers
! 7095: No match
! 7096: >XYZ
! 7097: No match
! 7098: > X NY Z
! 7099: No match
! 7100:
! 7101: /\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c/
! 7102: >XY\x0aZ\x0aA\x0bNN\x0c
! 7103: 0: XY\x0aZ\x0aA\x0bNN\x0c
! 7104: >\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
! 7105: 0: \x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
! 7106:
! 7107: /(foo)\Kbar/
! 7108: foobar
! 7109: 0: bar
! 7110: 1: foo
! 7111:
! 7112: /(foo)(\Kbar|baz)/
! 7113: foobar
! 7114: 0: bar
! 7115: 1: foo
! 7116: 2: bar
! 7117: foobaz
! 7118: 0: foobaz
! 7119: 1: foo
! 7120: 2: baz
! 7121:
! 7122: /(foo\Kbar)baz/
! 7123: foobarbaz
! 7124: 0: barbaz
! 7125: 1: foobar
! 7126:
! 7127: /abc\K|def\K/g+
! 7128: Xabcdefghi
! 7129: 0:
! 7130: 0+ defghi
! 7131: 0:
! 7132: 0+ ghi
! 7133:
! 7134: /ab\Kc|de\Kf/g+
! 7135: Xabcdefghi
! 7136: 0: c
! 7137: 0+ defghi
! 7138: 0: f
! 7139: 0+ ghi
! 7140:
! 7141: /(?=C)/g+
! 7142: ABCDECBA
! 7143: 0:
! 7144: 0+ CDECBA
! 7145: 0:
! 7146: 0+ CBA
! 7147:
! 7148: /^abc\K/+
! 7149: abcdef
! 7150: 0:
! 7151: 0+ def
! 7152: ** Failers
! 7153: No match
! 7154: defabcxyz
! 7155: No match
! 7156:
! 7157: /^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-02}Z/
! 7158: ababababbbabZXXXX
! 7159: 0: ababababbbabZ
! 7160: 1: ab
! 7161: 2: b
! 7162:
! 7163: /(?<A>tom|bon)-\g{A}/
! 7164: tom-tom
! 7165: 0: tom-tom
! 7166: 1: tom
! 7167: bon-bon
! 7168: 0: bon-bon
! 7169: 1: bon
! 7170:
! 7171: /(^(a|b\g{-1}))/
! 7172: bacxxx
! 7173: No match
! 7174:
! 7175: /(?|(abc)|(xyz))\1/
! 7176: abcabc
! 7177: 0: abcabc
! 7178: 1: abc
! 7179: xyzxyz
! 7180: 0: xyzxyz
! 7181: 1: xyz
! 7182: ** Failers
! 7183: No match
! 7184: abcxyz
! 7185: No match
! 7186: xyzabc
! 7187: No match
! 7188:
! 7189: /(?|(abc)|(xyz))(?1)/
! 7190: abcabc
! 7191: 0: abcabc
! 7192: 1: abc
! 7193: xyzabc
! 7194: 0: xyzabc
! 7195: 1: xyz
! 7196: ** Failers
! 7197: No match
! 7198: xyzxyz
! 7199: No match
! 7200:
! 7201: /^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/
! 7202: XYabcdY
! 7203: 0: XYabcdY
! 7204: 1: a
! 7205: 2: b
! 7206: 3: c
! 7207: 4: d
! 7208: 5: Y
! 7209:
! 7210: /^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/
! 7211: XYabcdY
! 7212: 0: XYabcdY
! 7213: 1: a
! 7214: 2: b
! 7215: 3: <unset>
! 7216: 4: <unset>
! 7217: 5: c
! 7218: 6: d
! 7219: 7: Y
! 7220:
! 7221: /^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/
! 7222: XYabcdY
! 7223: 0: XYabcdY
! 7224: 1: a
! 7225: 2: b
! 7226: 3: <unset>
! 7227: 4: <unset>
! 7228: 5: c
! 7229: 6: d
! 7230: 7: Y
! 7231:
! 7232: /(?'abc'\w+):\k<abc>{2}/
! 7233: a:aaxyz
! 7234: 0: a:aa
! 7235: 1: a
! 7236: ab:ababxyz
! 7237: 0: ab:abab
! 7238: 1: ab
! 7239: ** Failers
! 7240: No match
! 7241: a:axyz
! 7242: No match
! 7243: ab:abxyz
! 7244: No match
! 7245:
! 7246: /(?'abc'\w+):\g{abc}{2}/
! 7247: a:aaxyz
! 7248: 0: a:aa
! 7249: 1: a
! 7250: ab:ababxyz
! 7251: 0: ab:abab
! 7252: 1: ab
! 7253: ** Failers
! 7254: No match
! 7255: a:axyz
! 7256: No match
! 7257: ab:abxyz
! 7258: No match
! 7259:
! 7260: /^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)/x
! 7261: abd
! 7262: 0: abd
! 7263: 1: a
! 7264: ce
! 7265: 0: ce
! 7266:
! 7267: /^(a.)\g-1Z/
! 7268: aXaXZ
! 7269: 0: aXaXZ
! 7270: 1: aX
! 7271:
! 7272: /^(a.)\g{-1}Z/
! 7273: aXaXZ
! 7274: 0: aXaXZ
! 7275: 1: aX
! 7276:
! 7277: /^(?(DEFINE) (?<A> a) (?<B> b) ) (?&A) (?&B) /x
! 7278: abcd
! 7279: 0: ab
! 7280:
! 7281: /(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT))
! 7282: (?(DEFINE)
! 7283: (?<NAME_PAT>[a-z]+)
! 7284: (?<ADDRESS_PAT>\d+)
! 7285: )/x
! 7286: metcalfe 33
! 7287: 0: metcalfe 33
! 7288: 1: metcalfe
! 7289: 2: 33
! 7290:
! 7291: /(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}/
! 7292: 1.2.3.4
! 7293: 0: 1.2.3.4
! 7294: 1: <unset>
! 7295: 2: .4
! 7296: 131.111.10.206
! 7297: 0: 131.111.10.206
! 7298: 1: <unset>
! 7299: 2: .206
! 7300: 10.0.0.0
! 7301: 0: 10.0.0.0
! 7302: 1: <unset>
! 7303: 2: .0
! 7304: ** Failers
! 7305: No match
! 7306: 10.6
! 7307: No match
! 7308: 455.3.4.5
! 7309: No match
! 7310:
! 7311: /\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))/
! 7312: 1.2.3.4
! 7313: 0: 1.2.3.4
! 7314: 1: .4
! 7315: 131.111.10.206
! 7316: 0: 131.111.10.206
! 7317: 1: .206
! 7318: 10.0.0.0
! 7319: 0: 10.0.0.0
! 7320: 1: .0
! 7321: ** Failers
! 7322: No match
! 7323: 10.6
! 7324: No match
! 7325: 455.3.4.5
! 7326: No match
! 7327:
! 7328: /^(\w++|\s++)*$/
! 7329: now is the time for all good men to come to the aid of the party
! 7330: 0: now is the time for all good men to come to the aid of the party
! 7331: 1: party
! 7332: *** Failers
! 7333: No match
! 7334: this is not a line with only words and spaces!
! 7335: No match
! 7336:
! 7337: /(\d++)(\w)/
! 7338: 12345a
! 7339: 0: 12345a
! 7340: 1: 12345
! 7341: 2: a
! 7342: *** Failers
! 7343: No match
! 7344: 12345+
! 7345: No match
! 7346:
! 7347: /a++b/
! 7348: aaab
! 7349: 0: aaab
! 7350:
! 7351: /(a++b)/
! 7352: aaab
! 7353: 0: aaab
! 7354: 1: aaab
! 7355:
! 7356: /(a++)b/
! 7357: aaab
! 7358: 0: aaab
! 7359: 1: aaa
! 7360:
! 7361: /([^()]++|\([^()]*\))+/
! 7362: ((abc(ade)ufh()()x
! 7363: 0: abc(ade)ufh()()x
! 7364: 1: x
! 7365:
! 7366: /\(([^()]++|\([^()]+\))+\)/
! 7367: (abc)
! 7368: 0: (abc)
! 7369: 1: abc
! 7370: (abc(def)xyz)
! 7371: 0: (abc(def)xyz)
! 7372: 1: xyz
! 7373: *** Failers
! 7374: No match
! 7375: ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
! 7376: No match
! 7377:
! 7378: /^([^()]|\((?1)*\))*$/
! 7379: abc
! 7380: 0: abc
! 7381: 1: c
! 7382: a(b)c
! 7383: 0: a(b)c
! 7384: 1: c
! 7385: a(b(c))d
! 7386: 0: a(b(c))d
! 7387: 1: d
! 7388: *** Failers)
! 7389: No match
! 7390: a(b(c)d
! 7391: No match
! 7392:
! 7393: /^>abc>([^()]|\((?1)*\))*<xyz<$/
! 7394: >abc>123<xyz<
! 7395: 0: >abc>123<xyz<
! 7396: 1: 3
! 7397: >abc>1(2)3<xyz<
! 7398: 0: >abc>1(2)3<xyz<
! 7399: 1: 3
! 7400: >abc>(1(2)3)<xyz<
! 7401: 0: >abc>(1(2)3)<xyz<
! 7402: 1: (1(2)3)
! 7403:
! 7404: /^(?:((.)(?1)\2|)|((.)(?3)\4|.))$/i
! 7405: 1221
! 7406: 0: 1221
! 7407: 1: 1221
! 7408: 2: 1
! 7409: Satanoscillatemymetallicsonatas
! 7410: 0: Satanoscillatemymetallicsonatas
! 7411: 1: <unset>
! 7412: 2: <unset>
! 7413: 3: Satanoscillatemymetallicsonatas
! 7414: 4: S
! 7415: AmanaplanacanalPanama
! 7416: 0: AmanaplanacanalPanama
! 7417: 1: <unset>
! 7418: 2: <unset>
! 7419: 3: AmanaplanacanalPanama
! 7420: 4: A
! 7421: AblewasIereIsawElba
! 7422: 0: AblewasIereIsawElba
! 7423: 1: <unset>
! 7424: 2: <unset>
! 7425: 3: AblewasIereIsawElba
! 7426: 4: A
! 7427: *** Failers
! 7428: No match
! 7429: Thequickbrownfox
! 7430: No match
! 7431:
! 7432: /^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/
! 7433: 12
! 7434: 0: 12
! 7435: 1: 12
! 7436: (((2+2)*-3)-7)
! 7437: 0: (((2+2)*-3)-7)
! 7438: 1: (((2+2)*-3)-7)
! 7439: 2: -
! 7440: -12
! 7441: 0: -12
! 7442: 1: -12
! 7443: *** Failers
! 7444: No match
! 7445: ((2+2)*-3)-7)
! 7446: No match
! 7447:
! 7448: /^(x(y|(?1){2})z)/
! 7449: xyz
! 7450: 0: xyz
! 7451: 1: xyz
! 7452: 2: y
! 7453: xxyzxyzz
! 7454: 0: xxyzxyzz
! 7455: 1: xxyzxyzz
! 7456: 2: xyzxyz
! 7457: *** Failers
! 7458: No match
! 7459: xxyzz
! 7460: No match
! 7461: xxyzxyzxyzz
! 7462: No match
! 7463:
! 7464: /((< (?: (?(R) \d++ | [^<>]*+) | (?2)) * >))/x
! 7465: <>
! 7466: 0: <>
! 7467: 1: <>
! 7468: 2: <>
! 7469: <abcd>
! 7470: 0: <abcd>
! 7471: 1: <abcd>
! 7472: 2: <abcd>
! 7473: <abc <123> hij>
! 7474: 0: <abc <123> hij>
! 7475: 1: <abc <123> hij>
! 7476: 2: <abc <123> hij>
! 7477: <abc <def> hij>
! 7478: 0: <def>
! 7479: 1: <def>
! 7480: 2: <def>
! 7481: <abc<>def>
! 7482: 0: <abc<>def>
! 7483: 1: <abc<>def>
! 7484: 2: <abc<>def>
! 7485: <abc<>
! 7486: 0: <>
! 7487: 1: <>
! 7488: 2: <>
! 7489: *** Failers
! 7490: No match
! 7491: <abc
! 7492: No match
! 7493:
! 7494: /^a+(*FAIL)/
! 7495: aaaaaa
! 7496: No match
! 7497:
! 7498: /a+b?c+(*FAIL)/
! 7499: aaabccc
! 7500: No match
! 7501:
! 7502: /a+b?(*PRUNE)c+(*FAIL)/
! 7503: aaabccc
! 7504: No match
! 7505:
! 7506: /a+b?(*COMMIT)c+(*FAIL)/
! 7507: aaabccc
! 7508: No match
! 7509:
! 7510: /a+b?(*SKIP)c+(*FAIL)/
! 7511: aaabcccaaabccc
! 7512: No match
! 7513:
! 7514: /^(?:aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
! 7515: aaaxxxxxx
! 7516: 0: aaaxxxxxx
! 7517: aaa++++++
! 7518: 0: aaa
! 7519: bbbxxxxx
! 7520: 0: bbbxxxxx
! 7521: bbb+++++
! 7522: 0: bbb
! 7523: cccxxxx
! 7524: 0: cccxxxx
! 7525: ccc++++
! 7526: 0: ccc
! 7527: dddddddd
! 7528: 0: ddd
! 7529:
! 7530: /^(aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
! 7531: aaaxxxxxx
! 7532: 0: aaaxxxxxx
! 7533: 1: aaaxxxxxx
! 7534: aaa++++++
! 7535: 0: aaa
! 7536: 1: aaa
! 7537: bbbxxxxx
! 7538: 0: bbbxxxxx
! 7539: 1: bbbxxxxx
! 7540: bbb+++++
! 7541: 0: bbb
! 7542: 1: bbb
! 7543: cccxxxx
! 7544: 0: cccxxxx
! 7545: 1: cccxxxx
! 7546: ccc++++
! 7547: 0: ccc
! 7548: 1: ccc
! 7549: dddddddd
! 7550: 0: ddd
! 7551: 1: ddd
! 7552:
! 7553: /a+b?(*THEN)c+(*FAIL)/
! 7554: aaabccc
! 7555: No match
! 7556:
! 7557: /(A (A|B(*ACCEPT)|C) D)(E)/x
! 7558: AB
! 7559: 0: AB
! 7560: 1: AB
! 7561: 2: B
! 7562: ABX
! 7563: 0: AB
! 7564: 1: AB
! 7565: 2: B
! 7566: AADE
! 7567: 0: AADE
! 7568: 1: AAD
! 7569: 2: A
! 7570: 3: E
! 7571: ACDE
! 7572: 0: ACDE
! 7573: 1: ACD
! 7574: 2: C
! 7575: 3: E
! 7576: ** Failers
! 7577: No match
! 7578: AD
! 7579: No match
! 7580:
! 7581: /^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$/i
! 7582: 1221
! 7583: 0: 1221
! 7584: 1: 1221
! 7585: 2: 1
! 7586: Satan, oscillate my metallic sonatas!
! 7587: 0: Satan, oscillate my metallic sonatas!
! 7588: 1: <unset>
! 7589: 2: <unset>
! 7590: 3: Satan, oscillate my metallic sonatas
! 7591: 4: S
! 7592: A man, a plan, a canal: Panama!
! 7593: 0: A man, a plan, a canal: Panama!
! 7594: 1: <unset>
! 7595: 2: <unset>
! 7596: 3: A man, a plan, a canal: Panama
! 7597: 4: A
! 7598: Able was I ere I saw Elba.
! 7599: 0: Able was I ere I saw Elba.
! 7600: 1: <unset>
! 7601: 2: <unset>
! 7602: 3: Able was I ere I saw Elba
! 7603: 4: A
! 7604: *** Failers
! 7605: No match
! 7606: The quick brown fox
! 7607: No match
! 7608:
! 7609: /^((.)(?1)\2|.)$/
! 7610: a
! 7611: 0: a
! 7612: 1: a
! 7613: aba
! 7614: 0: aba
! 7615: 1: aba
! 7616: 2: a
! 7617: aabaa
! 7618: 0: aabaa
! 7619: 1: aabaa
! 7620: 2: a
! 7621: abcdcba
! 7622: 0: abcdcba
! 7623: 1: abcdcba
! 7624: 2: a
! 7625: pqaabaaqp
! 7626: 0: pqaabaaqp
! 7627: 1: pqaabaaqp
! 7628: 2: p
! 7629: ablewasiereisawelba
! 7630: 0: ablewasiereisawelba
! 7631: 1: ablewasiereisawelba
! 7632: 2: a
! 7633: rhubarb
! 7634: No match
! 7635: the quick brown fox
! 7636: No match
! 7637:
! 7638: /(a)(?<=b(?1))/
! 7639: baz
! 7640: 0: a
! 7641: 1: a
! 7642: ** Failers
! 7643: No match
! 7644: caz
! 7645: No match
! 7646:
! 7647: /(?<=b(?1))(a)/
! 7648: zbaaz
! 7649: 0: a
! 7650: 1: a
! 7651: ** Failers
! 7652: No match
! 7653: aaa
! 7654: No match
! 7655:
! 7656: /(?<X>a)(?<=b(?&X))/
! 7657: baz
! 7658: 0: a
! 7659: 1: a
! 7660:
! 7661: /^(?|(abc)|(def))\1/
! 7662: abcabc
! 7663: 0: abcabc
! 7664: 1: abc
! 7665: defdef
! 7666: 0: defdef
! 7667: 1: def
! 7668: ** Failers
! 7669: No match
! 7670: abcdef
! 7671: No match
! 7672: defabc
! 7673: No match
! 7674:
! 7675: /^(?|(abc)|(def))(?1)/
! 7676: abcabc
! 7677: 0: abcabc
! 7678: 1: abc
! 7679: defabc
! 7680: 0: defabc
! 7681: 1: def
! 7682: ** Failers
! 7683: No match
! 7684: defdef
! 7685: No match
! 7686: abcdef
! 7687: No match
! 7688:
! 7689: /(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |b(?<quote> (?<apostrophe>')|(?<realquote>")) ) (?('quote')[a-z]+|[0-9]+)/xJ
! 7690: a\"aaaaa
! 7691: 0: a"aaaaa
! 7692: 1: "
! 7693: 2: <unset>
! 7694: 3: "
! 7695: b\"aaaaa
! 7696: 0: b"aaaaa
! 7697: 1: <unset>
! 7698: 2: <unset>
! 7699: 3: <unset>
! 7700: 4: "
! 7701: 5: <unset>
! 7702: 6: "
! 7703: ** Failers
! 7704: No match
! 7705: b\"11111
! 7706: No match
! 7707:
! 7708: /(?:(?1)|B)(A(*F)|C)/
! 7709: ABCD
! 7710: 0: BC
! 7711: 1: C
! 7712: CCD
! 7713: 0: CC
! 7714: 1: C
! 7715: ** Failers
! 7716: No match
! 7717: CAD
! 7718: No match
! 7719:
! 7720: /^(?:(?1)|B)(A(*F)|C)/
! 7721: CCD
! 7722: 0: CC
! 7723: 1: C
! 7724: BCD
! 7725: 0: BC
! 7726: 1: C
! 7727: ** Failers
! 7728: No match
! 7729: ABCD
! 7730: No match
! 7731: CAD
! 7732: No match
! 7733: BAD
! 7734: No match
! 7735:
! 7736: /(?:(?1)|B)(A(*ACCEPT)XX|C)D/
! 7737: AAD
! 7738: 0: AA
! 7739: 1: A
! 7740: ACD
! 7741: 0: ACD
! 7742: 1: C
! 7743: BAD
! 7744: 0: BA
! 7745: 1: A
! 7746: BCD
! 7747: 0: BCD
! 7748: 1: C
! 7749: BAX
! 7750: 0: BA
! 7751: 1: A
! 7752: ** Failers
! 7753: No match
! 7754: ACX
! 7755: No match
! 7756: ABC
! 7757: No match
! 7758:
! 7759: /(?(DEFINE)(A))B(?1)C/
! 7760: BAC
! 7761: 0: BAC
! 7762:
! 7763: /(?(DEFINE)((A)\2))B(?1)C/
! 7764: BAAC
! 7765: 0: BAAC
! 7766:
! 7767: /(?<pn> \( ( [^()]++ | (?&pn) )* \) )/x
! 7768: (ab(cd)ef)
! 7769: 0: (ab(cd)ef)
! 7770: 1: (ab(cd)ef)
! 7771: 2: ef
! 7772:
! 7773: /^(?!a(*SKIP)b)/
! 7774: ac
! 7775: 0:
! 7776:
! 7777: /^(?=a(*SKIP)b|ac)/
! 7778: ** Failers
! 7779: No match
! 7780: ac
! 7781: No match
! 7782:
! 7783: /^(?=a(*THEN)b|ac)/
! 7784: ac
! 7785: 0:
! 7786:
! 7787: /^(?=a(*PRUNE)b)/
! 7788: ab
! 7789: 0:
! 7790: ** Failers
! 7791: No match
! 7792: ac
! 7793: No match
! 7794:
! 7795: /^(?=a(*ACCEPT)b)/
! 7796: ac
! 7797: 0:
! 7798:
! 7799: /^(?(?!a(*SKIP)b))/
! 7800: ac
! 7801: 0:
! 7802:
! 7803: /(?>a\Kb)/
! 7804: ab
! 7805: 0: b
! 7806:
! 7807: /((?>a\Kb))/
! 7808: ab
! 7809: 0: b
! 7810: 1: ab
! 7811:
! 7812: /(a\Kb)/
! 7813: ab
! 7814: 0: b
! 7815: 1: ab
! 7816:
! 7817: /^a\Kcz|ac/
! 7818: ac
! 7819: 0: ac
! 7820:
! 7821: /(?>a\Kbz|ab)/
! 7822: ab
! 7823: 0: ab
! 7824:
! 7825: /^(?&t)(?(DEFINE)(?<t>a\Kb))$/
! 7826: ab
! 7827: 0: b
! 7828:
! 7829: /^([^()]|\((?1)*\))*$/
! 7830: a(b)c
! 7831: 0: a(b)c
! 7832: 1: c
! 7833: a(b(c)d)e
! 7834: 0: a(b(c)d)e
! 7835: 1: e
! 7836:
! 7837: /(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))/
! 7838: 0
! 7839: 0: 0
! 7840: 1: 0
! 7841: 00
! 7842: 0: 00
! 7843: 1: 00
! 7844: 2: 0
! 7845: 0000
! 7846: 0: 0000
! 7847: 1: 0000
! 7848: 2: 0
! 7849:
! 7850: /(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))/
! 7851: 0
! 7852: 0: 0
! 7853: 1: 0
! 7854: 2: 0
! 7855: 00
! 7856: 0: 0
! 7857: 1: 0
! 7858: 2: 0
! 7859: 0000
! 7860: 0: 0
! 7861: 1: 0
! 7862: 2: 0
! 7863:
! 7864: /--- This one does fail, as expected, in Perl. It needs the complex item at the
! 7865: end of the pattern. A single letter instead of (B|D) makes it not fail,
! 7866: which I think is a Perl bug. --- /
! 7867:
! 7868: /A(*COMMIT)(B|D)/
! 7869: ACABX
! 7870: No match
! 7871:
! 7872: /--- Check the use of names for failure ---/
! 7873:
! 7874: /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
! 7875: ** Failers
! 7876: No match
! 7877: AC
! 7878: No match, mark = A
! 7879: CB
! 7880: No match, mark = B
! 7881:
! 7882: /--- Force no study, otherwise mark is not seen. The studied version is in
! 7883: test 2 because it isn't Perl-compatible. ---/
! 7884:
! 7885: /(*MARK:A)(*SKIP:B)(C|X)/KSS
! 7886: C
! 7887: 0: C
! 7888: 1: C
! 7889: MK: A
! 7890: D
! 7891: No match, mark = A
! 7892:
! 7893: /^(A(*THEN:A)B|C(*THEN:B)D)/K
! 7894: ** Failers
! 7895: No match
! 7896: CB
! 7897: No match, mark = B
! 7898:
! 7899: /^(?:A(*THEN:A)B|C(*THEN:B)D)/K
! 7900: CB
! 7901: No match, mark = B
! 7902:
! 7903: /^(?>A(*THEN:A)B|C(*THEN:B)D)/K
! 7904: CB
! 7905: No match, mark = B
! 7906:
! 7907: /--- This should succeed, as the skip causes bump to offset 1 (the mark). Note
! 7908: that we have to have something complicated such as (B|Z) at the end because,
! 7909: for Perl, a simple character somehow causes an unwanted optimization to mess
! 7910: with the handling of backtracking verbs. ---/
! 7911:
! 7912: /A(*MARK:A)A+(*SKIP:A)(B|Z) | AC/xK
! 7913: AAAC
! 7914: 0: AC
! 7915:
! 7916: /--- Test skipping over a non-matching mark. ---/
! 7917:
! 7918: /A(*MARK:A)A+(*MARK:B)(*SKIP:A)(B|Z) | AC/xK
! 7919: AAAC
! 7920: 0: AC
! 7921:
! 7922: /--- Check shorthand for MARK ---/
! 7923:
! 7924: /A(*:A)A+(*SKIP:A)(B|Z) | AC/xK
! 7925: AAAC
! 7926: 0: AC
! 7927:
! 7928: /--- Don't loop! Force no study, otherwise mark is not seen. ---/
! 7929:
! 7930: /(*:A)A+(*SKIP:A)(B|Z)/KSS
! 7931: AAAC
! 7932: No match, mark = A
! 7933:
! 7934: /--- This should succeed, as a non-existent skip name disables the skip ---/
! 7935:
! 7936: /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/xK
! 7937: AAAC
! 7938: 0: AC
! 7939:
! 7940: /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC(*:B)/xK
! 7941: AAAC
! 7942: 0: AC
! 7943: MK: B
! 7944:
! 7945: /--- COMMIT at the start of a pattern should act like an anchor. Again,
! 7946: however, we need the complication for Perl. ---/
! 7947:
! 7948: /(*COMMIT)(A|P)(B|P)(C|P)/
! 7949: ABCDEFG
! 7950: 0: ABC
! 7951: 1: A
! 7952: 2: B
! 7953: 3: C
! 7954: ** Failers
! 7955: No match
! 7956: DEFGABC
! 7957: No match
! 7958:
! 7959: /--- COMMIT inside an atomic group can't stop backtracking over the group. ---/
! 7960:
! 7961: /(\w+)(?>b(*COMMIT))\w{2}/
! 7962: abbb
! 7963: 0: abbb
! 7964: 1: a
! 7965:
! 7966: /(\w+)b(*COMMIT)\w{2}/
! 7967: abbb
! 7968: No match
! 7969:
! 7970: /--- Check opening parens in comment when seeking forward reference. ---/
! 7971:
! 7972: /(?&t)(?#()(?(DEFINE)(?<t>a))/
! 7973: bac
! 7974: 0: a
! 7975:
! 7976: /--- COMMIT should override THEN ---/
! 7977:
! 7978: /(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?/
! 7979: yes
! 7980: No match
! 7981:
! 7982: /(?>(*COMMIT)(yes|no)(*THEN)(*F))?/
! 7983: yes
! 7984: No match
! 7985:
! 7986: /b?(*SKIP)c/
! 7987: bc
! 7988: 0: bc
! 7989: abc
! 7990: 0: bc
! 7991:
! 7992: /(*SKIP)bc/
! 7993: a
! 7994: No match
! 7995:
! 7996: /(*SKIP)b/
! 7997: a
! 7998: No match
! 7999:
! 8000: /(?P<abn>(?P=abn)xxx|)+/
! 8001: xxx
! 8002: 0:
! 8003: 1:
! 8004:
! 8005: /(?i:([^b]))(?1)/
! 8006: aa
! 8007: 0: aa
! 8008: 1: a
! 8009: aA
! 8010: 0: aA
! 8011: 1: a
! 8012: ** Failers
! 8013: 0: **
! 8014: 1: *
! 8015: ab
! 8016: No match
! 8017: aB
! 8018: No match
! 8019: Ba
! 8020: No match
! 8021: ba
! 8022: No match
! 8023:
! 8024: /^(?&t)*+(?(DEFINE)(?<t>a))\w$/
! 8025: aaaaaaX
! 8026: 0: aaaaaaX
! 8027: ** Failers
! 8028: No match
! 8029: aaaaaa
! 8030: No match
! 8031:
! 8032: /^(?&t)*(?(DEFINE)(?<t>a))\w$/
! 8033: aaaaaaX
! 8034: 0: aaaaaaX
! 8035: aaaaaa
! 8036: 0: aaaaaa
! 8037:
! 8038: /^(a)*+(\w)/
! 8039: aaaaX
! 8040: 0: aaaaX
! 8041: 1: a
! 8042: 2: X
! 8043: YZ
! 8044: 0: Y
! 8045: 1: <unset>
! 8046: 2: Y
! 8047: ** Failers
! 8048: No match
! 8049: aaaa
! 8050: No match
! 8051:
! 8052: /^(?:a)*+(\w)/
! 8053: aaaaX
! 8054: 0: aaaaX
! 8055: 1: X
! 8056: YZ
! 8057: 0: Y
! 8058: 1: Y
! 8059: ** Failers
! 8060: No match
! 8061: aaaa
! 8062: No match
! 8063:
! 8064: /^(a)++(\w)/
! 8065: aaaaX
! 8066: 0: aaaaX
! 8067: 1: a
! 8068: 2: X
! 8069: ** Failers
! 8070: No match
! 8071: aaaa
! 8072: No match
! 8073: YZ
! 8074: No match
! 8075:
! 8076: /^(?:a)++(\w)/
! 8077: aaaaX
! 8078: 0: aaaaX
! 8079: 1: X
! 8080: ** Failers
! 8081: No match
! 8082: aaaa
! 8083: No match
! 8084: YZ
! 8085: No match
! 8086:
! 8087: /^(a)?+(\w)/
! 8088: aaaaX
! 8089: 0: aa
! 8090: 1: a
! 8091: 2: a
! 8092: YZ
! 8093: 0: Y
! 8094: 1: <unset>
! 8095: 2: Y
! 8096:
! 8097: /^(?:a)?+(\w)/
! 8098: aaaaX
! 8099: 0: aa
! 8100: 1: a
! 8101: YZ
! 8102: 0: Y
! 8103: 1: Y
! 8104:
! 8105: /^(a){2,}+(\w)/
! 8106: aaaaX
! 8107: 0: aaaaX
! 8108: 1: a
! 8109: 2: X
! 8110: ** Failers
! 8111: No match
! 8112: aaa
! 8113: No match
! 8114: YZ
! 8115: No match
! 8116:
! 8117: /^(?:a){2,}+(\w)/
! 8118: aaaaX
! 8119: 0: aaaaX
! 8120: 1: X
! 8121: ** Failers
! 8122: No match
! 8123: aaa
! 8124: No match
! 8125: YZ
! 8126: No match
! 8127:
! 8128: /(a|)*(?1)b/
! 8129: b
! 8130: 0: b
! 8131: 1:
! 8132: ab
! 8133: 0: ab
! 8134: 1:
! 8135: aab
! 8136: 0: aab
! 8137: 1:
! 8138:
! 8139: /(a)++(?1)b/
! 8140: ** Failers
! 8141: No match
! 8142: ab
! 8143: No match
! 8144: aab
! 8145: No match
! 8146:
! 8147: /(a)*+(?1)b/
! 8148: ** Failers
! 8149: No match
! 8150: ab
! 8151: No match
! 8152: aab
! 8153: No match
! 8154:
! 8155: /(?1)(?:(b)){0}/
! 8156: b
! 8157: 0: b
! 8158:
! 8159: /(foo ( \( ((?:(?> [^()]+ )|(?2))*) \) ) )/x
! 8160: foo(bar(baz)+baz(bop))
! 8161: 0: foo(bar(baz)+baz(bop))
! 8162: 1: foo(bar(baz)+baz(bop))
! 8163: 2: (bar(baz)+baz(bop))
! 8164: 3: bar(baz)+baz(bop)
! 8165:
! 8166: /(A (A|B(*ACCEPT)|C) D)(E)/x
! 8167: AB
! 8168: 0: AB
! 8169: 1: AB
! 8170: 2: B
! 8171:
! 8172: /\A.*?(?:a|b(*THEN)c)/
! 8173: ba
! 8174: 0: ba
! 8175:
! 8176: /\A.*?(?:a|bc)/
! 8177: ba
! 8178: 0: ba
! 8179:
! 8180: /\A.*?(a|b(*THEN)c)/
! 8181: ba
! 8182: 0: ba
! 8183: 1: a
! 8184:
! 8185: /\A.*?(a|bc)/
! 8186: ba
! 8187: 0: ba
! 8188: 1: a
! 8189:
! 8190: /\A.*?(?:a|b(*THEN)c)++/
! 8191: ba
! 8192: 0: ba
! 8193:
! 8194: /\A.*?(?:a|bc)++/
! 8195: ba
! 8196: 0: ba
! 8197:
! 8198: /\A.*?(a|b(*THEN)c)++/
! 8199: ba
! 8200: 0: ba
! 8201: 1: a
! 8202:
! 8203: /\A.*?(a|bc)++/
! 8204: ba
! 8205: 0: ba
! 8206: 1: a
! 8207:
! 8208: /\A.*?(?:a|b(*THEN)c|d)/
! 8209: ba
! 8210: 0: ba
! 8211:
! 8212: /\A.*?(?:a|bc|d)/
! 8213: ba
! 8214: 0: ba
! 8215:
! 8216: /(?:(b))++/
! 8217: beetle
! 8218: 0: b
! 8219: 1: b
! 8220:
! 8221: /(?(?=(a(*ACCEPT)z))a)/
! 8222: a
! 8223: 0: a
! 8224: 1: a
! 8225:
! 8226: /^(a)(?1)+ab/
! 8227: aaaab
! 8228: 0: aaaab
! 8229: 1: a
! 8230:
! 8231: /^(a)(?1)++ab/
! 8232: aaaab
! 8233: No match
! 8234:
! 8235: /^(?=a(*:M))aZ/K
! 8236: aZbc
! 8237: 0: aZ
! 8238: MK: M
! 8239:
! 8240: /^(?!(*:M)b)aZ/K
! 8241: aZbc
! 8242: 0: aZ
! 8243:
! 8244: /(?(DEFINE)(a))?b(?1)/
! 8245: backgammon
! 8246: 0: ba
! 8247:
! 8248: /^\N+/
! 8249: abc\ndef
! 8250: 0: abc
! 8251:
! 8252: /^\N{1,}/
! 8253: abc\ndef
! 8254: 0: abc
! 8255:
! 8256: /(?(R)a+|(?R)b)/
! 8257: aaaabcde
! 8258: 0: aaaab
! 8259:
! 8260: /(?(R)a+|((?R))b)/
! 8261: aaaabcde
! 8262: 0: aaaab
! 8263: 1: aaaa
! 8264:
! 8265: /((?(R)a+|(?1)b))/
! 8266: aaaabcde
! 8267: 0: aaaab
! 8268: 1: aaaab
! 8269:
! 8270: /((?(R1)a+|(?1)b))/
! 8271: aaaabcde
! 8272: 0: aaaab
! 8273: 1: aaaab
! 8274:
! 8275: /a(*:any
! 8276: name)/K
! 8277: abc
! 8278: 0: a
! 8279: MK: any \x0aname
! 8280:
! 8281: /(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))/
! 8282: a
! 8283: 0: a
! 8284: ba
! 8285: 0: a
! 8286: bba
! 8287: 0: a
! 8288:
! 8289: /--- Checking revised (*THEN) handling ---/
! 8290:
! 8291: /--- Capture ---/
! 8292:
! 8293: /^.*? (a(*THEN)b) c/x
! 8294: aabc
! 8295: No match
! 8296:
! 8297: /^.*? (a(*THEN)b|(*F)) c/x
! 8298: aabc
! 8299: 0: aabc
! 8300: 1: ab
! 8301:
! 8302: /^.*? ( (a(*THEN)b) | (*F) ) c/x
! 8303: aabc
! 8304: 0: aabc
! 8305: 1: ab
! 8306: 2: ab
! 8307:
! 8308: /^.*? ( (a(*THEN)b) ) c/x
! 8309: aabc
! 8310: No match
! 8311:
! 8312: /--- Non-capture ---/
! 8313:
! 8314: /^.*? (?:a(*THEN)b) c/x
! 8315: aabc
! 8316: No match
! 8317:
! 8318: /^.*? (?:a(*THEN)b|(*F)) c/x
! 8319: aabc
! 8320: 0: aabc
! 8321:
! 8322: /^.*? (?: (?:a(*THEN)b) | (*F) ) c/x
! 8323: aabc
! 8324: 0: aabc
! 8325:
! 8326: /^.*? (?: (?:a(*THEN)b) ) c/x
! 8327: aabc
! 8328: No match
! 8329:
! 8330: /--- Atomic ---/
! 8331:
! 8332: /^.*? (?>a(*THEN)b) c/x
! 8333: aabc
! 8334: No match
! 8335:
! 8336: /^.*? (?>a(*THEN)b|(*F)) c/x
! 8337: aabc
! 8338: 0: aabc
! 8339:
! 8340: /^.*? (?> (?>a(*THEN)b) | (*F) ) c/x
! 8341: aabc
! 8342: 0: aabc
! 8343:
! 8344: /^.*? (?> (?>a(*THEN)b) ) c/x
! 8345: aabc
! 8346: No match
! 8347:
! 8348: /--- Possessive capture ---/
! 8349:
! 8350: /^.*? (a(*THEN)b)++ c/x
! 8351: aabc
! 8352: No match
! 8353:
! 8354: /^.*? (a(*THEN)b|(*F))++ c/x
! 8355: aabc
! 8356: 0: aabc
! 8357: 1: ab
! 8358:
! 8359: /^.*? ( (a(*THEN)b)++ | (*F) )++ c/x
! 8360: aabc
! 8361: 0: aabc
! 8362: 1: ab
! 8363: 2: ab
! 8364:
! 8365: /^.*? ( (a(*THEN)b)++ )++ c/x
! 8366: aabc
! 8367: No match
! 8368:
! 8369: /--- Possessive non-capture ---/
! 8370:
! 8371: /^.*? (?:a(*THEN)b)++ c/x
! 8372: aabc
! 8373: No match
! 8374:
! 8375: /^.*? (?:a(*THEN)b|(*F))++ c/x
! 8376: aabc
! 8377: 0: aabc
! 8378:
! 8379: /^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c/x
! 8380: aabc
! 8381: 0: aabc
! 8382:
! 8383: /^.*? (?: (?:a(*THEN)b)++ )++ c/x
! 8384: aabc
! 8385: No match
! 8386:
! 8387: /--- Condition assertion ---/
! 8388:
! 8389: /^(?(?=a(*THEN)b)ab|ac)/
! 8390: ac
! 8391: 0: ac
! 8392:
! 8393: /--- Condition ---/
! 8394:
! 8395: /^.*?(?(?=a)a|b(*THEN)c)/
! 8396: ba
! 8397: No match
! 8398:
! 8399: /^.*?(?:(?(?=a)a|b(*THEN)c)|d)/
! 8400: ba
! 8401: 0: ba
! 8402:
! 8403: /^.*?(?(?=a)a(*THEN)b|c)/
! 8404: ac
! 8405: No match
! 8406:
! 8407: /--- Assertion ---/
! 8408:
! 8409: /^.*(?=a(*THEN)b)/
! 8410: aabc
! 8411: 0: a
! 8412:
! 8413: /------------------------------/
! 8414:
! 8415: /(?>a(*:m))/imsxSK
! 8416: a
! 8417: 0: a
! 8418: MK: m
! 8419:
! 8420: /(?>(a)(*:m))/imsxSK
! 8421: a
! 8422: 0: a
! 8423: 1: a
! 8424: MK: m
! 8425:
! 8426: /(?<=a(*ACCEPT)b)c/
! 8427: xacd
! 8428: 0: c
! 8429:
! 8430: /(?<=(a(*ACCEPT)b))c/
! 8431: xacd
! 8432: 0: c
! 8433: 1: a
! 8434:
! 8435: /(?<=(a(*COMMIT)b))c/
! 8436: xabcd
! 8437: 0: c
! 8438: 1: ab
! 8439: ** Failers
! 8440: No match
! 8441: xacd
! 8442: No match
! 8443:
! 8444: /(?<!a(*FAIL)b)c/
! 8445: xcd
! 8446: 0: c
! 8447: acd
! 8448: 0: c
! 8449:
! 8450: /(?<=a(*:N)b)c/K
! 8451: xabcd
! 8452: 0: c
! 8453: MK: N
! 8454:
! 8455: /(?<=a(*PRUNE)b)c/
! 8456: xabcd
! 8457: 0: c
! 8458:
! 8459: /(?<=a(*SKIP)b)c/
! 8460: xabcd
! 8461: 0: c
! 8462:
! 8463: /(?<=a(*THEN)b)c/
! 8464: xabcd
! 8465: 0: c
! 8466:
! 8467: /(a)(?2){2}(.)/
! 8468: abcd
! 8469: 0: abcd
! 8470: 1: a
! 8471: 2: d
! 8472:
! 8473: /(*MARK:A)(*PRUNE:B)(C|X)/KS
! 8474: C
! 8475: 0: C
! 8476: 1: C
! 8477: MK: B
! 8478: D
! 8479: No match, mark = B
! 8480:
! 8481: /(*MARK:A)(*PRUNE:B)(C|X)/KSS
! 8482: C
! 8483: 0: C
! 8484: 1: C
! 8485: MK: B
! 8486: D
! 8487: No match, mark = B
! 8488:
! 8489: /(*MARK:A)(*THEN:B)(C|X)/KS
! 8490: C
! 8491: 0: C
! 8492: 1: C
! 8493: MK: B
! 8494: D
! 8495: No match, mark = B
! 8496:
! 8497: /(*MARK:A)(*THEN:B)(C|X)/KSY
! 8498: C
! 8499: 0: C
! 8500: 1: C
! 8501: MK: B
! 8502: D
! 8503: No match, mark = B
! 8504:
! 8505: /(*MARK:A)(*THEN:B)(C|X)/KSS
! 8506: C
! 8507: 0: C
! 8508: 1: C
! 8509: MK: B
! 8510: D
! 8511: No match, mark = B
! 8512:
! 8513: /--- This should fail, as the skip causes a bump to offset 3 (the skip) ---/
! 8514:
! 8515: /A(*MARK:A)A+(*SKIP)(B|Z) | AC/xK
! 8516: AAAC
! 8517: No match, mark = A
! 8518:
! 8519: /--- Same --/
! 8520:
! 8521: /A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/xK
! 8522: AAAC
! 8523: No match, mark = B
! 8524:
! 8525: /A(*:A)A+(*SKIP)(B|Z) | AC/xK
! 8526: AAAC
! 8527: No match, mark = A
! 8528:
! 8529: /--- This should fail, as a null name is the same as no name ---/
! 8530:
! 8531: /A(*MARK:A)A+(*SKIP:)(B|Z) | AC/xK
! 8532: AAAC
! 8533: No match, mark = A
! 8534:
! 8535: /--- A check on what happens after hitting a mark and them bumping along to
! 8536: something that does not even start. Perl reports tags after the failures here,
! 8537: though it does not when the individual letters are made into something
! 8538: more complicated. ---/
! 8539:
! 8540: /A(*:A)B|XX(*:B)Y/K
! 8541: AABC
! 8542: 0: AB
! 8543: MK: A
! 8544: XXYZ
! 8545: 0: XXY
! 8546: MK: B
! 8547: ** Failers
! 8548: No match
! 8549: XAQQ
! 8550: No match, mark = A
! 8551: XAQQXZZ
! 8552: No match, mark = A
! 8553: AXQQQ
! 8554: No match, mark = A
! 8555: AXXQQQ
! 8556: No match, mark = B
! 8557:
! 8558: /^(A(*THEN:A)B|C(*THEN:B)D)/K
! 8559: AB
! 8560: 0: AB
! 8561: 1: AB
! 8562: MK: A
! 8563: CD
! 8564: 0: CD
! 8565: 1: CD
! 8566: MK: B
! 8567: ** Failers
! 8568: No match
! 8569: AC
! 8570: No match, mark = A
! 8571: CB
! 8572: No match, mark = B
! 8573:
! 8574: /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
! 8575: AB
! 8576: 0: AB
! 8577: 1: AB
! 8578: MK: A
! 8579: CD
! 8580: 0: CD
! 8581: 1: CD
! 8582: MK: B
! 8583: ** Failers
! 8584: No match
! 8585: AC
! 8586: No match, mark = A
! 8587: CB
! 8588: No match, mark = B
! 8589:
! 8590: /--- An empty name does not pass back an empty string. It is the same as if no
! 8591: name were given. ---/
! 8592:
! 8593: /^(A(*PRUNE:)B|C(*PRUNE:B)D)/K
! 8594: AB
! 8595: 0: AB
! 8596: 1: AB
! 8597: CD
! 8598: 0: CD
! 8599: 1: CD
! 8600: MK: B
! 8601:
! 8602: /--- PRUNE goes to next bumpalong; COMMIT does not. ---/
! 8603:
! 8604: /A(*PRUNE:A)B/K
! 8605: ACAB
! 8606: 0: AB
! 8607: MK: A
! 8608:
! 8609: /--- Mark names can be duplicated ---/
! 8610:
! 8611: /A(*:A)B|X(*:A)Y/K
! 8612: AABC
! 8613: 0: AB
! 8614: MK: A
! 8615: XXYZ
! 8616: 0: XY
! 8617: MK: A
! 8618:
! 8619: /b(*:m)f|a(*:n)w/K
! 8620: aw
! 8621: 0: aw
! 8622: MK: n
! 8623: ** Failers
! 8624: No match, mark = n
! 8625: abc
! 8626: No match, mark = m
! 8627:
! 8628: /b(*:m)f|aw/K
! 8629: abaw
! 8630: 0: aw
! 8631: ** Failers
! 8632: No match
! 8633: abc
! 8634: No match, mark = m
! 8635: abax
! 8636: No match, mark = m
! 8637:
! 8638: /A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC/xK
! 8639: AAAC
! 8640: 0: AAC
! 8641:
! 8642: /a(*PRUNE:X)bc|qq/KY
! 8643: ** Failers
! 8644: No match, mark = X
! 8645: axy
! 8646: No match, mark = X
! 8647:
! 8648: /a(*THEN:X)bc|qq/KY
! 8649: ** Failers
! 8650: No match, mark = X
! 8651: axy
! 8652: No match, mark = X
! 8653:
! 8654: /(?=a(*MARK:A)b)..x/K
! 8655: abxy
! 8656: 0: abx
! 8657: MK: A
! 8658: ** Failers
! 8659: No match
! 8660: abpq
! 8661: No match
! 8662:
! 8663: /(?=a(*MARK:A)b)..(*:Y)x/K
! 8664: abxy
! 8665: 0: abx
! 8666: MK: Y
! 8667: ** Failers
! 8668: No match
! 8669: abpq
! 8670: No match
! 8671:
! 8672: /(?=a(*PRUNE:A)b)..x/K
! 8673: abxy
! 8674: 0: abx
! 8675: MK: A
! 8676: ** Failers
! 8677: No match
! 8678: abpq
! 8679: No match
! 8680:
! 8681: /(?=a(*PRUNE:A)b)..(*:Y)x/K
! 8682: abxy
! 8683: 0: abx
! 8684: MK: Y
! 8685: ** Failers
! 8686: No match
! 8687: abpq
! 8688: No match
! 8689:
! 8690: /(?=a(*THEN:A)b)..x/K
! 8691: abxy
! 8692: 0: abx
! 8693: MK: A
! 8694: ** Failers
! 8695: No match
! 8696: abpq
! 8697: No match
! 8698:
! 8699: /(?=a(*THEN:A)b)..(*:Y)x/K
! 8700: abxy
! 8701: 0: abx
! 8702: MK: Y
! 8703: ** Failers
! 8704: No match
! 8705: abpq
! 8706: No match
! 8707:
! 8708: /(another)?(\1?)test/
! 8709: hello world test
! 8710: 0: test
! 8711: 1: <unset>
! 8712: 2:
! 8713:
! 8714: /(another)?(\1+)test/
! 8715: hello world test
! 8716: No match
! 8717:
! 8718: /(a(*COMMIT)b){0}a(?1)|aac/
! 8719: aac
! 8720: 0: aac
! 8721:
! 8722: /(?!a(*COMMIT)b)ac|cd/
! 8723: ac
! 8724: 0: ac
! 8725:
! 8726: /((?:a?)*)*c/
! 8727: aac
! 8728: 0: aac
! 8729: 1:
! 8730:
! 8731: /((?>a?)*)*c/
! 8732: aac
! 8733: 0: aac
! 8734: 1:
! 8735:
! 8736: /(?>.*?a)(?<=ba)/
! 8737: aba
! 8738: 0: ba
! 8739:
! 8740: /(?:.*?a)(?<=ba)/
! 8741: aba
! 8742: 0: aba
! 8743:
! 8744: /.*?a(*PRUNE)b/
! 8745: aab
! 8746: 0: ab
! 8747:
! 8748: /.*?a(*PRUNE)b/s
! 8749: aab
! 8750: 0: ab
! 8751:
! 8752: /^a(*PRUNE)b/s
! 8753: aab
! 8754: No match
! 8755:
! 8756: /.*?a(*SKIP)b/
! 8757: aab
! 8758: 0: ab
! 8759:
! 8760: /(?>.*?a)b/s
! 8761: aab
! 8762: 0: ab
! 8763:
! 8764: /(?>.*?a)b/
! 8765: aab
! 8766: 0: ab
! 8767:
! 8768: /(?>^a)b/s
! 8769: aab
! 8770: No match
! 8771:
! 8772: /(?>.*?)(?<=(abcd)|(wxyz))/
! 8773: alphabetabcd
! 8774: 0:
! 8775: 1: abcd
! 8776: endingwxyz
! 8777: 0:
! 8778: 1: <unset>
! 8779: 2: wxyz
! 8780:
! 8781: /(?>.*)(?<=(abcd)|(wxyz))/
! 8782: alphabetabcd
! 8783: 0: alphabetabcd
! 8784: 1: abcd
! 8785: endingwxyz
! 8786: 0: endingwxyz
! 8787: 1: <unset>
! 8788: 2: wxyz
! 8789:
! 8790: "(?>.*)foo"
! 8791: abcdfooxyz
! 8792: No match
! 8793:
! 8794: "(?>.*?)foo"
! 8795: abcdfooxyz
! 8796: 0: foo
! 8797:
1.1 misho 8798: /-- End of testinput1 --/
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>