Annotation of embedaddon/pcre/testdata/testinput1, revision 1.1.1.4
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:
1.1.1.4 ! misho 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. --/
1.1 misho 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|ac)/
4660: ** Failers
4661: ac
4662:
4663: /^(?=a(*PRUNE)b)/
4664: ab
4665: ** Failers
4666: ac
4667:
4668: /^(?=a(*ACCEPT)b)/
4669: ac
4670:
4671: /(?>a\Kb)/
4672: ab
4673:
4674: /((?>a\Kb))/
4675: ab
4676:
4677: /(a\Kb)/
4678: ab
4679:
4680: /^a\Kcz|ac/
4681: ac
4682:
4683: /(?>a\Kbz|ab)/
4684: ab
4685:
4686: /^(?&t)(?(DEFINE)(?<t>a\Kb))$/
4687: ab
4688:
4689: /^([^()]|\((?1)*\))*$/
4690: a(b)c
4691: a(b(c)d)e
4692:
4693: /(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))/
4694: 0
4695: 00
4696: 0000
4697:
4698: /(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))/
4699: 0
4700: 00
4701: 0000
4702:
4703: /--- This one does fail, as expected, in Perl. It needs the complex item at the
4704: end of the pattern. A single letter instead of (B|D) makes it not fail,
4705: which I think is a Perl bug. --- /
4706:
4707: /A(*COMMIT)(B|D)/
4708: ACABX
4709:
4710: /--- Check the use of names for failure ---/
4711:
4712: /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
4713: ** Failers
4714: AC
4715: CB
4716:
4717: /--- Force no study, otherwise mark is not seen. The studied version is in
4718: test 2 because it isn't Perl-compatible. ---/
4719:
4720: /(*MARK:A)(*SKIP:B)(C|X)/KSS
4721: C
4722: D
4723:
4724: /^(A(*THEN:A)B|C(*THEN:B)D)/K
4725: ** Failers
4726: CB
4727:
4728: /^(?:A(*THEN:A)B|C(*THEN:B)D)/K
4729: CB
4730:
4731: /^(?>A(*THEN:A)B|C(*THEN:B)D)/K
4732: CB
4733:
4734: /--- This should succeed, as the skip causes bump to offset 1 (the mark). Note
4735: that we have to have something complicated such as (B|Z) at the end because,
4736: for Perl, a simple character somehow causes an unwanted optimization to mess
4737: with the handling of backtracking verbs. ---/
4738:
4739: /A(*MARK:A)A+(*SKIP:A)(B|Z) | AC/xK
4740: AAAC
4741:
4742: /--- Test skipping over a non-matching mark. ---/
4743:
4744: /A(*MARK:A)A+(*MARK:B)(*SKIP:A)(B|Z) | AC/xK
4745: AAAC
4746:
4747: /--- Check shorthand for MARK ---/
4748:
4749: /A(*:A)A+(*SKIP:A)(B|Z) | AC/xK
4750: AAAC
4751:
4752: /--- Don't loop! Force no study, otherwise mark is not seen. ---/
4753:
4754: /(*:A)A+(*SKIP:A)(B|Z)/KSS
4755: AAAC
4756:
4757: /--- This should succeed, as a non-existent skip name disables the skip ---/
4758:
4759: /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/xK
4760: AAAC
4761:
4762: /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC(*:B)/xK
4763: AAAC
4764:
4765: /--- COMMIT at the start of a pattern should act like an anchor. Again,
4766: however, we need the complication for Perl. ---/
4767:
4768: /(*COMMIT)(A|P)(B|P)(C|P)/
4769: ABCDEFG
4770: ** Failers
4771: DEFGABC
4772:
4773: /--- COMMIT inside an atomic group can't stop backtracking over the group. ---/
4774:
4775: /(\w+)(?>b(*COMMIT))\w{2}/
4776: abbb
4777:
4778: /(\w+)b(*COMMIT)\w{2}/
4779: abbb
4780:
4781: /--- Check opening parens in comment when seeking forward reference. ---/
4782:
4783: /(?&t)(?#()(?(DEFINE)(?<t>a))/
4784: bac
4785:
4786: /--- COMMIT should override THEN ---/
4787:
4788: /(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?/
4789: yes
4790:
4791: /(?>(*COMMIT)(yes|no)(*THEN)(*F))?/
4792: yes
4793:
4794: /b?(*SKIP)c/
4795: bc
4796: abc
4797:
4798: /(*SKIP)bc/
4799: a
4800:
4801: /(*SKIP)b/
4802: a
4803:
4804: /(?P<abn>(?P=abn)xxx|)+/
4805: xxx
4806:
4807: /(?i:([^b]))(?1)/
4808: aa
4809: aA
4810: ** Failers
4811: ab
4812: aB
4813: Ba
4814: ba
4815:
4816: /^(?&t)*+(?(DEFINE)(?<t>a))\w$/
4817: aaaaaaX
4818: ** Failers
4819: aaaaaa
4820:
4821: /^(?&t)*(?(DEFINE)(?<t>a))\w$/
4822: aaaaaaX
4823: aaaaaa
4824:
4825: /^(a)*+(\w)/
4826: aaaaX
4827: YZ
4828: ** Failers
4829: aaaa
4830:
4831: /^(?:a)*+(\w)/
4832: aaaaX
4833: YZ
4834: ** Failers
4835: aaaa
4836:
4837: /^(a)++(\w)/
4838: aaaaX
4839: ** Failers
4840: aaaa
4841: YZ
4842:
4843: /^(?:a)++(\w)/
4844: aaaaX
4845: ** Failers
4846: aaaa
4847: YZ
4848:
4849: /^(a)?+(\w)/
4850: aaaaX
4851: YZ
4852:
4853: /^(?:a)?+(\w)/
4854: aaaaX
4855: YZ
4856:
4857: /^(a){2,}+(\w)/
4858: aaaaX
4859: ** Failers
4860: aaa
4861: YZ
4862:
4863: /^(?:a){2,}+(\w)/
4864: aaaaX
4865: ** Failers
4866: aaa
4867: YZ
4868:
4869: /(a|)*(?1)b/
4870: b
4871: ab
4872: aab
4873:
4874: /(a)++(?1)b/
4875: ** Failers
4876: ab
4877: aab
4878:
4879: /(a)*+(?1)b/
4880: ** Failers
4881: ab
4882: aab
4883:
4884: /(?1)(?:(b)){0}/
4885: b
4886:
4887: /(foo ( \( ((?:(?> [^()]+ )|(?2))*) \) ) )/x
4888: foo(bar(baz)+baz(bop))
4889:
4890: /(A (A|B(*ACCEPT)|C) D)(E)/x
4891: AB
4892:
4893: /\A.*?(a|bc)/
4894: ba
4895:
4896: /\A.*?(?:a|bc)++/
4897: ba
4898:
4899: /\A.*?(a|bc)++/
4900: ba
4901:
4902: /\A.*?(?:a|bc|d)/
4903: ba
4904:
4905: /(?:(b))++/
4906: beetle
4907:
4908: /(?(?=(a(*ACCEPT)z))a)/
4909: a
4910:
4911: /^(a)(?1)+ab/
4912: aaaab
4913:
4914: /^(a)(?1)++ab/
4915: aaaab
4916:
4917: /^(?=a(*:M))aZ/K
4918: aZbc
4919:
4920: /^(?!(*:M)b)aZ/K
4921: aZbc
4922:
4923: /(?(DEFINE)(a))?b(?1)/
4924: backgammon
4925:
4926: /^\N+/
4927: abc\ndef
4928:
4929: /^\N{1,}/
4930: abc\ndef
4931:
4932: /(?(R)a+|(?R)b)/
4933: aaaabcde
4934:
4935: /(?(R)a+|((?R))b)/
4936: aaaabcde
4937:
4938: /((?(R)a+|(?1)b))/
4939: aaaabcde
4940:
4941: /((?(R1)a+|(?1)b))/
4942: aaaabcde
4943:
4944: /a(*:any
4945: name)/K
4946: abc
4947:
4948: /(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))/
4949: a
4950: ba
4951: bba
4952:
4953: /--- Checking revised (*THEN) handling ---/
4954:
4955: /--- Capture ---/
4956:
4957: /^.*? (a(*THEN)b) c/x
4958: aabc
4959:
4960: /^.*? (a(*THEN)b|(*F)) c/x
4961: aabc
4962:
4963: /^.*? ( (a(*THEN)b) | (*F) ) c/x
4964: aabc
4965:
4966: /^.*? ( (a(*THEN)b) ) c/x
4967: aabc
4968:
4969: /--- Non-capture ---/
4970:
4971: /^.*? (?:a(*THEN)b) c/x
4972: aabc
4973:
4974: /^.*? (?:a(*THEN)b|(*F)) c/x
4975: aabc
4976:
4977: /^.*? (?: (?:a(*THEN)b) | (*F) ) c/x
4978: aabc
4979:
4980: /^.*? (?: (?:a(*THEN)b) ) c/x
4981: aabc
4982:
4983: /--- Atomic ---/
4984:
4985: /^.*? (?>a(*THEN)b) c/x
4986: aabc
4987:
4988: /^.*? (?>a(*THEN)b|(*F)) c/x
4989: aabc
4990:
4991: /^.*? (?> (?>a(*THEN)b) | (*F) ) c/x
4992: aabc
4993:
4994: /^.*? (?> (?>a(*THEN)b) ) c/x
4995: aabc
4996:
4997: /--- Possessive capture ---/
4998:
4999: /^.*? (a(*THEN)b)++ c/x
5000: aabc
5001:
5002: /^.*? (a(*THEN)b|(*F))++ c/x
5003: aabc
5004:
5005: /^.*? ( (a(*THEN)b)++ | (*F) )++ c/x
5006: aabc
5007:
5008: /^.*? ( (a(*THEN)b)++ )++ c/x
5009: aabc
5010:
5011: /--- Possessive non-capture ---/
5012:
5013: /^.*? (?:a(*THEN)b)++ c/x
5014: aabc
5015:
5016: /^.*? (?:a(*THEN)b|(*F))++ c/x
5017: aabc
5018:
5019: /^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c/x
5020: aabc
5021:
5022: /^.*? (?: (?:a(*THEN)b)++ )++ c/x
5023: aabc
5024:
5025: /--- Condition assertion ---/
5026:
5027: /^(?(?=a(*THEN)b)ab|ac)/
5028: ac
5029:
5030: /--- Condition ---/
5031:
5032: /^.*?(?(?=a)a|b(*THEN)c)/
5033: ba
5034:
5035: /^.*?(?:(?(?=a)a|b(*THEN)c)|d)/
5036: ba
5037:
5038: /^.*?(?(?=a)a(*THEN)b|c)/
5039: ac
5040:
5041: /--- Assertion ---/
5042:
5043: /^.*(?=a(*THEN)b)/
5044: aabc
5045:
5046: /------------------------------/
5047:
5048: /(?>a(*:m))/imsxSK
5049: a
5050:
5051: /(?>(a)(*:m))/imsxSK
5052: a
5053:
5054: /(?<=a(*ACCEPT)b)c/
5055: xacd
5056:
5057: /(?<=(a(*ACCEPT)b))c/
5058: xacd
5059:
5060: /(?<=(a(*COMMIT)b))c/
5061: xabcd
5062: ** Failers
5063: xacd
5064:
5065: /(?<!a(*FAIL)b)c/
5066: xcd
5067: acd
5068:
5069: /(?<=a(*:N)b)c/K
5070: xabcd
5071:
5072: /(?<=a(*PRUNE)b)c/
5073: xabcd
5074:
5075: /(?<=a(*SKIP)b)c/
5076: xabcd
5077:
5078: /(?<=a(*THEN)b)c/
5079: xabcd
5080:
5081: /(a)(?2){2}(.)/
5082: abcd
5083:
5084: /(*MARK:A)(*PRUNE:B)(C|X)/KS
5085: C
5086: D
5087:
5088: /(*MARK:A)(*PRUNE:B)(C|X)/KSS
5089: C
5090: D
5091:
5092: /(*MARK:A)(*THEN:B)(C|X)/KS
5093: C
5094: D
5095:
5096: /(*MARK:A)(*THEN:B)(C|X)/KSY
5097: C
5098: D
5099:
5100: /(*MARK:A)(*THEN:B)(C|X)/KSS
5101: C
5102: D
5103:
5104: /--- This should fail, as the skip causes a bump to offset 3 (the skip) ---/
5105:
5106: /A(*MARK:A)A+(*SKIP)(B|Z) | AC/xK
5107: AAAC
5108:
5109: /--- Same --/
5110:
5111: /A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/xK
5112: AAAC
5113:
5114: /A(*:A)A+(*SKIP)(B|Z) | AC/xK
5115: AAAC
5116:
5117: /--- This should fail, as a null name is the same as no name ---/
5118:
5119: /A(*MARK:A)A+(*SKIP:)(B|Z) | AC/xK
5120: AAAC
5121:
5122: /--- A check on what happens after hitting a mark and them bumping along to
5123: something that does not even start. Perl reports tags after the failures here,
5124: though it does not when the individual letters are made into something
5125: more complicated. ---/
5126:
5127: /A(*:A)B|XX(*:B)Y/K
5128: AABC
5129: XXYZ
5130: ** Failers
5131: XAQQ
5132: XAQQXZZ
5133: AXQQQ
5134: AXXQQQ
5135:
5136: /^(A(*THEN:A)B|C(*THEN:B)D)/K
5137: AB
5138: CD
5139: ** Failers
5140: AC
5141: CB
5142:
5143: /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
5144: AB
5145: CD
5146: ** Failers
5147: AC
5148: CB
5149:
5150: /--- An empty name does not pass back an empty string. It is the same as if no
5151: name were given. ---/
5152:
5153: /^(A(*PRUNE:)B|C(*PRUNE:B)D)/K
5154: AB
5155: CD
5156:
5157: /--- PRUNE goes to next bumpalong; COMMIT does not. ---/
5158:
5159: /A(*PRUNE:A)B/K
5160: ACAB
5161:
5162: /--- Mark names can be duplicated ---/
5163:
5164: /A(*:A)B|X(*:A)Y/K
5165: AABC
5166: XXYZ
5167:
5168: /b(*:m)f|a(*:n)w/K
5169: aw
5170: ** Failers
5171: abc
5172:
5173: /b(*:m)f|aw/K
5174: abaw
5175: ** Failers
5176: abc
5177: abax
5178:
5179: /A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC/xK
5180: AAAC
5181:
5182: /a(*PRUNE:X)bc|qq/KY
5183: ** Failers
5184: axy
5185:
5186: /a(*THEN:X)bc|qq/KY
5187: ** Failers
5188: axy
5189:
5190: /(?=a(*MARK:A)b)..x/K
5191: abxy
5192: ** Failers
5193: abpq
5194:
5195: /(?=a(*MARK:A)b)..(*:Y)x/K
5196: abxy
5197: ** Failers
5198: abpq
5199:
5200: /(?=a(*PRUNE:A)b)..x/K
5201: abxy
5202: ** Failers
5203: abpq
5204:
5205: /(?=a(*PRUNE:A)b)..(*:Y)x/K
5206: abxy
5207: ** Failers
5208: abpq
5209:
5210: /(?=a(*THEN:A)b)..x/K
5211: abxy
5212: ** Failers
5213: abpq
5214:
5215: /(?=a(*THEN:A)b)..(*:Y)x/K
5216: abxy
5217: ** Failers
5218: abpq
5219:
5220: /(another)?(\1?)test/
5221: hello world test
5222:
5223: /(another)?(\1+)test/
5224: hello world test
5225:
1.1.1.3 misho 5226: /(a(*COMMIT)b){0}a(?1)|aac/
5227: aac
5228:
5229: /((?:a?)*)*c/
5230: aac
5231:
5232: /((?>a?)*)*c/
5233: aac
5234:
1.1.1.4 ! misho 5235: /(?>.*?a)(?<=ba)/
! 5236: aba
! 5237:
! 5238: /(?:.*?a)(?<=ba)/
! 5239: aba
! 5240:
! 5241: /.*?a(*PRUNE)b/
! 5242: aab
! 5243:
! 5244: /.*?a(*PRUNE)b/s
! 5245: aab
! 5246:
! 5247: /^a(*PRUNE)b/s
! 5248: aab
! 5249:
! 5250: /.*?a(*SKIP)b/
! 5251: aab
! 5252:
! 5253: /(?>.*?a)b/s
! 5254: aab
! 5255:
! 5256: /(?>.*?a)b/
! 5257: aab
! 5258:
! 5259: /(?>^a)b/s
! 5260: aab
! 5261:
! 5262: /(?>.*?)(?<=(abcd)|(wxyz))/
! 5263: alphabetabcd
! 5264: endingwxyz
! 5265:
! 5266: /(?>.*)(?<=(abcd)|(wxyz))/
! 5267: alphabetabcd
! 5268: endingwxyz
! 5269:
! 5270: "(?>.*)foo"
! 5271: abcdfooxyz
! 5272:
! 5273: "(?>.*?)foo"
! 5274: abcdfooxyz
! 5275:
! 5276: /(?:(a(*PRUNE)b)){0}(?:(?1)|ac)/
! 5277: ac
! 5278:
! 5279: /(?:(a(*SKIP)b)){0}(?:(?1)|ac)/
! 5280: ac
! 5281:
! 5282: /(?<=(*SKIP)ac)a/
! 5283: aa
! 5284:
! 5285: /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/xK
! 5286: AAAC
! 5287:
! 5288: /a(*SKIP:m)x|ac(*:n)(*SKIP:n)d|ac/K
! 5289: acacd
! 5290:
! 5291: /A(*SKIP:m)x|A(*SKIP:n)x|AB/K
! 5292: AB
! 5293:
! 5294: /((*SKIP:r)d){0}a(*SKIP:m)x|ac(*:n)|ac/K
! 5295: acacd
! 5296:
! 5297: /-- Tests that try to figure out how Perl works. My hypothesis is that the
! 5298: first verb that is backtracked onto is the one that acts. This seems to be
! 5299: the case almost all the time, but there is one exception that is perhaps a
! 5300: bug. --/
! 5301:
! 5302: /-- This matches "aaaac"; each PRUNE advances one character until the subject
! 5303: no longer starts with 5 'a's. --/
! 5304:
! 5305: /aaaaa(*PRUNE)b|a+c/
! 5306: aaaaaac
! 5307:
! 5308: /-- Putting SKIP in front of PRUNE makes no difference, as it is never
! 5309: backtracked onto, whether or not it has a label. --/
! 5310:
! 5311: /aaaaa(*SKIP)(*PRUNE)b|a+c/
! 5312: aaaaaac
! 5313:
! 5314: /aaaaa(*SKIP:N)(*PRUNE)b|a+c/
! 5315: aaaaaac
! 5316:
! 5317: /aaaa(*:N)a(*SKIP:N)(*PRUNE)b|a+c/
! 5318: aaaaaac
! 5319:
! 5320: /-- Putting THEN in front makes no difference. */
! 5321:
! 5322: /aaaaa(*THEN)(*PRUNE)b|a+c/
! 5323: aaaaaac
! 5324:
! 5325: /-- However, putting COMMIT in front of the prune changes it to "no match". I
! 5326: think this is inconsistent and possibly a bug. For the moment, running this
! 5327: test is moved out of the Perl-compatible file. --/
! 5328:
! 5329: /aaaaa(*COMMIT)(*PRUNE)b|a+c/
! 5330:
! 5331:
! 5332: /---- OK, lets play the same game again using SKIP instead of PRUNE. ----/
! 5333:
! 5334: /-- This matches "ac" because SKIP forces the next match to start on the
! 5335: sixth "a". --/
! 5336:
! 5337: /aaaaa(*SKIP)b|a+c/
! 5338: aaaaaac
! 5339:
! 5340: /-- Putting PRUNE in front makes no difference. --/
! 5341:
! 5342: /aaaaa(*PRUNE)(*SKIP)b|a+c/
! 5343: aaaaaac
! 5344:
! 5345: /-- Putting THEN in front makes no difference. --/
! 5346:
! 5347: /aaaaa(*THEN)(*SKIP)b|a+c/
! 5348: aaaaaac
! 5349:
! 5350: /-- In this case, neither does COMMIT. This still matches "ac". --/
! 5351:
! 5352: /aaaaa(*COMMIT)(*SKIP)b|a+c/
! 5353: aaaaaac
! 5354:
! 5355: /-- This gives "no match", as expected. --/
! 5356:
! 5357: /aaaaa(*COMMIT)b|a+c/
! 5358: aaaaaac
! 5359:
! 5360:
! 5361: /------ Tests using THEN ------/
! 5362:
! 5363: /-- This matches "aaaaaac", as expected. --/
! 5364:
! 5365: /aaaaa(*THEN)b|a+c/
! 5366: aaaaaac
! 5367:
! 5368: /-- Putting SKIP in front makes no difference. --/
! 5369:
! 5370: /aaaaa(*SKIP)(*THEN)b|a+c/
! 5371: aaaaaac
! 5372:
! 5373: /-- Putting PRUNE in front makes no difference. --/
! 5374:
! 5375: /aaaaa(*PRUNE)(*THEN)b|a+c/
! 5376: aaaaaac
! 5377:
! 5378: /-- Putting COMMIT in front makes no difference. --/
! 5379:
! 5380: /aaaaa(*COMMIT)(*THEN)b|a+c/
! 5381: aaaaaac
! 5382:
! 5383: /-- End of "priority" tests --/
! 5384:
! 5385: /aaaaa(*:m)(*PRUNE:m)(*SKIP:m)m|a+/
! 5386: aaaaaa
! 5387:
! 5388: /aaaaa(*:m)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/
! 5389: aaaaaa
! 5390:
! 5391: /aaaaa(*:n)(*PRUNE:m)(*SKIP:m)m|a+/
! 5392: aaaaaa
! 5393:
! 5394: /aaaaa(*:n)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/
! 5395: aaaaaa
! 5396:
! 5397: /a(*MARK:A)aa(*PRUNE:A)a(*SKIP:A)b|a+c/
! 5398: aaaac
! 5399:
! 5400: /a(*MARK:A)aa(*MARK:A)a(*SKIP:A)b|a+c/
! 5401: aaaac
! 5402:
! 5403: /aaa(*PRUNE:A)a(*SKIP:A)b|a+c/
! 5404: aaaac
! 5405:
! 5406: /aaa(*MARK:A)a(*SKIP:A)b|a+c/
! 5407: aaaac
! 5408:
! 5409: /a(*:m)a(*COMMIT)(*SKIP:m)b|a+c/K
! 5410: aaaaaac
! 5411:
! 5412: /.?(a|b(*THEN)c)/
! 5413: ba
! 5414:
! 5415: /(a(*COMMIT)b)c|abd/
! 5416: abc
! 5417: abd
! 5418:
! 5419: /(?=a(*COMMIT)b)abc|abd/
! 5420: abc
! 5421: abd
! 5422:
! 5423: /(?>a(*COMMIT)b)c|abd/
! 5424: abc
! 5425: abd
! 5426:
! 5427: /a(?=b(*COMMIT)c)[^d]|abd/
! 5428: abd
! 5429: abc
! 5430:
! 5431: /a(?=bc).|abd/
! 5432: abd
! 5433: abc
! 5434:
! 5435: /a(?>b(*COMMIT)c)d|abd/
! 5436: abceabd
! 5437:
! 5438: /a(?>bc)d|abd/
! 5439: abceabd
! 5440:
! 5441: /(?>a(*COMMIT)b)c|abd/
! 5442: abd
! 5443:
! 5444: /(?>a(*COMMIT)c)d|abd/
! 5445: abd
! 5446:
! 5447: /((?=a(*COMMIT)b)ab|ac){0}(?:(?1)|a(c))/
! 5448: ac
! 5449:
! 5450: /-- These tests were formerly in test 2, but changes in PCRE and Perl have
! 5451: made them compatible. --/
! 5452:
! 5453: /^(a)?(?(1)a|b)+$/
! 5454: *** Failers
! 5455: a
! 5456:
! 5457: /(?=a\Kb)ab/
! 5458: ab
! 5459:
! 5460: /(?!a\Kb)ac/
! 5461: ac
! 5462:
! 5463: /^abc(?<=b\Kc)d/
! 5464: abcd
! 5465:
! 5466: /^abc(?<!b\Kq)d/
! 5467: abcd
! 5468:
! 5469:
! 5470: /A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC/xK
! 5471: AAAC
! 5472:
! 5473: /^((abc|abcx)(*THEN)y|abcd)/
! 5474: abcd
! 5475: *** Failers
! 5476: abcxy
! 5477:
! 5478: /^((yes|no)(*THEN)(*F))?/
! 5479: yes
! 5480:
! 5481: /(A (.*) C? (*THEN) | A D) (*FAIL)/x
! 5482: AbcdCBefgBhiBqz
! 5483:
! 5484: /(A (.*) C? (*THEN) | A D) z/x
! 5485: AbcdCBefgBhiBqz
! 5486:
! 5487: /(A (.*) C? (*THEN) | A D) \s* (*FAIL)/x
! 5488: AbcdCBefgBhiBqz
! 5489:
! 5490: /(A (.*) C? (*THEN) | A D) \s* z/x
! 5491: AbcdCBefgBhiBqz
! 5492:
! 5493: /(A (.*) (?:C|) (*THEN) | A D) (*FAIL)/x
! 5494: AbcdCBefgBhiBqz
! 5495:
! 5496: /(A (.*) (?:C|) (*THEN) | A D) z/x
! 5497: AbcdCBefgBhiBqz
! 5498:
! 5499: /(A (.*) C{0,6} (*THEN) | A D) (*FAIL)/x
! 5500: AbcdCBefgBhiBqz
! 5501:
! 5502: /(A (.*) C{0,6} (*THEN) | A D) z/x
! 5503: AbcdCBefgBhiBqz
! 5504:
! 5505: /(A (.*) (CE){0,6} (*THEN) | A D) (*FAIL)/x
! 5506: AbcdCEBefgBhiBqz
! 5507:
! 5508: /(A (.*) (CE){0,6} (*THEN) | A D) z/x
! 5509: AbcdCEBefgBhiBqz
! 5510:
! 5511: /(A (.*) (CE*){0,6} (*THEN) | A D) (*FAIL)/x
! 5512: AbcdCBefgBhiBqz
! 5513:
! 5514: /(A (.*) (CE*){0,6} (*THEN) | A D) z/x
! 5515: AbcdCBefgBhiBqz
! 5516:
! 5517: /(?=a(*COMMIT)b|ac)ac|ac/
! 5518: ac
! 5519:
! 5520: /(?=a(*COMMIT)b|(ac)) ac | (a)c/x
! 5521: ac
! 5522:
! 5523: /--------/
! 5524:
! 5525: /(?(?!b(*THEN)a)bn|bnn)/
! 5526: bnn
! 5527:
! 5528: /(?!b(*SKIP)a)bn|bnn/
! 5529: bnn
! 5530:
! 5531: /(?(?!b(*SKIP)a)bn|bnn)/
! 5532: bnn
! 5533:
! 5534: /(?!b(*PRUNE)a)bn|bnn/
! 5535: bnn
! 5536:
! 5537: /(?(?!b(*PRUNE)a)bn|bnn)/
! 5538: bnn
! 5539:
! 5540: /(?!b(*COMMIT)a)bn|bnn/
! 5541: bnn
! 5542:
! 5543: /(?(?!b(*COMMIT)a)bn|bnn)/
! 5544: bnn
! 5545:
! 5546: /(?=b(*SKIP)a)bn|bnn/
! 5547: bnn
! 5548:
! 5549: /(?=b(*THEN)a)bn|bnn/
! 5550: bnn
! 5551:
! 5552: /^(?!a(*SKIP)b)/
! 5553: ac
! 5554:
! 5555: /^(?!a(*SKIP)b)../
! 5556: acd
! 5557:
! 5558: /(?!a(*SKIP)b)../
! 5559: acd
! 5560:
! 5561: /^(?(?!a(*SKIP)b))/
! 5562: ac
! 5563:
! 5564: /^(?!a(*PRUNE)b)../
! 5565: acd
! 5566:
! 5567: /(?!a(*PRUNE)b)../
! 5568: acd
! 5569:
! 5570: /(?!a(*COMMIT)b)ac|cd/
! 5571: ac
! 5572:
! 5573: /\A.*?(?:a|bc)/
! 5574: ba
! 5575:
! 5576: /^(A(*THEN)B|C(*THEN)D)/
! 5577: CD
! 5578:
! 5579: /(*:m(m)(?&y)(?(DEFINE)(?<y>b))/K
! 5580: abc
! 5581:
! 5582: /(*PRUNE:m(m)(?&y)(?(DEFINE)(?<y>b))/K
! 5583: abc
! 5584:
! 5585: /(*SKIP:m(m)(?&y)(?(DEFINE)(?<y>b))/K
! 5586: abc
! 5587:
! 5588: /(*THEN:m(m)(?&y)(?(DEFINE)(?<y>b))/K
! 5589: abc
! 5590:
! 5591: /^\d*\w{4}/
! 5592: 1234
! 5593: 123
! 5594:
! 5595: /^[^b]*\w{4}/
! 5596: aaaa
! 5597: aaa
! 5598:
! 5599: /^[^b]*\w{4}/i
! 5600: aaaa
! 5601: aaa
! 5602:
! 5603: /^a*\w{4}/
! 5604: aaaa
! 5605: aaa
! 5606:
! 5607: /^a*\w{4}/i
! 5608: aaaa
! 5609: aaa
! 5610:
1.1 misho 5611: /-- End of testinput1 --/
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>