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