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