blob: 607b572b29002225fbb48ccee0ddff9be7a71eff [file] [log] [blame]
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001# This set of tests check the DFA matching functionality of pcre2_dfa_match(),
2# excluding UTF and Unicode property support. All matches are done using DFA,
3# forced by setting a default subject modifier at the start.
Nick Kralevichf73ff172014-09-27 12:41:49 -07004
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005#forbid_utf
6#subject dfa
7#newline_default lf anycrlf any
Nick Kralevichf73ff172014-09-27 12:41:49 -07008
9/abc/
10 abc
11 0: abc
12
13/ab*c/
14 abc
15 0: abc
16 abbbbc
17 0: abbbbc
18 ac
19 0: ac
20
21/ab+c/
22 abc
23 0: abc
24 abbbbbbc
25 0: abbbbbbc
Janis Danisevskis53e448c2016-03-31 13:35:25 +010026\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -070027 ac
28No match
29 ab
30No match
31
Janis Danisevskis53e448c2016-03-31 13:35:25 +010032/a*/no_auto_possess
Nick Kralevichf73ff172014-09-27 12:41:49 -070033 a
34 0: a
35 1:
36 aaaaaaaaaaaaaaaaa
Janis Danisevskis53e448c2016-03-31 13:35:25 +010037Matched, but offsets vector is too small to show all matches
Nick Kralevichf73ff172014-09-27 12:41:49 -070038 0: aaaaaaaaaaaaaaaaa
39 1: aaaaaaaaaaaaaaaa
40 2: aaaaaaaaaaaaaaa
41 3: aaaaaaaaaaaaaa
42 4: aaaaaaaaaaaaa
43 5: aaaaaaaaaaaa
44 6: aaaaaaaaaaa
45 7: aaaaaaaaaa
46 8: aaaaaaaaa
47 9: aaaaaaaa
4810: aaaaaaa
4911: aaaaaa
5012: aaaaa
5113: aaaa
5214: aaa
Janis Danisevskis53e448c2016-03-31 13:35:25 +010053 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\=ovector=10
Nick Kralevichf73ff172014-09-27 12:41:49 -070054Matched, but offsets vector is too small to show all matches
55 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
56 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
57 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaa
58 3: aaaaaaaaaaaaaaaaaaaaaaaaaaa
59 4: aaaaaaaaaaaaaaaaaaaaaaaaaa
60 5: aaaaaaaaaaaaaaaaaaaaaaaaa
61 6: aaaaaaaaaaaaaaaaaaaaaaaa
62 7: aaaaaaaaaaaaaaaaaaaaaaa
63 8: aaaaaaaaaaaaaaaaaaaaaa
64 9: aaaaaaaaaaaaaaaaaaaaa
Janis Danisevskis53e448c2016-03-31 13:35:25 +010065 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\=dfa_shortest
Nick Kralevichf73ff172014-09-27 12:41:49 -070066 0:
67
68/(a|abcd|african)/
69 a
70 0: a
71 abcd
72 0: abcd
73 1: a
74 african
75 0: african
76 1: a
77
78/^abc/
79 abcdef
80 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +010081\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -070082 xyzabc
83No match
84 xyz\nabc
85No match
86
87/^abc/m
88 abcdef
89 0: abc
90 xyz\nabc
91 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +010092\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -070093 xyzabc
94No match
95
96/\Aabc/
97 abcdef
98 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +010099\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700100 xyzabc
101No match
102 xyz\nabc
103No match
104
105/\Aabc/m
106 abcdef
107 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100108\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700109 xyzabc
110No match
111 xyz\nabc
112No match
113
114/\Gabc/
115 abcdef
116 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100117 xyzabc\=offset=3
Nick Kralevichf73ff172014-09-27 12:41:49 -0700118 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100119\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700120 xyzabc
121No match
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100122 xyzabc\=offset=2
Nick Kralevichf73ff172014-09-27 12:41:49 -0700123No match
124
125/x\dy\Dz/
126 x9yzz
127 0: x9yzz
128 x0y+z
129 0: x0y+z
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100130\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700131 xyz
132No match
133 xxy0z
134No match
135
136/x\sy\Sz/
137 x yzz
138 0: x yzz
139 x y+z
140 0: x y+z
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100141\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700142 xyz
143No match
144 xxyyz
145No match
146
147/x\wy\Wz/
148 xxy+z
149 0: xxy+z
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100150\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700151 xxy0z
152No match
153 x+y+z
154No match
155
156/x.y/
157 x+y
158 0: x+y
159 x-y
160 0: x-y
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100161\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700162 x\ny
163No match
164
165/x.y/s
166 x+y
167 0: x+y
168 x-y
169 0: x-y
170 x\ny
171 0: x\x0ay
172
173/(a.b(?s)c.d|x.y)p.q/
174 a+bc+dp+q
175 0: a+bc+dp+q
176 a+bc\ndp+q
177 0: a+bc\x0adp+q
178 x\nyp+q
179 0: x\x0ayp+q
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100180\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700181 a\nbc\ndp+q
182No match
183 a+bc\ndp\nq
184No match
185 x\nyp\nq
186No match
187
188/a\d\z/
189 ba0
190 0: a0
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100191\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700192 ba0\n
193No match
194 ba0\ncd
195No match
196
197/a\d\z/m
198 ba0
199 0: a0
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100200\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700201 ba0\n
202No match
203 ba0\ncd
204No match
205
206/a\d\Z/
207 ba0
208 0: a0
209 ba0\n
210 0: a0
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100211\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700212 ba0\ncd
213No match
214
215/a\d\Z/m
216 ba0
217 0: a0
218 ba0\n
219 0: a0
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100220\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700221 ba0\ncd
222No match
223
224/a\d$/
225 ba0
226 0: a0
227 ba0\n
228 0: a0
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100229\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700230 ba0\ncd
231No match
232
233/a\d$/m
234 ba0
235 0: a0
236 ba0\n
237 0: a0
238 ba0\ncd
239 0: a0
Nick Kralevichf73ff172014-09-27 12:41:49 -0700240
241/abc/i
242 abc
243 0: abc
244 aBc
245 0: aBc
246 ABC
247 0: ABC
248
249/[^a]/
250 abcd
251 0: b
252
253/ab?\w/
254 abz
255 0: abz
256 1: ab
257 abbz
258 0: abb
259 1: ab
260 azz
261 0: az
262
263/x{0,3}yz/
264 ayzq
265 0: yz
266 axyzq
267 0: xyz
268 axxyz
269 0: xxyz
270 axxxyzq
271 0: xxxyz
272 axxxxyzq
273 0: xxxyz
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100274\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700275 ax
276No match
277 axx
278No match
279
280/x{3}yz/
281 axxxyzq
282 0: xxxyz
283 axxxxyzq
284 0: xxxyz
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100285\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700286 ax
287No match
288 axx
289No match
290 ayzq
291No match
292 axyzq
293No match
294 axxyz
295No match
296
297/x{2,3}yz/
298 axxyz
299 0: xxyz
300 axxxyzq
301 0: xxxyz
302 axxxxyzq
303 0: xxxyz
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100304\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700305 ax
306No match
307 axx
308No match
309 ayzq
310No match
311 axyzq
312No match
313
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100314/[^a]+/no_auto_possess
Nick Kralevichf73ff172014-09-27 12:41:49 -0700315 bac
316 0: b
317 bcdefax
318 0: bcdef
319 1: bcde
320 2: bcd
321 3: bc
322 4: b
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100323\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700324 aaaaa
325No match
326
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100327/[^a]*/no_auto_possess
Nick Kralevichf73ff172014-09-27 12:41:49 -0700328 bac
329 0: b
330 1:
331 bcdefax
332 0: bcdef
333 1: bcde
334 2: bcd
335 3: bc
336 4: b
337 5:
Nick Kralevichf73ff172014-09-27 12:41:49 -0700338 aaaaa
339 0:
340
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100341/[^a]{3,5}/no_auto_possess
Nick Kralevichf73ff172014-09-27 12:41:49 -0700342 xyz
343 0: xyz
344 awxyza
345 0: wxyz
346 1: wxy
347 abcdefa
348 0: bcdef
349 1: bcde
350 2: bcd
351 abcdefghijk
352 0: bcdef
353 1: bcde
354 2: bcd
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100355\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700356 axya
357No match
358 axa
359No match
360 aaaaa
361No match
362
363/\d*/
364 1234b567
365 0: 1234
366 xyz
367 0:
368
369/\D*/
370 a1234b567
371 0: a
372 xyz
373 0: xyz
374
375/\d+/
376 ab1234c56
377 0: 1234
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100378\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700379 xyz
380No match
381
382/\D+/
383 ab123c56
384 0: ab
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100385\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700386 789
387No match
388
389/\d?A/
390 045ABC
391 0: 5A
392 ABC
393 0: A
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100394\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700395 XYZ
396No match
397
398/\D?A/
399 ABC
400 0: A
401 BAC
402 0: BA
403 9ABC
404 0: A
Nick Kralevichf73ff172014-09-27 12:41:49 -0700405
406/a+/
407 aaaa
408 0: aaaa
409
410/^.*xyz/
411 xyz
412 0: xyz
413 ggggggggxyz
414 0: ggggggggxyz
415
416/^.+xyz/
417 abcdxyz
418 0: abcdxyz
419 axyz
420 0: axyz
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100421\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700422 xyz
423No match
424
425/^.?xyz/
426 xyz
427 0: xyz
428 cxyz
429 0: cxyz
430
431/^\d{2,3}X/
432 12X
433 0: 12X
434 123X
435 0: 123X
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100436\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700437 X
438No match
439 1X
440No match
441 1234X
442No match
443
444/^[abcd]\d/
445 a45
446 0: a4
447 b93
448 0: b9
449 c99z
450 0: c9
451 d04
452 0: d0
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100453\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700454 e45
455No match
456 abcd
457No match
458 abcd1234
459No match
460 1234
461No match
462
463/^[abcd]*\d/
464 a45
465 0: a4
466 b93
467 0: b9
468 c99z
469 0: c9
470 d04
471 0: d0
472 abcd1234
473 0: abcd1
474 1234
475 0: 1
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100476\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700477 e45
478No match
479 abcd
480No match
481
482/^[abcd]+\d/
483 a45
484 0: a4
485 b93
486 0: b9
487 c99z
488 0: c9
489 d04
490 0: d0
491 abcd1234
492 0: abcd1
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100493\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700494 1234
495No match
496 e45
497No match
498 abcd
499No match
500
501/^a+X/
502 aX
503 0: aX
504 aaX
505 0: aaX
506
507/^[abcd]?\d/
508 a45
509 0: a4
510 b93
511 0: b9
512 c99z
513 0: c9
514 d04
515 0: d0
516 1234
517 0: 1
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100518\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700519 abcd1234
520No match
521 e45
522No match
523
524/^[abcd]{2,3}\d/
525 ab45
526 0: ab4
527 bcd93
528 0: bcd9
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100529\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700530 1234
531No match
532 a36
533No match
534 abcd1234
535No match
536 ee45
537No match
538
539/^(abc)*\d/
540 abc45
541 0: abc4
542 abcabcabc45
543 0: abcabcabc4
544 42xyz
545 0: 4
Nick Kralevichf73ff172014-09-27 12:41:49 -0700546
547/^(abc)+\d/
548 abc45
549 0: abc4
550 abcabcabc45
551 0: abcabcabc4
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100552\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700553 42xyz
554No match
555
556/^(abc)?\d/
557 abc45
558 0: abc4
559 42xyz
560 0: 4
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100561\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700562 abcabcabc45
563No match
564
565/^(abc){2,3}\d/
566 abcabc45
567 0: abcabc4
568 abcabcabc45
569 0: abcabcabc4
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100570\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700571 abcabcabcabc45
572No match
573 abc45
574No match
575 42xyz
576No match
577
578/1(abc|xyz)2(?1)3/
579 1abc2abc3456
580 0: 1abc2abc3
581 1abc2xyz3456
582 0: 1abc2xyz3
583
584/^(a*\w|ab)=(a*\w|ab)/
585 ab=ab
586 0: ab=ab
587 1: ab=a
588
589/^(a*\w|ab)=(?1)/
590 ab=ab
591 0: ab=ab
592 1: ab=a
593
594/^([^()]|\((?1)*\))*$/
595 abc
596 0: abc
597 a(b)c
598 0: a(b)c
599 a(b(c))d
600 0: a(b(c))d
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100601\= Expect no match)
Nick Kralevichf73ff172014-09-27 12:41:49 -0700602 a(b(c)d
603No match
604
605/^>abc>([^()]|\((?1)*\))*<xyz<$/
606 >abc>123<xyz<
607 0: >abc>123<xyz<
608 >abc>1(2)3<xyz<
609 0: >abc>1(2)3<xyz<
610 >abc>(1(2)3)<xyz<
611 0: >abc>(1(2)3)<xyz<
612
613/^(?>a*)\d/
614 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9876
615 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100616\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700617 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
618No match
619
620/< (?: (?(R) \d++ | [^<>]*+) | (?R)) * >/x
621 <>
622 0: <>
623 <abcd>
624 0: <abcd>
625 <abc <123> hij>
626 0: <abc <123> hij>
627 <abc <def> hij>
628 0: <def>
629 <abc<>def>
630 0: <abc<>def>
631 <abc<>
632 0: <>
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100633\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700634 <abc
635No match
636
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100637/^(?(?=abc)\w{3}:|\d\d)$/
Nick Kralevichf73ff172014-09-27 12:41:49 -0700638 abc:
639 0: abc:
640 12
641 0: 12
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100642\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700643 123
644No match
645 xyz
646No match
647
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100648/^(?(?!abc)\d\d|\w{3}:)$/
Nick Kralevichf73ff172014-09-27 12:41:49 -0700649 abc:
650 0: abc:
651 12
652 0: 12
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100653\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700654 123
655No match
656 xyz
657No match
658
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100659/^(?=abc)\w{5}:$/
Nick Kralevichf73ff172014-09-27 12:41:49 -0700660 abcde:
661 0: abcde:
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100662\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700663 abc..
664No match
665 123
666No match
667 vwxyz
668No match
669
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100670/^(?!abc)\d\d$/
Nick Kralevichf73ff172014-09-27 12:41:49 -0700671 12
672 0: 12
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100673\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700674 abcde:
675No match
676 abc..
677No match
678 123
679No match
680 vwxyz
681No match
682
683/(?<=abc|xy)123/
684 abc12345
685 0: 123
686 wxy123z
687 0: 123
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100688\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700689 123abc
690No match
691
692/(?<!abc|xy)123/
693 123abc
694 0: 123
695 mno123456
696 0: 123
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100697\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700698 abc12345
699No match
700 wxy123z
701No match
702
703/abc(?C1)xyz/
704 abcxyz
705--->abcxyz
706 1 ^ ^ x
707 0: abcxyz
708 123abcxyz999
709--->123abcxyz999
710 1 ^ ^ x
711 0: abcxyz
712
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100713/(ab|cd){3,4}/auto_callout
Nick Kralevichf73ff172014-09-27 12:41:49 -0700714 ababab
715--->ababab
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700716 +0 ^ (
Nick Kralevichf73ff172014-09-27 12:41:49 -0700717 +1 ^ a
718 +4 ^ c
719 +2 ^^ b
720 +3 ^ ^ |
721 +1 ^ ^ a
722 +4 ^ ^ c
723 +2 ^ ^ b
724 +3 ^ ^ |
725 +1 ^ ^ a
726 +4 ^ ^ c
727 +2 ^ ^ b
728 +3 ^ ^ |
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700729+12 ^ ^ End of pattern
Nick Kralevichf73ff172014-09-27 12:41:49 -0700730 +1 ^ ^ a
731 +4 ^ ^ c
732 0: ababab
733 abcdabcd
734--->abcdabcd
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700735 +0 ^ (
Nick Kralevichf73ff172014-09-27 12:41:49 -0700736 +1 ^ a
737 +4 ^ c
738 +2 ^^ b
739 +3 ^ ^ |
740 +1 ^ ^ a
741 +4 ^ ^ c
742 +5 ^ ^ d
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700743 +6 ^ ^ ){3,4}
Nick Kralevichf73ff172014-09-27 12:41:49 -0700744 +1 ^ ^ a
745 +4 ^ ^ c
746 +2 ^ ^ b
747 +3 ^ ^ |
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700748+12 ^ ^ End of pattern
Nick Kralevichf73ff172014-09-27 12:41:49 -0700749 +1 ^ ^ a
750 +4 ^ ^ c
751 +5 ^ ^ d
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700752 +6 ^ ^ ){3,4}
753+12 ^ ^ End of pattern
Nick Kralevichf73ff172014-09-27 12:41:49 -0700754 0: abcdabcd
755 1: abcdab
756 abcdcdcdcdcd
757--->abcdcdcdcdcd
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700758 +0 ^ (
Nick Kralevichf73ff172014-09-27 12:41:49 -0700759 +1 ^ a
760 +4 ^ c
761 +2 ^^ b
762 +3 ^ ^ |
763 +1 ^ ^ a
764 +4 ^ ^ c
765 +5 ^ ^ d
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700766 +6 ^ ^ ){3,4}
Nick Kralevichf73ff172014-09-27 12:41:49 -0700767 +1 ^ ^ a
768 +4 ^ ^ c
769 +5 ^ ^ d
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700770 +6 ^ ^ ){3,4}
771+12 ^ ^ End of pattern
Nick Kralevichf73ff172014-09-27 12:41:49 -0700772 +1 ^ ^ a
773 +4 ^ ^ c
774 +5 ^ ^ d
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700775 +6 ^ ^ ){3,4}
776+12 ^ ^ End of pattern
Nick Kralevichf73ff172014-09-27 12:41:49 -0700777 0: abcdcdcd
778 1: abcdcd
779
780/^abc/
781 abcdef
782 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100783\= Expect no match
784 abcdef\=notbol
Nick Kralevichf73ff172014-09-27 12:41:49 -0700785No match
786
787/^(a*|xyz)/
788 bcd
789 0:
790 aaabcd
791 0: aaa
792 xyz
793 0: xyz
794 1:
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100795 xyz\=notempty
Nick Kralevichf73ff172014-09-27 12:41:49 -0700796 0: xyz
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100797\= Expect no match
798 bcd\=notempty
Nick Kralevichf73ff172014-09-27 12:41:49 -0700799No match
800
801/xyz$/
802 xyz
803 0: xyz
804 xyz\n
805 0: xyz
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100806\= Expect no match
807 xyz\=noteol
Nick Kralevichf73ff172014-09-27 12:41:49 -0700808No match
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100809 xyz\n\=noteol
Nick Kralevichf73ff172014-09-27 12:41:49 -0700810No match
811
812/xyz$/m
813 xyz
814 0: xyz
815 xyz\n
816 0: xyz
817 abcxyz\npqr
818 0: xyz
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100819 abcxyz\npqr\=noteol
Nick Kralevichf73ff172014-09-27 12:41:49 -0700820 0: xyz
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100821 xyz\n\=noteol
Nick Kralevichf73ff172014-09-27 12:41:49 -0700822 0: xyz
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100823\= Expect no match
824 xyz\=noteol
Nick Kralevichf73ff172014-09-27 12:41:49 -0700825No match
826
827/\Gabc/
828 abcdef
829 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100830 defabcxyz\=offset=3
Nick Kralevichf73ff172014-09-27 12:41:49 -0700831 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100832\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700833 defabcxyz
834No match
835
836/^abcdef/
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100837 ab\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -0700838Partial match: ab
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100839 abcde\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -0700840Partial match: abcde
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100841 abcdef\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -0700842 0: abcdef
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100843\= Expect no match
844 abx\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -0700845No match
846
847/^a{2,4}\d+z/
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100848 a\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -0700849Partial match: a
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100850 aa\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -0700851Partial match: aa
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100852 aa2\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -0700853Partial match: aa2
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100854 aaa\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -0700855Partial match: aaa
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100856 aaa23\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -0700857Partial match: aaa23
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100858 aaaa12345\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -0700859Partial match: aaaa12345
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100860 aa0z\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -0700861 0: aa0z
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100862 aaaa4444444444444z\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -0700863 0: aaaa4444444444444z
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100864\= Expect no match
865 az\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -0700866No match
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100867 aaaaa\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -0700868No match
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100869 a56\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -0700870No match
871
872/^abcdef/
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100873 abc\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -0700874Partial match: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100875 def\=dfa_restart
Nick Kralevichf73ff172014-09-27 12:41:49 -0700876 0: def
877
878/(?<=foo)bar/
Elliott Hughes2dbd7d22020-06-03 14:32:37 -0700879 foob\=ps,offset=2,allusedtext
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100880Partial match: foob
881 <<<
882 foobar...\=ps,dfa_restart,offset=4
Nick Kralevichf73ff172014-09-27 12:41:49 -0700883 0: ar
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100884 foobar\=offset=2
Nick Kralevichf73ff172014-09-27 12:41:49 -0700885 0: bar
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100886\= Expect no match
887 xyzfo\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -0700888No match
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100889 obar\=dfa_restart
Nick Kralevichf73ff172014-09-27 12:41:49 -0700890No match
891
892/(ab*(cd|ef))+X/
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100893 lkjhlkjhlkjhlkjhabbbbbbcdaefabbbbbbbefa\=ps,notbol,noteol
Nick Kralevichf73ff172014-09-27 12:41:49 -0700894Partial match: abbbbbbcdaefabbbbbbbefa
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100895 cdabbbbbbbb\=ps,notbol,dfa_restart,noteol
Nick Kralevichf73ff172014-09-27 12:41:49 -0700896Partial match: cdabbbbbbbb
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100897 efabbbbbbbbbbbbbbbb\=ps,notbol,dfa_restart,noteol
Nick Kralevichf73ff172014-09-27 12:41:49 -0700898Partial match: efabbbbbbbbbbbbbbbb
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100899 bbbbbbbbbbbbcdXyasdfadf\=ps,notbol,dfa_restart,noteol
Nick Kralevichf73ff172014-09-27 12:41:49 -0700900 0: bbbbbbbbbbbbcdX
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100901\= Expect no match
902 adfadadaklhlkalkajhlkjahdfasdfasdfladsfjkj\=ps,noteol
Nick Kralevichf73ff172014-09-27 12:41:49 -0700903No match
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100904
Nick Kralevichf73ff172014-09-27 12:41:49 -0700905/the quick brown fox/
906 the quick brown fox
907 0: the quick brown fox
Nick Kralevichf73ff172014-09-27 12:41:49 -0700908 What do you know about the quick brown fox?
909 0: the quick brown fox
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100910\= Expect no match
911 The quick brown FOX
912No match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700913 What do you know about THE QUICK BROWN FOX?
914No match
915
916/The quick brown fox/i
917 the quick brown fox
918 0: the quick brown fox
919 The quick brown FOX
920 0: The quick brown FOX
921 What do you know about the quick brown fox?
922 0: the quick brown fox
923 What do you know about THE QUICK BROWN FOX?
924 0: THE QUICK BROWN FOX
925
926/abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
927 abcd\t\n\r\f\a\e9;\$\\?caxyz
928 0: abcd\x09\x0a\x0d\x0c\x07\x1b9;$\?caxyz
929
930/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
931 abxyzpqrrrabbxyyyypqAzz
932 0: abxyzpqrrrabbxyyyypqAzz
933 abxyzpqrrrabbxyyyypqAzz
934 0: abxyzpqrrrabbxyyyypqAzz
935 aabxyzpqrrrabbxyyyypqAzz
936 0: aabxyzpqrrrabbxyyyypqAzz
937 aaabxyzpqrrrabbxyyyypqAzz
938 0: aaabxyzpqrrrabbxyyyypqAzz
939 aaaabxyzpqrrrabbxyyyypqAzz
940 0: aaaabxyzpqrrrabbxyyyypqAzz
941 abcxyzpqrrrabbxyyyypqAzz
942 0: abcxyzpqrrrabbxyyyypqAzz
943 aabcxyzpqrrrabbxyyyypqAzz
944 0: aabcxyzpqrrrabbxyyyypqAzz
945 aaabcxyzpqrrrabbxyyyypAzz
946 0: aaabcxyzpqrrrabbxyyyypAzz
947 aaabcxyzpqrrrabbxyyyypqAzz
948 0: aaabcxyzpqrrrabbxyyyypqAzz
949 aaabcxyzpqrrrabbxyyyypqqAzz
950 0: aaabcxyzpqrrrabbxyyyypqqAzz
951 aaabcxyzpqrrrabbxyyyypqqqAzz
952 0: aaabcxyzpqrrrabbxyyyypqqqAzz
953 aaabcxyzpqrrrabbxyyyypqqqqAzz
954 0: aaabcxyzpqrrrabbxyyyypqqqqAzz
955 aaabcxyzpqrrrabbxyyyypqqqqqAzz
956 0: aaabcxyzpqrrrabbxyyyypqqqqqAzz
957 aaabcxyzpqrrrabbxyyyypqqqqqqAzz
958 0: aaabcxyzpqrrrabbxyyyypqqqqqqAzz
959 aaaabcxyzpqrrrabbxyyyypqAzz
960 0: aaaabcxyzpqrrrabbxyyyypqAzz
961 abxyzzpqrrrabbxyyyypqAzz
962 0: abxyzzpqrrrabbxyyyypqAzz
963 aabxyzzzpqrrrabbxyyyypqAzz
964 0: aabxyzzzpqrrrabbxyyyypqAzz
965 aaabxyzzzzpqrrrabbxyyyypqAzz
966 0: aaabxyzzzzpqrrrabbxyyyypqAzz
967 aaaabxyzzzzpqrrrabbxyyyypqAzz
968 0: aaaabxyzzzzpqrrrabbxyyyypqAzz
969 abcxyzzpqrrrabbxyyyypqAzz
970 0: abcxyzzpqrrrabbxyyyypqAzz
971 aabcxyzzzpqrrrabbxyyyypqAzz
972 0: aabcxyzzzpqrrrabbxyyyypqAzz
973 aaabcxyzzzzpqrrrabbxyyyypqAzz
974 0: aaabcxyzzzzpqrrrabbxyyyypqAzz
975 aaaabcxyzzzzpqrrrabbxyyyypqAzz
976 0: aaaabcxyzzzzpqrrrabbxyyyypqAzz
977 aaaabcxyzzzzpqrrrabbbxyyyypqAzz
978 0: aaaabcxyzzzzpqrrrabbbxyyyypqAzz
979 aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
980 0: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
981 aaabcxyzpqrrrabbxyyyypABzz
982 0: aaabcxyzpqrrrabbxyyyypABzz
983 aaabcxyzpqrrrabbxyyyypABBzz
984 0: aaabcxyzpqrrrabbxyyyypABBzz
985 >>>aaabxyzpqrrrabbxyyyypqAzz
986 0: aaabxyzpqrrrabbxyyyypqAzz
987 >aaaabxyzpqrrrabbxyyyypqAzz
988 0: aaaabxyzpqrrrabbxyyyypqAzz
989 >>>>abcxyzpqrrrabbxyyyypqAzz
990 0: abcxyzpqrrrabbxyyyypqAzz
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100991\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -0700992 abxyzpqrrabbxyyyypqAzz
993No match
994 abxyzpqrrrrabbxyyyypqAzz
995No match
996 abxyzpqrrrabxyyyypqAzz
997No match
998 aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
999No match
1000 aaaabcxyzzzzpqrrrabbbxyyypqAzz
1001No match
1002 aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
1003No match
1004
1005/^(abc){1,2}zz/
1006 abczz
1007 0: abczz
1008 abcabczz
1009 0: abcabczz
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001010\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001011 zz
1012No match
1013 abcabcabczz
1014No match
1015 >>abczz
1016No match
1017
1018/^(b+?|a){1,2}?c/
1019 bc
1020 0: bc
1021 bbc
1022 0: bbc
1023 bbbc
1024 0: bbbc
1025 bac
1026 0: bac
1027 bbac
1028 0: bbac
1029 aac
1030 0: aac
1031 abbbbbbbbbbbc
1032 0: abbbbbbbbbbbc
1033 bbbbbbbbbbbac
1034 0: bbbbbbbbbbbac
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001035\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001036 aaac
1037No match
1038 abbbbbbbbbbbac
1039No match
1040
1041/^(b+|a){1,2}c/
1042 bc
1043 0: bc
1044 bbc
1045 0: bbc
1046 bbbc
1047 0: bbbc
1048 bac
1049 0: bac
1050 bbac
1051 0: bbac
1052 aac
1053 0: aac
1054 abbbbbbbbbbbc
1055 0: abbbbbbbbbbbc
1056 bbbbbbbbbbbac
1057 0: bbbbbbbbbbbac
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001058\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001059 aaac
1060No match
1061 abbbbbbbbbbbac
1062No match
1063
1064/^(b+|a){1,2}?bc/
1065 bbc
1066 0: bbc
1067
1068/^(b*|ba){1,2}?bc/
1069 babc
1070 0: babc
1071 bbabc
1072 0: bbabc
1073 bababc
1074 0: bababc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001075\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001076 bababbc
1077No match
1078 babababc
1079No match
1080
1081/^(ba|b*){1,2}?bc/
1082 babc
1083 0: babc
1084 bbabc
1085 0: bbabc
1086 bababc
1087 0: bababc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001088\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001089 bababbc
1090No match
1091 babababc
1092No match
1093
1094/^\ca\cA\c[\c{\c:/
1095 \x01\x01\e;z
1096 0: \x01\x01\x1b;z
1097
1098/^[ab\]cde]/
1099 athing
1100 0: a
1101 bthing
1102 0: b
1103 ]thing
1104 0: ]
1105 cthing
1106 0: c
1107 dthing
1108 0: d
1109 ething
1110 0: e
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001111\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001112 fthing
1113No match
1114 [thing
1115No match
1116 \\thing
1117No match
1118
1119/^[]cde]/
1120 ]thing
1121 0: ]
1122 cthing
1123 0: c
1124 dthing
1125 0: d
1126 ething
1127 0: e
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001128\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001129 athing
1130No match
1131 fthing
1132No match
1133
1134/^[^ab\]cde]/
1135 fthing
1136 0: f
1137 [thing
1138 0: [
1139 \\thing
1140 0: \
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001141\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001142 athing
1143No match
1144 bthing
1145No match
1146 ]thing
1147No match
1148 cthing
1149No match
1150 dthing
1151No match
1152 ething
1153No match
1154
1155/^[^]cde]/
1156 athing
1157 0: a
1158 fthing
1159 0: f
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001160\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001161 ]thing
1162No match
1163 cthing
1164No match
1165 dthing
1166No match
1167 ething
1168No match
1169
1170/^\/
1171 
1172 0: \x81
1173
1174/^ÿ/
1175 ÿ
1176 0: \xff
1177
1178/^[0-9]+$/
1179 0
1180 0: 0
1181 1
1182 0: 1
1183 2
1184 0: 2
1185 3
1186 0: 3
1187 4
1188 0: 4
1189 5
1190 0: 5
1191 6
1192 0: 6
1193 7
1194 0: 7
1195 8
1196 0: 8
1197 9
1198 0: 9
1199 10
1200 0: 10
1201 100
1202 0: 100
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001203\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001204 abc
1205No match
1206
1207/^.*nter/
1208 enter
1209 0: enter
1210 inter
1211 0: inter
1212 uponter
1213 0: uponter
1214
1215/^xxx[0-9]+$/
1216 xxx0
1217 0: xxx0
1218 xxx1234
1219 0: xxx1234
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001220\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001221 xxx
1222No match
1223
1224/^.+[0-9][0-9][0-9]$/
1225 x123
1226 0: x123
1227 xx123
1228 0: xx123
1229 123456
1230 0: 123456
Nick Kralevichf73ff172014-09-27 12:41:49 -07001231 x1234
1232 0: x1234
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001233\= Expect no match
1234 123
1235No match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001236
1237/^.+?[0-9][0-9][0-9]$/
1238 x123
1239 0: x123
1240 xx123
1241 0: xx123
1242 123456
1243 0: 123456
Nick Kralevichf73ff172014-09-27 12:41:49 -07001244 x1234
1245 0: x1234
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001246\= Expect no match
1247 123
1248No match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001249
1250/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
1251 abc!pqr=apquxz.ixr.zzz.ac.uk
1252 0: abc!pqr=apquxz.ixr.zzz.ac.uk
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001253\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001254 !pqr=apquxz.ixr.zzz.ac.uk
1255No match
1256 abc!=apquxz.ixr.zzz.ac.uk
1257No match
1258 abc!pqr=apquxz:ixr.zzz.ac.uk
1259No match
1260 abc!pqr=apquxz.ixr.zzz.ac.ukk
1261No match
1262
1263/:/
1264 Well, we need a colon: somewhere
1265 0: :
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001266\= Expect no match
1267 No match without a colon
Nick Kralevichf73ff172014-09-27 12:41:49 -07001268No match
1269
1270/([\da-f:]+)$/i
1271 0abc
1272 0: 0abc
1273 abc
1274 0: abc
1275 fed
1276 0: fed
1277 E
1278 0: E
1279 ::
1280 0: ::
1281 5f03:12C0::932e
1282 0: 5f03:12C0::932e
1283 fed def
1284 0: def
1285 Any old stuff
1286 0: ff
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001287\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001288 0zzz
1289No match
1290 gzzz
1291No match
1292 fed\x20
1293No match
1294 Any old rubbish
1295No match
1296
1297/^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
1298 .1.2.3
1299 0: .1.2.3
1300 A.12.123.0
1301 0: A.12.123.0
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001302\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001303 .1.2.3333
1304No match
1305 1.2.3
1306No match
1307 1234.2.3
1308No match
1309
1310/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
1311 1 IN SOA non-sp1 non-sp2(
1312 0: 1 IN SOA non-sp1 non-sp2(
1313 1 IN SOA non-sp1 non-sp2 (
1314 0: 1 IN SOA non-sp1 non-sp2 (
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001315\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001316 1IN SOA non-sp1 non-sp2(
1317No match
1318
1319/^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
1320 a.
1321 0: a.
1322 Z.
1323 0: Z.
1324 2.
1325 0: 2.
1326 ab-c.pq-r.
1327 0: ab-c.pq-r.
1328 sxk.zzz.ac.uk.
1329 0: sxk.zzz.ac.uk.
1330 x-.y-.
1331 0: x-.y-.
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001332\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001333 -abc.peq.
1334No match
1335
1336/^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
1337 *.a
1338 0: *.a
1339 *.b0-a
1340 0: *.b0-a
1341 *.c3-b.c
1342 0: *.c3-b.c
1343 *.c-a.b-c
1344 0: *.c-a.b-c
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001345\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001346 *.0
1347No match
1348 *.a-
1349No match
1350 *.a-b.c-
1351No match
1352 *.c-a.0-c
1353No match
1354
1355/^(?=ab(de))(abd)(e)/
1356 abde
1357 0: abde
1358
1359/^(?!(ab)de|x)(abd)(f)/
1360 abdf
1361 0: abdf
1362
1363/^(?=(ab(cd)))(ab)/
1364 abcd
1365 0: ab
1366
1367/^[\da-f](\.[\da-f])*$/i
1368 a.b.c.d
1369 0: a.b.c.d
1370 A.B.C.D
1371 0: A.B.C.D
1372 a.b.c.1.2.3.C
1373 0: a.b.c.1.2.3.C
1374
1375/^\".*\"\s*(;.*)?$/
1376 \"1234\"
1377 0: "1234"
1378 \"abcd\" ;
1379 0: "abcd" ;
1380 \"\" ; rhubarb
1381 0: "" ; rhubarb
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001382\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001383 \"1234\" : things
1384No match
1385
1386/^$/
1387 \
1388 0:
Nick Kralevichf73ff172014-09-27 12:41:49 -07001389
1390/ ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/x
1391 ab c
1392 0: ab c
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001393\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001394 abc
1395No match
1396 ab cde
1397No match
1398
1399/(?x) ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/
1400 ab c
1401 0: ab c
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001402\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001403 abc
1404No match
1405 ab cde
1406No match
1407
1408/^ a\ b[c ]d $/x
1409 a bcd
1410 0: a bcd
1411 a b d
1412 0: a b d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001413\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001414 abcd
1415No match
1416 ab d
1417No match
1418
1419/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
1420 abcdefhijklm
1421 0: abcdefhijklm
1422
1423/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
1424 abcdefhijklm
1425 0: abcdefhijklm
1426
1427/^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
1428 a+ Z0+\x08\n\x1d\x12
1429 0: a+ Z0+\x08\x0a\x1d\x12
1430
1431/^[.^$|()*+?{,}]+/
1432 .^\$(*+)|{?,?}
1433 0: .^$(*+)|{?,?}
1434
1435/^a*\w/
1436 z
1437 0: z
1438 az
1439 0: az
1440 1: a
1441 aaaz
1442 0: aaaz
1443 1: aaa
1444 2: aa
1445 3: a
1446 a
1447 0: a
1448 aa
1449 0: aa
1450 1: a
1451 aaaa
1452 0: aaaa
1453 1: aaa
1454 2: aa
1455 3: a
1456 a+
1457 0: a
1458 aa+
1459 0: aa
1460 1: a
1461
1462/^a*?\w/
1463 z
1464 0: z
1465 az
1466 0: az
1467 1: a
1468 aaaz
1469 0: aaaz
1470 1: aaa
1471 2: aa
1472 3: a
1473 a
1474 0: a
1475 aa
1476 0: aa
1477 1: a
1478 aaaa
1479 0: aaaa
1480 1: aaa
1481 2: aa
1482 3: a
1483 a+
1484 0: a
1485 aa+
1486 0: aa
1487 1: a
1488
1489/^a+\w/
1490 az
1491 0: az
1492 aaaz
1493 0: aaaz
1494 1: aaa
1495 2: aa
1496 aa
1497 0: aa
1498 aaaa
1499 0: aaaa
1500 1: aaa
1501 2: aa
1502 aa+
1503 0: aa
1504
1505/^a+?\w/
1506 az
1507 0: az
1508 aaaz
1509 0: aaaz
1510 1: aaa
1511 2: aa
1512 aa
1513 0: aa
1514 aaaa
1515 0: aaaa
1516 1: aaa
1517 2: aa
1518 aa+
1519 0: aa
1520
1521/^\d{8}\w{2,}/
1522 1234567890
1523 0: 1234567890
1524 12345678ab
1525 0: 12345678ab
1526 12345678__
1527 0: 12345678__
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001528\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001529 1234567
1530No match
1531
1532/^[aeiou\d]{4,5}$/
1533 uoie
1534 0: uoie
1535 1234
1536 0: 1234
1537 12345
1538 0: 12345
1539 aaaaa
1540 0: aaaaa
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001541\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001542 123456
1543No match
1544
1545/^[aeiou\d]{4,5}?/
1546 uoie
1547 0: uoie
1548 1234
1549 0: 1234
1550 12345
1551 0: 12345
1552 1: 1234
1553 aaaaa
1554 0: aaaaa
1555 1: aaaa
1556 123456
1557 0: 12345
1558 1: 1234
1559
1560/^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]/
1561 From abcd Mon Sep 01 12:33:02 1997
1562 0: From abcd Mon Sep 01 12:33
1563
1564/^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
1565 From abcd Mon Sep 01 12:33:02 1997
1566 0: From abcd Mon Sep 01 12:33
1567 From abcd Mon Sep 1 12:33:02 1997
1568 0: From abcd Mon Sep 1 12:33
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001569\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001570 From abcd Sep 01 12:33:02 1997
1571No match
1572
1573/^12.34/s
1574 12\n34
1575 0: 12\x0a34
1576 12\r34
1577 0: 12\x0d34
1578
1579/\w+(?=\t)/
1580 the quick brown\t fox
1581 0: brown
1582
1583/foo(?!bar)(.*)/
1584 foobar is foolish see?
1585 0: foolish see?
1586
1587/(?:(?!foo)...|^.{0,2})bar(.*)/
1588 foobar crowbar etc
1589 0: rowbar etc
1590 barrel
1591 0: barrel
1592 2barrel
1593 0: 2barrel
1594 A barrel
1595 0: A barrel
1596
1597/^(\D*)(?=\d)(?!123)/
1598 abc456
1599 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001600\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001601 abc123
1602No match
1603
1604/^1234(?# test newlines
1605 inside)/
1606 1234
1607 0: 1234
1608
1609/^1234 #comment in extended re
1610 /x
1611 1234
1612 0: 1234
1613
1614/#rhubarb
1615 abcd/x
1616 abcd
1617 0: abcd
1618
1619/^abcd#rhubarb/x
1620 abcd
1621 0: abcd
1622
1623/(?!^)abc/
1624 the abc
1625 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001626\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001627 abc
1628No match
1629
1630/(?=^)abc/
1631 abc
1632 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001633\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001634 the abc
1635No match
1636
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001637/^[ab]{1,3}(ab*|b)/no_auto_possess
Nick Kralevichf73ff172014-09-27 12:41:49 -07001638 aabbbbb
1639 0: aabbbbb
1640 1: aabbbb
1641 2: aabbb
1642 3: aabb
1643 4: aab
1644 5: aa
1645
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001646/^[ab]{1,3}?(ab*|b)/no_auto_possess
Nick Kralevichf73ff172014-09-27 12:41:49 -07001647 aabbbbb
1648 0: aabbbbb
1649 1: aabbbb
1650 2: aabbb
1651 3: aabb
1652 4: aab
1653 5: aa
1654
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001655/^[ab]{1,3}?(ab*?|b)/no_auto_possess
Nick Kralevichf73ff172014-09-27 12:41:49 -07001656 aabbbbb
1657 0: aabbbbb
1658 1: aabbbb
1659 2: aabbb
1660 3: aabb
1661 4: aab
1662 5: aa
1663
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001664/^[ab]{1,3}(ab*?|b)/no_auto_possess
Nick Kralevichf73ff172014-09-27 12:41:49 -07001665 aabbbbb
1666 0: aabbbbb
1667 1: aabbbb
1668 2: aabbb
1669 3: aabb
1670 4: aab
1671 5: aa
1672
1673/ (?: [\040\t] | \(
1674(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1675\) )* # optional leading comment
1676(?: (?:
1677[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1678(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1679|
1680" (?: # opening quote...
1681[^\\\x80-\xff\n\015"] # Anything except backslash and quote
1682| # or
1683\\ [^\x80-\xff] # Escaped something (something != CR)
1684)* " # closing quote
1685) # initial word
1686(?: (?: [\040\t] | \(
1687(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1688\) )* \. (?: [\040\t] | \(
1689(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1690\) )* (?:
1691[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1692(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1693|
1694" (?: # opening quote...
1695[^\\\x80-\xff\n\015"] # Anything except backslash and quote
1696| # or
1697\\ [^\x80-\xff] # Escaped something (something != CR)
1698)* " # closing quote
1699) )* # further okay, if led by a period
1700(?: [\040\t] | \(
1701(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1702\) )* @ (?: [\040\t] | \(
1703(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1704\) )* (?:
1705[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1706(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1707| \[ # [
1708(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1709\] # ]
1710) # initial subdomain
1711(?: #
1712(?: [\040\t] | \(
1713(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1714\) )* \. # if led by a period...
1715(?: [\040\t] | \(
1716(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1717\) )* (?:
1718[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1719(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1720| \[ # [
1721(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1722\] # ]
1723) # ...further okay
1724)*
1725# address
1726| # or
1727(?:
1728[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1729(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1730|
1731" (?: # opening quote...
1732[^\\\x80-\xff\n\015"] # Anything except backslash and quote
1733| # or
1734\\ [^\x80-\xff] # Escaped something (something != CR)
1735)* " # closing quote
1736) # one word, optionally followed by....
1737(?:
1738[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] | # atom and space parts, or...
1739\(
1740(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1741\) | # comments, or...
1742
1743" (?: # opening quote...
1744[^\\\x80-\xff\n\015"] # Anything except backslash and quote
1745| # or
1746\\ [^\x80-\xff] # Escaped something (something != CR)
1747)* " # closing quote
1748# quoted strings
1749)*
1750< (?: [\040\t] | \(
1751(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1752\) )* # leading <
1753(?: @ (?: [\040\t] | \(
1754(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1755\) )* (?:
1756[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1757(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1758| \[ # [
1759(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1760\] # ]
1761) # initial subdomain
1762(?: #
1763(?: [\040\t] | \(
1764(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1765\) )* \. # if led by a period...
1766(?: [\040\t] | \(
1767(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1768\) )* (?:
1769[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1770(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1771| \[ # [
1772(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1773\] # ]
1774) # ...further okay
1775)*
1776
1777(?: (?: [\040\t] | \(
1778(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1779\) )* , (?: [\040\t] | \(
1780(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1781\) )* @ (?: [\040\t] | \(
1782(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1783\) )* (?:
1784[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1785(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1786| \[ # [
1787(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1788\] # ]
1789) # initial subdomain
1790(?: #
1791(?: [\040\t] | \(
1792(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1793\) )* \. # if led by a period...
1794(?: [\040\t] | \(
1795(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1796\) )* (?:
1797[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1798(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1799| \[ # [
1800(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1801\] # ]
1802) # ...further okay
1803)*
1804)* # further okay, if led by comma
1805: # closing colon
1806(?: [\040\t] | \(
1807(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1808\) )* )? # optional route
1809(?:
1810[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1811(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1812|
1813" (?: # opening quote...
1814[^\\\x80-\xff\n\015"] # Anything except backslash and quote
1815| # or
1816\\ [^\x80-\xff] # Escaped something (something != CR)
1817)* " # closing quote
1818) # initial word
1819(?: (?: [\040\t] | \(
1820(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1821\) )* \. (?: [\040\t] | \(
1822(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1823\) )* (?:
1824[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1825(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1826|
1827" (?: # opening quote...
1828[^\\\x80-\xff\n\015"] # Anything except backslash and quote
1829| # or
1830\\ [^\x80-\xff] # Escaped something (something != CR)
1831)* " # closing quote
1832) )* # further okay, if led by a period
1833(?: [\040\t] | \(
1834(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1835\) )* @ (?: [\040\t] | \(
1836(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1837\) )* (?:
1838[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1839(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1840| \[ # [
1841(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1842\] # ]
1843) # initial subdomain
1844(?: #
1845(?: [\040\t] | \(
1846(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1847\) )* \. # if led by a period...
1848(?: [\040\t] | \(
1849(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1850\) )* (?:
1851[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1852(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1853| \[ # [
1854(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1855\] # ]
1856) # ...further okay
1857)*
1858# address spec
1859(?: [\040\t] | \(
1860(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1861\) )* > # trailing >
1862# name and address
1863) (?: [\040\t] | \(
1864(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1865\) )* # optional trailing comment
1866/x
1867 Alan Other <user\@dom.ain>
1868 0: Alan Other <user@dom.ain>
1869 <user\@dom.ain>
1870 0: user@dom.ain
1871 1: user@dom
1872 user\@dom.ain
1873 0: user@dom.ain
1874 1: user@dom
1875 \"A. Other\" <user.1234\@dom.ain> (a comment)
1876 0: "A. Other" <user.1234@dom.ain> (a comment)
1877 1: "A. Other" <user.1234@dom.ain>
1878 2: "A. Other" <user.1234@dom.ain>
1879 A. Other <user.1234\@dom.ain> (a comment)
1880 0: Other <user.1234@dom.ain> (a comment)
1881 1: Other <user.1234@dom.ain>
1882 2: Other <user.1234@dom.ain>
1883 \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
1884 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
1885 1: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re
1886 A missing angle <user\@some.where
1887 0: user@some.where
1888 1: user@some
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001889\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07001890 The quick brown fox
1891No match
1892
1893/[\040\t]* # Nab whitespace.
1894(?:
1895\( # (
1896[^\\\x80-\xff\n\015()] * # normal*
1897(?: # (
1898(?: \\ [^\x80-\xff] |
1899\( # (
1900[^\\\x80-\xff\n\015()] * # normal*
1901(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1902\) # )
1903) # special
1904[^\\\x80-\xff\n\015()] * # normal*
1905)* # )*
1906\) # )
1907[\040\t]* )* # If comment found, allow more spaces.
1908# optional leading comment
1909(?:
1910(?:
1911[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1912(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1913# Atom
1914| # or
1915" # "
1916[^\\\x80-\xff\n\015"] * # normal
1917(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1918" # "
1919# Quoted string
1920)
1921[\040\t]* # Nab whitespace.
1922(?:
1923\( # (
1924[^\\\x80-\xff\n\015()] * # normal*
1925(?: # (
1926(?: \\ [^\x80-\xff] |
1927\( # (
1928[^\\\x80-\xff\n\015()] * # normal*
1929(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1930\) # )
1931) # special
1932[^\\\x80-\xff\n\015()] * # normal*
1933)* # )*
1934\) # )
1935[\040\t]* )* # If comment found, allow more spaces.
1936(?:
1937\.
1938[\040\t]* # Nab whitespace.
1939(?:
1940\( # (
1941[^\\\x80-\xff\n\015()] * # normal*
1942(?: # (
1943(?: \\ [^\x80-\xff] |
1944\( # (
1945[^\\\x80-\xff\n\015()] * # normal*
1946(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1947\) # )
1948) # special
1949[^\\\x80-\xff\n\015()] * # normal*
1950)* # )*
1951\) # )
1952[\040\t]* )* # If comment found, allow more spaces.
1953(?:
1954[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1955(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1956# Atom
1957| # or
1958" # "
1959[^\\\x80-\xff\n\015"] * # normal
1960(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1961" # "
1962# Quoted string
1963)
1964[\040\t]* # Nab whitespace.
1965(?:
1966\( # (
1967[^\\\x80-\xff\n\015()] * # normal*
1968(?: # (
1969(?: \\ [^\x80-\xff] |
1970\( # (
1971[^\\\x80-\xff\n\015()] * # normal*
1972(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1973\) # )
1974) # special
1975[^\\\x80-\xff\n\015()] * # normal*
1976)* # )*
1977\) # )
1978[\040\t]* )* # If comment found, allow more spaces.
1979# additional words
1980)*
1981@
1982[\040\t]* # Nab whitespace.
1983(?:
1984\( # (
1985[^\\\x80-\xff\n\015()] * # normal*
1986(?: # (
1987(?: \\ [^\x80-\xff] |
1988\( # (
1989[^\\\x80-\xff\n\015()] * # normal*
1990(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1991\) # )
1992) # special
1993[^\\\x80-\xff\n\015()] * # normal*
1994)* # )*
1995\) # )
1996[\040\t]* )* # If comment found, allow more spaces.
1997(?:
1998[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1999(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2000|
2001\[ # [
2002(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
2003\] # ]
2004)
2005[\040\t]* # Nab whitespace.
2006(?:
2007\( # (
2008[^\\\x80-\xff\n\015()] * # normal*
2009(?: # (
2010(?: \\ [^\x80-\xff] |
2011\( # (
2012[^\\\x80-\xff\n\015()] * # normal*
2013(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
2014\) # )
2015) # special
2016[^\\\x80-\xff\n\015()] * # normal*
2017)* # )*
2018\) # )
2019[\040\t]* )* # If comment found, allow more spaces.
2020# optional trailing comments
2021(?:
2022\.
2023[\040\t]* # Nab whitespace.
2024(?:
2025\( # (
2026[^\\\x80-\xff\n\015()] * # normal*
2027(?: # (
2028(?: \\ [^\x80-\xff] |
2029\( # (
2030[^\\\x80-\xff\n\015()] * # normal*
2031(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
2032\) # )
2033) # special
2034[^\\\x80-\xff\n\015()] * # normal*
2035)* # )*
2036\) # )
2037[\040\t]* )* # If comment found, allow more spaces.
2038(?:
2039[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
2040(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2041|
2042\[ # [
2043(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
2044\] # ]
2045)
2046[\040\t]* # Nab whitespace.
2047(?:
2048\( # (
2049[^\\\x80-\xff\n\015()] * # normal*
2050(?: # (
2051(?: \\ [^\x80-\xff] |
2052\( # (
2053[^\\\x80-\xff\n\015()] * # normal*
2054(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
2055\) # )
2056) # special
2057[^\\\x80-\xff\n\015()] * # normal*
2058)* # )*
2059\) # )
2060[\040\t]* )* # If comment found, allow more spaces.
2061# optional trailing comments
2062)*
2063# address
2064| # or
2065(?:
2066[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
2067(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2068# Atom
2069| # or
2070" # "
2071[^\\\x80-\xff\n\015"] * # normal
2072(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
2073" # "
2074# Quoted string
2075)
2076# leading word
2077[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # "normal" atoms and or spaces
2078(?:
2079(?:
2080\( # (
2081[^\\\x80-\xff\n\015()] * # normal*
2082(?: # (
2083(?: \\ [^\x80-\xff] |
2084\( # (
2085[^\\\x80-\xff\n\015()] * # normal*
2086(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
2087\) # )
2088) # special
2089[^\\\x80-\xff\n\015()] * # normal*
2090)* # )*
2091\) # )
2092|
2093" # "
2094[^\\\x80-\xff\n\015"] * # normal
2095(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
2096" # "
2097) # "special" comment or quoted string
2098[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # more "normal"
2099)*
2100<
2101[\040\t]* # Nab whitespace.
2102(?:
2103\( # (
2104[^\\\x80-\xff\n\015()] * # normal*
2105(?: # (
2106(?: \\ [^\x80-\xff] |
2107\( # (
2108[^\\\x80-\xff\n\015()] * # normal*
2109(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
2110\) # )
2111) # special
2112[^\\\x80-\xff\n\015()] * # normal*
2113)* # )*
2114\) # )
2115[\040\t]* )* # If comment found, allow more spaces.
2116# <
2117(?:
2118@
2119[\040\t]* # Nab whitespace.
2120(?:
2121\( # (
2122[^\\\x80-\xff\n\015()] * # normal*
2123(?: # (
2124(?: \\ [^\x80-\xff] |
2125\( # (
2126[^\\\x80-\xff\n\015()] * # normal*
2127(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
2128\) # )
2129) # special
2130[^\\\x80-\xff\n\015()] * # normal*
2131)* # )*
2132\) # )
2133[\040\t]* )* # If comment found, allow more spaces.
2134(?:
2135[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
2136(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2137|
2138\[ # [
2139(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
2140\] # ]
2141)
2142[\040\t]* # Nab whitespace.
2143(?:
2144\( # (
2145[^\\\x80-\xff\n\015()] * # normal*
2146(?: # (
2147(?: \\ [^\x80-\xff] |
2148\( # (
2149[^\\\x80-\xff\n\015()] * # normal*
2150(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
2151\) # )
2152) # special
2153[^\\\x80-\xff\n\015()] * # normal*
2154)* # )*
2155\) # )
2156[\040\t]* )* # If comment found, allow more spaces.
2157# optional trailing comments
2158(?:
2159\.
2160[\040\t]* # Nab whitespace.
2161(?:
2162\( # (
2163[^\\\x80-\xff\n\015()] * # normal*
2164(?: # (
2165(?: \\ [^\x80-\xff] |
2166\( # (
2167[^\\\x80-\xff\n\015()] * # normal*
2168(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
2169\) # )
2170) # special
2171[^\\\x80-\xff\n\015()] * # normal*
2172)* # )*
2173\) # )
2174[\040\t]* )* # If comment found, allow more spaces.
2175(?:
2176[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
2177(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2178|
2179\[ # [
2180(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
2181\] # ]
2182)
2183[\040\t]* # Nab whitespace.
2184(?:
2185\( # (
2186[^\\\x80-\xff\n\015()] * # normal*
2187(?: # (
2188(?: \\ [^\x80-\xff] |
2189\( # (
2190[^\\\x80-\xff\n\015()] * # normal*
2191(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
2192\) # )
2193) # special
2194[^\\\x80-\xff\n\015()] * # normal*
2195)* # )*
2196\) # )
2197[\040\t]* )* # If comment found, allow more spaces.
2198# optional trailing comments
2199)*
2200(?: ,
2201[\040\t]* # Nab whitespace.
2202(?:
2203\( # (
2204[^\\\x80-\xff\n\015()] * # normal*
2205(?: # (
2206(?: \\ [^\x80-\xff] |
2207\( # (
2208[^\\\x80-\xff\n\015()] * # normal*
2209(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
2210\) # )
2211) # special
2212[^\\\x80-\xff\n\015()] * # normal*
2213)* # )*
2214\) # )
2215[\040\t]* )* # If comment found, allow more spaces.
2216@
2217[\040\t]* # Nab whitespace.
2218(?:
2219\( # (
2220[^\\\x80-\xff\n\015()] * # normal*
2221(?: # (
2222(?: \\ [^\x80-\xff] |
2223\( # (
2224[^\\\x80-\xff\n\015()] * # normal*
2225(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
2226\) # )
2227) # special
2228[^\\\x80-\xff\n\015()] * # normal*
2229)* # )*
2230\) # )
2231[\040\t]* )* # If comment found, allow more spaces.
2232(?:
2233[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
2234(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2235|
2236\[ # [
2237(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
2238\] # ]
2239)
2240[\040\t]* # Nab whitespace.
2241(?:
2242\( # (
2243[^\\\x80-\xff\n\015()] * # normal*
2244(?: # (
2245(?: \\ [^\x80-\xff] |
2246\( # (
2247[^\\\x80-\xff\n\015()] * # normal*
2248(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
2249\) # )
2250) # special
2251[^\\\x80-\xff\n\015()] * # normal*
2252)* # )*
2253\) # )
2254[\040\t]* )* # If comment found, allow more spaces.
2255# optional trailing comments
2256(?:
2257\.
2258[\040\t]* # Nab whitespace.
2259(?:
2260\( # (
2261[^\\\x80-\xff\n\015()] * # normal*
2262(?: # (
2263(?: \\ [^\x80-\xff] |
2264\( # (
2265[^\\\x80-\xff\n\015()] * # normal*
2266(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
2267\) # )
2268) # special
2269[^\\\x80-\xff\n\015()] * # normal*
2270)* # )*
2271\) # )
2272[\040\t]* )* # If comment found, allow more spaces.
2273(?:
2274[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
2275(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2276|
2277\[ # [
2278(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
2279\] # ]
2280)
2281[\040\t]* # Nab whitespace.
2282(?:
2283\( # (
2284[^\\\x80-\xff\n\015()] * # normal*
2285(?: # (
2286(?: \\ [^\x80-\xff] |
2287\( # (
2288[^\\\x80-\xff\n\015()] * # normal*
2289(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
2290\) # )
2291) # special
2292[^\\\x80-\xff\n\015()] * # normal*
2293)* # )*
2294\) # )
2295[\040\t]* )* # If comment found, allow more spaces.
2296# optional trailing comments
2297)*
2298)* # additional domains
2299:
2300[\040\t]* # Nab whitespace.
2301(?:
2302\( # (
2303[^\\\x80-\xff\n\015()] * # normal*
2304(?: # (
2305(?: \\ [^\x80-\xff] |
2306\( # (
2307[^\\\x80-\xff\n\015()] * # normal*
2308(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
2309\) # )
2310) # special
2311[^\\\x80-\xff\n\015()] * # normal*
2312)* # )*
2313\) # )
2314[\040\t]* )* # If comment found, allow more spaces.
2315# optional trailing comments
2316)? # optional route
2317(?:
2318[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
2319(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2320# Atom
2321| # or
2322" # "
2323[^\\\x80-\xff\n\015"] * # normal
2324(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
2325" # "
2326# Quoted string
2327)
2328[\040\t]* # Nab whitespace.
2329(?:
2330\( # (
2331[^\\\x80-\xff\n\015()] * # normal*
2332(?: # (
2333(?: \\ [^\x80-\xff] |
2334\( # (
2335[^\\\x80-\xff\n\015()] * # normal*
2336(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
2337\) # )
2338) # special
2339[^\\\x80-\xff\n\015()] * # normal*
2340)* # )*
2341\) # )
2342[\040\t]* )* # If comment found, allow more spaces.
2343(?:
2344\.
2345[\040\t]* # Nab whitespace.
2346(?:
2347\( # (
2348[^\\\x80-\xff\n\015()] * # normal*
2349(?: # (
2350(?: \\ [^\x80-\xff] |
2351\( # (
2352[^\\\x80-\xff\n\015()] * # normal*
2353(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
2354\) # )
2355) # special
2356[^\\\x80-\xff\n\015()] * # normal*
2357)* # )*
2358\) # )
2359[\040\t]* )* # If comment found, allow more spaces.
2360(?:
2361[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
2362(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2363# Atom
2364| # or
2365" # "
2366[^\\\x80-\xff\n\015"] * # normal
2367(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
2368" # "
2369# Quoted string
2370)
2371[\040\t]* # Nab whitespace.
2372(?:
2373\( # (
2374[^\\\x80-\xff\n\015()] * # normal*
2375(?: # (
2376(?: \\ [^\x80-\xff] |
2377\( # (
2378[^\\\x80-\xff\n\015()] * # normal*
2379(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
2380\) # )
2381) # special
2382[^\\\x80-\xff\n\015()] * # normal*
2383)* # )*
2384\) # )
2385[\040\t]* )* # If comment found, allow more spaces.
2386# additional words
2387)*
2388@
2389[\040\t]* # Nab whitespace.
2390(?:
2391\( # (
2392[^\\\x80-\xff\n\015()] * # normal*
2393(?: # (
2394(?: \\ [^\x80-\xff] |
2395\( # (
2396[^\\\x80-\xff\n\015()] * # normal*
2397(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
2398\) # )
2399) # special
2400[^\\\x80-\xff\n\015()] * # normal*
2401)* # )*
2402\) # )
2403[\040\t]* )* # If comment found, allow more spaces.
2404(?:
2405[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
2406(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2407|
2408\[ # [
2409(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
2410\] # ]
2411)
2412[\040\t]* # Nab whitespace.
2413(?:
2414\( # (
2415[^\\\x80-\xff\n\015()] * # normal*
2416(?: # (
2417(?: \\ [^\x80-\xff] |
2418\( # (
2419[^\\\x80-\xff\n\015()] * # normal*
2420(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
2421\) # )
2422) # special
2423[^\\\x80-\xff\n\015()] * # normal*
2424)* # )*
2425\) # )
2426[\040\t]* )* # If comment found, allow more spaces.
2427# optional trailing comments
2428(?:
2429\.
2430[\040\t]* # Nab whitespace.
2431(?:
2432\( # (
2433[^\\\x80-\xff\n\015()] * # normal*
2434(?: # (
2435(?: \\ [^\x80-\xff] |
2436\( # (
2437[^\\\x80-\xff\n\015()] * # normal*
2438(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
2439\) # )
2440) # special
2441[^\\\x80-\xff\n\015()] * # normal*
2442)* # )*
2443\) # )
2444[\040\t]* )* # If comment found, allow more spaces.
2445(?:
2446[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
2447(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2448|
2449\[ # [
2450(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
2451\] # ]
2452)
2453[\040\t]* # Nab whitespace.
2454(?:
2455\( # (
2456[^\\\x80-\xff\n\015()] * # normal*
2457(?: # (
2458(?: \\ [^\x80-\xff] |
2459\( # (
2460[^\\\x80-\xff\n\015()] * # normal*
2461(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
2462\) # )
2463) # special
2464[^\\\x80-\xff\n\015()] * # normal*
2465)* # )*
2466\) # )
2467[\040\t]* )* # If comment found, allow more spaces.
2468# optional trailing comments
2469)*
2470# address spec
2471> # >
2472# name and address
2473)
2474/x
2475 Alan Other <user\@dom.ain>
2476 0: Alan Other <user@dom.ain>
2477 <user\@dom.ain>
2478 0: user@dom.ain
2479 1: user@dom
2480 user\@dom.ain
2481 0: user@dom.ain
2482 1: user@dom
2483 \"A. Other\" <user.1234\@dom.ain> (a comment)
2484 0: "A. Other" <user.1234@dom.ain>
2485 A. Other <user.1234\@dom.ain> (a comment)
2486 0: Other <user.1234@dom.ain>
2487 \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
2488 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
2489 1: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re
2490 A missing angle <user\@some.where
2491 0: user@some.where
2492 1: user@some
Janis Danisevskis53e448c2016-03-31 13:35:25 +01002493\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07002494 The quick brown fox
2495No match
2496
2497/abc\0def\00pqr\000xyz\0000AB/
2498 abc\0def\00pqr\000xyz\0000AB
2499 0: abc\x00def\x00pqr\x00xyz\x000AB
2500 abc456 abc\0def\00pqr\000xyz\0000ABCDE
2501 0: abc\x00def\x00pqr\x00xyz\x000AB
2502
2503/abc\x0def\x00pqr\x000xyz\x0000AB/
2504 abc\x0def\x00pqr\x000xyz\x0000AB
2505 0: abc\x0def\x00pqr\x000xyz\x0000AB
2506 abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
2507 0: abc\x0def\x00pqr\x000xyz\x0000AB
2508
2509/^[\000-\037]/
2510 \0A
2511 0: \x00
2512 \01B
2513 0: \x01
2514 \037C
2515 0: \x1f
2516
2517/\0*/
2518 \0\0\0\0
2519 0: \x00\x00\x00\x00
2520
2521/A\x0{2,3}Z/
2522 The A\x0\x0Z
2523 0: A\x00\x00Z
2524 An A\0\x0\0Z
2525 0: A\x00\x00\x00Z
Janis Danisevskis53e448c2016-03-31 13:35:25 +01002526\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07002527 A\0Z
2528No match
2529 A\0\x0\0\x0Z
2530No match
2531
2532/^\s/
2533 \040abc
2534 0:
2535 \x0cabc
2536 0: \x0c
2537 \nabc
2538 0: \x0a
2539 \rabc
2540 0: \x0d
2541 \tabc
2542 0: \x09
Janis Danisevskis53e448c2016-03-31 13:35:25 +01002543\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07002544 abc
2545No match
2546
2547/^a b
2548 c/x
2549 abc
2550 0: abc
2551
2552/ab{1,3}bc/
2553 abbbbc
2554 0: abbbbc
2555 abbbc
2556 0: abbbc
2557 abbc
2558 0: abbc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01002559\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07002560 abc
2561No match
2562 abbbbbc
2563No match
2564
2565/([^.]*)\.([^:]*):[T ]+(.*)/
2566 track1.title:TBlah blah blah
2567 0: track1.title:TBlah blah blah
2568
2569/([^.]*)\.([^:]*):[T ]+(.*)/i
2570 track1.title:TBlah blah blah
2571 0: track1.title:TBlah blah blah
2572
2573/([^.]*)\.([^:]*):[t ]+(.*)/i
2574 track1.title:TBlah blah blah
2575 0: track1.title:TBlah blah blah
2576
2577/^[W-c]+$/
2578 WXY_^abc
2579 0: WXY_^abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01002580\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07002581 wxy
2582No match
2583
2584/^[W-c]+$/i
2585 WXY_^abc
2586 0: WXY_^abc
2587 wxy_^ABC
2588 0: wxy_^ABC
2589
2590/^[\x3f-\x5F]+$/i
2591 WXY_^abc
2592 0: WXY_^abc
2593 wxy_^ABC
2594 0: wxy_^ABC
2595
2596/^abc$/m
2597 abc
2598 0: abc
2599 qqq\nabc
2600 0: abc
2601 abc\nzzz
2602 0: abc
2603 qqq\nabc\nzzz
2604 0: abc
2605
2606/^abc$/
2607 abc
2608 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01002609\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07002610 qqq\nabc
2611No match
2612 abc\nzzz
2613No match
2614 qqq\nabc\nzzz
2615No match
2616
2617/\Aabc\Z/m
2618 abc
2619 0: abc
2620 abc\n
2621 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01002622\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07002623 qqq\nabc
2624No match
2625 abc\nzzz
2626No match
2627 qqq\nabc\nzzz
2628No match
2629
2630/\A(.)*\Z/s
2631 abc\ndef
2632 0: abc\x0adef
2633
2634/\A(.)*\Z/m
Janis Danisevskis53e448c2016-03-31 13:35:25 +01002635\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07002636 abc\ndef
2637No match
2638
2639/(?:b)|(?::+)/
2640 b::c
2641 0: b
2642 c::b
2643 0: ::
2644
2645/[-az]+/
2646 az-
2647 0: az-
Janis Danisevskis53e448c2016-03-31 13:35:25 +01002648\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07002649 b
2650No match
2651
2652/[az-]+/
2653 za-
2654 0: za-
Janis Danisevskis53e448c2016-03-31 13:35:25 +01002655\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07002656 b
2657No match
2658
2659/[a\-z]+/
2660 a-z
2661 0: a-z
Janis Danisevskis53e448c2016-03-31 13:35:25 +01002662\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07002663 b
2664No match
2665
2666/[a-z]+/
2667 abcdxyz
2668 0: abcdxyz
2669
2670/[\d-]+/
2671 12-34
2672 0: 12-34
Janis Danisevskis53e448c2016-03-31 13:35:25 +01002673\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07002674 aaa
2675No match
2676
Nick Kralevichf73ff172014-09-27 12:41:49 -07002677/\x5c/
2678 \\
2679 0: \
2680
2681/\x20Z/
2682 the Zoo
2683 0: Z
Janis Danisevskis53e448c2016-03-31 13:35:25 +01002684\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07002685 Zulu
2686No match
2687
2688/ab{3cd/
2689 ab{3cd
2690 0: ab{3cd
2691
2692/ab{3,cd/
2693 ab{3,cd
2694 0: ab{3,cd
2695
2696/ab{3,4a}cd/
2697 ab{3,4a}cd
2698 0: ab{3,4a}cd
2699
2700/{4,5a}bc/
2701 {4,5a}bc
2702 0: {4,5a}bc
2703
Janis Danisevskis53e448c2016-03-31 13:35:25 +01002704/^a.b/newline=lf
Nick Kralevichf73ff172014-09-27 12:41:49 -07002705 a\rb
2706 0: a\x0db
Janis Danisevskis53e448c2016-03-31 13:35:25 +01002707\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07002708 a\nb
2709No match
2710
2711/abc$/
2712 abc
2713 0: abc
2714 abc\n
2715 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01002716\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07002717 abc\ndef
2718No match
2719
2720/(abc)\123/
2721 abc\x53
2722 0: abcS
2723
2724/(abc)\223/
2725 abc\x93
2726 0: abc\x93
2727
2728/(abc)\323/
2729 abc\xd3
2730 0: abc\xd3
2731
2732/(abc)\100/
2733 abc\x40
2734 0: abc@
2735 abc\100
2736 0: abc@
2737
2738/(abc)\1000/
2739 abc\x400
2740 0: abc@0
2741 abc\x40\x30
2742 0: abc@0
2743 abc\1000
2744 0: abc@0
2745 abc\100\x30
2746 0: abc@0
2747 abc\100\060
2748 0: abc@0
2749 abc\100\60
2750 0: abc@0
2751
Nick Kralevichf73ff172014-09-27 12:41:49 -07002752/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
2753 abcdefghijk\12S
2754 0: abcdefghijk\x0aS
2755
Nick Kralevichf73ff172014-09-27 12:41:49 -07002756/a{0}bc/
2757 bc
2758 0: bc
2759
2760/(a|(bc)){0,0}?xyz/
2761 xyz
2762 0: xyz
2763
2764/abc[\10]de/
2765 abc\010de
2766 0: abc\x08de
2767
2768/abc[\1]de/
2769 abc\1de
2770 0: abc\x01de
2771
2772/(abc)[\1]de/
2773 abc\1de
2774 0: abc\x01de
2775
2776/(?s)a.b/
2777 a\nb
2778 0: a\x0ab
2779
2780/^([^a])([^\b])([^c]*)([^d]{3,4})/
2781 baNOTccccd
2782 0: baNOTcccc
2783 1: baNOTccc
2784 2: baNOTcc
2785 3: baNOTc
2786 baNOTcccd
2787 0: baNOTccc
2788 1: baNOTcc
2789 2: baNOTc
2790 baNOTccd
2791 0: baNOTcc
2792 1: baNOTc
2793 bacccd
2794 0: baccc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01002795\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07002796 anything
2797No match
2798 b\bc
2799No match
2800 baccd
2801No match
2802
2803/[^a]/
2804 Abc
2805 0: A
2806
2807/[^a]/i
2808 Abc
2809 0: b
2810
2811/[^a]+/
2812 AAAaAbc
2813 0: AAA
2814
2815/[^a]+/i
2816 AAAaAbc
2817 0: bc
2818
2819/[^a]+/
2820 bbb\nccc
2821 0: bbb\x0accc
2822
2823/[^k]$/
2824 abc
2825 0: c
Janis Danisevskis53e448c2016-03-31 13:35:25 +01002826\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07002827 abk
2828No match
2829
2830/[^k]{2,3}$/
2831 abc
2832 0: abc
2833 kbc
2834 0: bc
2835 kabc
2836 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01002837\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07002838 abk
2839No match
2840 akb
2841No match
2842 akk
2843No match
2844
2845/^\d{8,}\@.+[^k]$/
2846 12345678\@a.b.c.d
2847 0: 12345678@a.b.c.d
2848 123456789\@x.y.z
2849 0: 123456789@x.y.z
Janis Danisevskis53e448c2016-03-31 13:35:25 +01002850\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07002851 12345678\@x.y.uk
2852No match
2853 1234567\@a.b.c.d
2854No match
2855
2856/[^a]/
2857 aaaabcd
2858 0: b
2859 aaAabcd
2860 0: A
2861
2862/[^a]/i
2863 aaaabcd
2864 0: b
2865 aaAabcd
2866 0: b
2867
2868/[^az]/
2869 aaaabcd
2870 0: b
2871 aaAabcd
2872 0: A
2873
2874/[^az]/i
2875 aaaabcd
2876 0: b
2877 aaAabcd
2878 0: b
2879
2880/\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/
2881 \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
2882 0: \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff
2883
2884/P[^*]TAIRE[^*]{1,6}?LL/
2885 xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
2886 0: PSTAIREISLL
2887
2888/P[^*]TAIRE[^*]{1,}?LL/
2889 xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
2890 0: PSTAIREISLL
2891
2892/(\.\d\d[1-9]?)\d+/
2893 1.230003938
2894 0: .230003938
2895 1.875000282
2896 0: .875000282
2897 1.235
2898 0: .235
2899
2900/(\.\d\d((?=0)|\d(?=\d)))/
2901 1.230003938
2902 0: .230
2903 1: .23
2904 1.875000282
2905 0: .875
Janis Danisevskis53e448c2016-03-31 13:35:25 +01002906\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07002907 1.235
2908No match
2909
2910/a(?)b/
2911 ab
2912 0: ab
2913
2914/\b(foo)\s+(\w+)/i
2915 Food is on the foo table
2916 0: foo table
2917
2918/foo(.*)bar/
2919 The food is under the bar in the barn.
2920 0: food is under the bar in the bar
2921 1: food is under the bar
2922
Janis Danisevskis53e448c2016-03-31 13:35:25 +01002923/foo(.*?)bar/
Nick Kralevichf73ff172014-09-27 12:41:49 -07002924 The food is under the bar in the barn.
2925 0: food is under the bar in the bar
2926 1: food is under the bar
2927
Janis Danisevskis53e448c2016-03-31 13:35:25 +01002928/(.*)(\d*)/no_auto_possess
Nick Kralevichf73ff172014-09-27 12:41:49 -07002929 I have 2 numbers: 53147
2930Matched, but offsets vector is too small to show all matches
2931 0: I have 2 numbers: 53147
2932 1: I have 2 numbers: 5314
2933 2: I have 2 numbers: 531
2934 3: I have 2 numbers: 53
2935 4: I have 2 numbers: 5
2936 5: I have 2 numbers:
2937 6: I have 2 numbers:
2938 7: I have 2 numbers
2939 8: I have 2 number
2940 9: I have 2 numbe
294110: I have 2 numb
294211: I have 2 num
294312: I have 2 nu
294413: I have 2 n
294514: I have 2
Nick Kralevichf73ff172014-09-27 12:41:49 -07002946
2947/(.*)(\d+)/
2948 I have 2 numbers: 53147
2949 0: I have 2 numbers: 53147
2950 1: I have 2
2951
Janis Danisevskis53e448c2016-03-31 13:35:25 +01002952/(.*?)(\d*)/no_auto_possess
Nick Kralevichf73ff172014-09-27 12:41:49 -07002953 I have 2 numbers: 53147
2954Matched, but offsets vector is too small to show all matches
2955 0: I have 2 numbers: 53147
2956 1: I have 2 numbers: 5314
2957 2: I have 2 numbers: 531
2958 3: I have 2 numbers: 53
2959 4: I have 2 numbers: 5
2960 5: I have 2 numbers:
2961 6: I have 2 numbers:
2962 7: I have 2 numbers
2963 8: I have 2 number
2964 9: I have 2 numbe
296510: I have 2 numb
296611: I have 2 num
296712: I have 2 nu
296813: I have 2 n
296914: I have 2
Nick Kralevichf73ff172014-09-27 12:41:49 -07002970
2971/(.*?)(\d+)/
2972 I have 2 numbers: 53147
2973 0: I have 2 numbers: 53147
2974 1: I have 2
2975
2976/(.*)(\d+)$/
2977 I have 2 numbers: 53147
2978 0: I have 2 numbers: 53147
2979
2980/(.*?)(\d+)$/
2981 I have 2 numbers: 53147
2982 0: I have 2 numbers: 53147
2983
2984/(.*)\b(\d+)$/
2985 I have 2 numbers: 53147
2986 0: I have 2 numbers: 53147
2987
2988/(.*\D)(\d+)$/
2989 I have 2 numbers: 53147
2990 0: I have 2 numbers: 53147
2991
2992/^\D*(?!123)/
2993 ABC123
2994 0: AB
2995 1: A
2996 2:
2997
2998/^(\D*)(?=\d)(?!123)/
2999 ABC445
3000 0: ABC
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003001\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003002 ABC123
3003No match
3004
3005/^[W-]46]/
3006 W46]789
3007 0: W46]
3008 -46]789
3009 0: -46]
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003010\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003011 Wall
3012No match
3013 Zebra
3014No match
3015 42
3016No match
3017 [abcd]
3018No match
3019 ]abcd[
3020No match
3021
3022/^[W-\]46]/
3023 W46]789
3024 0: W
3025 Wall
3026 0: W
3027 Zebra
3028 0: Z
3029 Xylophone
3030 0: X
3031 42
3032 0: 4
3033 [abcd]
3034 0: [
3035 ]abcd[
3036 0: ]
3037 \\backslash
3038 0: \
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003039\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003040 -46]789
3041No match
3042 well
3043No match
3044
3045/\d\d\/\d\d\/\d\d\d\d/
3046 01/01/2000
3047 0: 01/01/2000
3048
3049/word (?:[a-zA-Z0-9]+ ){0,10}otherword/
3050 word cat dog elephant mussel cow horse canary baboon snake shark otherword
3051 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003052\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003053 word cat dog elephant mussel cow horse canary baboon snake shark
3054No match
3055
3056/word (?:[a-zA-Z0-9]+ ){0,300}otherword/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003057\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003058 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
3059No match
3060
3061/^(a){0,0}/
3062 bcd
3063 0:
3064 abc
3065 0:
3066 aab
3067 0:
3068
3069/^(a){0,1}/
3070 bcd
3071 0:
3072 abc
3073 0: a
3074 1:
3075 aab
3076 0: a
3077 1:
3078
3079/^(a){0,2}/
3080 bcd
3081 0:
3082 abc
3083 0: a
3084 1:
3085 aab
3086 0: aa
3087 1: a
3088 2:
3089
3090/^(a){0,3}/
3091 bcd
3092 0:
3093 abc
3094 0: a
3095 1:
3096 aab
3097 0: aa
3098 1: a
3099 2:
3100 aaa
3101 0: aaa
3102 1: aa
3103 2: a
3104 3:
3105
3106/^(a){0,}/
3107 bcd
3108 0:
3109 abc
3110 0: a
3111 1:
3112 aab
3113 0: aa
3114 1: a
3115 2:
3116 aaa
3117 0: aaa
3118 1: aa
3119 2: a
3120 3:
3121 aaaaaaaa
3122 0: aaaaaaaa
3123 1: aaaaaaa
3124 2: aaaaaa
3125 3: aaaaa
3126 4: aaaa
3127 5: aaa
3128 6: aa
3129 7: a
3130 8:
3131
3132/^(a){1,1}/
Nick Kralevichf73ff172014-09-27 12:41:49 -07003133 abc
3134 0: a
3135 aab
3136 0: a
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003137\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003138 bcd
3139No match
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003140
3141/^(a){1,2}/
Nick Kralevichf73ff172014-09-27 12:41:49 -07003142 abc
3143 0: a
3144 aab
3145 0: aa
3146 1: a
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003147\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003148 bcd
3149No match
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003150
3151/^(a){1,3}/
Nick Kralevichf73ff172014-09-27 12:41:49 -07003152 abc
3153 0: a
3154 aab
3155 0: aa
3156 1: a
3157 aaa
3158 0: aaa
3159 1: aa
3160 2: a
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003161\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003162 bcd
3163No match
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003164
3165/^(a){1,}/
Nick Kralevichf73ff172014-09-27 12:41:49 -07003166 abc
3167 0: a
3168 aab
3169 0: aa
3170 1: a
3171 aaa
3172 0: aaa
3173 1: aa
3174 2: a
3175 aaaaaaaa
3176 0: aaaaaaaa
3177 1: aaaaaaa
3178 2: aaaaaa
3179 3: aaaaa
3180 4: aaaa
3181 5: aaa
3182 6: aa
3183 7: a
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003184\= Expect no match
3185 bcd
3186No match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003187
3188/.*\.gif/
3189 borfle\nbib.gif\nno
3190 0: bib.gif
3191
3192/.{0,}\.gif/
3193 borfle\nbib.gif\nno
3194 0: bib.gif
3195
3196/.*\.gif/m
3197 borfle\nbib.gif\nno
3198 0: bib.gif
3199
3200/.*\.gif/s
3201 borfle\nbib.gif\nno
3202 0: borfle\x0abib.gif
3203
3204/.*\.gif/ms
3205 borfle\nbib.gif\nno
3206 0: borfle\x0abib.gif
3207
3208/.*$/
3209 borfle\nbib.gif\nno
3210 0: no
3211
3212/.*$/m
3213 borfle\nbib.gif\nno
3214 0: borfle
3215
3216/.*$/s
3217 borfle\nbib.gif\nno
3218 0: borfle\x0abib.gif\x0ano
3219
3220/.*$/ms
3221 borfle\nbib.gif\nno
3222 0: borfle\x0abib.gif\x0ano
3223 1: borfle\x0abib.gif
3224 2: borfle
3225
3226/.*$/
3227 borfle\nbib.gif\nno\n
3228 0: no
3229
3230/.*$/m
3231 borfle\nbib.gif\nno\n
3232 0: borfle
3233
3234/.*$/s
3235 borfle\nbib.gif\nno\n
3236 0: borfle\x0abib.gif\x0ano\x0a
3237 1: borfle\x0abib.gif\x0ano
3238
3239/.*$/ms
3240 borfle\nbib.gif\nno\n
3241 0: borfle\x0abib.gif\x0ano\x0a
3242 1: borfle\x0abib.gif\x0ano
3243 2: borfle\x0abib.gif
3244 3: borfle
3245
3246/(.*X|^B)/
3247 abcde\n1234Xyz
3248 0: 1234X
3249 BarFoo
3250 0: B
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003251\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003252 abcde\nBar
3253No match
3254
3255/(.*X|^B)/m
3256 abcde\n1234Xyz
3257 0: 1234X
3258 BarFoo
3259 0: B
3260 abcde\nBar
3261 0: B
3262
3263/(.*X|^B)/s
3264 abcde\n1234Xyz
3265 0: abcde\x0a1234X
3266 BarFoo
3267 0: B
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003268\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003269 abcde\nBar
3270No match
3271
3272/(.*X|^B)/ms
3273 abcde\n1234Xyz
3274 0: abcde\x0a1234X
3275 BarFoo
3276 0: B
3277 abcde\nBar
3278 0: B
3279
3280/(?s)(.*X|^B)/
3281 abcde\n1234Xyz
3282 0: abcde\x0a1234X
3283 BarFoo
3284 0: B
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003285\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003286 abcde\nBar
3287No match
3288
3289/(?s:.*X|^B)/
3290 abcde\n1234Xyz
3291 0: abcde\x0a1234X
3292 BarFoo
3293 0: B
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003294\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003295 abcde\nBar
3296No match
3297
3298/^.*B/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003299\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003300 abc\nB
3301No match
3302
3303/(?s)^.*B/
3304 abc\nB
3305 0: abc\x0aB
3306
3307/(?m)^.*B/
3308 abc\nB
3309 0: B
3310
3311/(?ms)^.*B/
3312 abc\nB
3313 0: abc\x0aB
3314
3315/(?ms)^B/
3316 abc\nB
3317 0: B
3318
3319/(?s)B$/
3320 B\n
3321 0: B
3322
3323/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
3324 123456654321
3325 0: 123456654321
3326
3327/^\d\d\d\d\d\d\d\d\d\d\d\d/
3328 123456654321
3329 0: 123456654321
3330
3331/^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
3332 123456654321
3333 0: 123456654321
3334
3335/^[abc]{12}/
3336 abcabcabcabc
3337 0: abcabcabcabc
3338
3339/^[a-c]{12}/
3340 abcabcabcabc
3341 0: abcabcabcabc
3342
3343/^(a|b|c){12}/
3344 abcabcabcabc
3345 0: abcabcabcabc
3346
3347/^[abcdefghijklmnopqrstuvwxy0123456789]/
3348 n
3349 0: n
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003350\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003351 z
3352No match
3353
3354/abcde{0,0}/
3355 abcd
3356 0: abcd
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003357\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003358 abce
3359No match
3360
3361/ab[cd]{0,0}e/
3362 abe
3363 0: abe
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003364\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003365 abcde
3366No match
3367
3368/ab(c){0,0}d/
3369 abd
3370 0: abd
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003371\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003372 abcd
3373No match
3374
3375/a(b*)/
3376 a
3377 0: a
3378 ab
3379 0: ab
3380 abbbb
3381 0: abbbb
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003382\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003383 bbbbb
3384No match
3385
3386/ab\d{0}e/
3387 abe
3388 0: abe
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003389\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003390 ab1e
3391No match
3392
3393/"([^\\"]+|\\.)*"/
3394 the \"quick\" brown fox
3395 0: "quick"
3396 \"the \\\"quick\\\" brown fox\"
3397 0: "the \"quick\" brown fox"
3398
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003399/.*?/g,aftertext
Nick Kralevichf73ff172014-09-27 12:41:49 -07003400 abc
3401 0: abc
3402 0+
3403 1: ab
3404 2: a
3405 3:
3406 0:
3407 0+
3408
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003409/\b/g,aftertext
Nick Kralevichf73ff172014-09-27 12:41:49 -07003410 abc
3411 0:
3412 0+ abc
3413 0:
3414 0+
3415
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003416/\b/g,aftertext
Nick Kralevichf73ff172014-09-27 12:41:49 -07003417 abc
3418 0:
3419 0+ abc
3420 0:
3421 0+
3422
3423//g
3424 abc
3425 0:
3426 0:
3427 0:
3428 0:
3429
3430/<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
3431 <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>
3432 0: <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
3433
3434/a[^a]b/
3435 acb
3436 0: acb
3437 a\nb
3438 0: a\x0ab
3439
3440/a.b/
3441 acb
3442 0: acb
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003443\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003444 a\nb
3445No match
3446
3447/a[^a]b/s
3448 acb
3449 0: acb
3450 a\nb
3451 0: a\x0ab
3452
3453/a.b/s
3454 acb
3455 0: acb
3456 a\nb
3457 0: a\x0ab
3458
3459/^(b+?|a){1,2}?c/
3460 bac
3461 0: bac
3462 bbac
3463 0: bbac
3464 bbbac
3465 0: bbbac
3466 bbbbac
3467 0: bbbbac
3468 bbbbbac
3469 0: bbbbbac
3470
3471/^(b+|a){1,2}?c/
3472 bac
3473 0: bac
3474 bbac
3475 0: bbac
3476 bbbac
3477 0: bbbac
3478 bbbbac
3479 0: bbbbac
3480 bbbbbac
3481 0: bbbbbac
3482
3483/(?!\A)x/m
Nick Kralevichf73ff172014-09-27 12:41:49 -07003484 a\bx\n
3485 0: x
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003486\= Expect no match
3487 x\nb\n
3488No match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003489
3490/\x0{ab}/
3491 \0{ab}
3492 0: \x00{ab}
3493
3494/(A|B)*?CD/
3495 CD
3496 0: CD
3497
3498/(A|B)*CD/
3499 CD
3500 0: CD
3501
3502/(?<!bar)foo/
3503 foo
3504 0: foo
3505 catfood
3506 0: foo
3507 arfootle
3508 0: foo
3509 rfoosh
3510 0: foo
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003511\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003512 barfoo
3513No match
3514 towbarfoo
3515No match
3516
3517/\w{3}(?<!bar)foo/
3518 catfood
3519 0: catfoo
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003520\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003521 foo
3522No match
3523 barfoo
3524No match
3525 towbarfoo
3526No match
3527
3528/(?<=(foo)a)bar/
3529 fooabar
3530 0: bar
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003531\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003532 bar
3533No match
3534 foobbar
3535No match
3536
3537/\Aabc\z/m
3538 abc
3539 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003540\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003541 abc\n
3542No match
3543 qqq\nabc
3544No match
3545 abc\nzzz
3546No match
3547 qqq\nabc\nzzz
3548No match
3549
3550"(?>.*/)foo"
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003551\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003552 /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
3553No match
3554
3555"(?>.*/)foo"
3556 /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
3557 0: /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
3558
3559/(?>(\.\d\d[1-9]?))\d+/
3560 1.230003938
3561 0: .230003938
3562 1.875000282
3563 0: .875000282
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003564\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003565 1.235
3566No match
3567
3568/^((?>\w+)|(?>\s+))*$/
3569 now is the time for all good men to come to the aid of the party
3570 0: now is the time for all good men to come to the aid of the party
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003571\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003572 this is not a line with only words and spaces!
3573No match
3574
3575/(\d+)(\w)/
3576 12345a
3577 0: 12345a
3578 1: 12345
3579 2: 1234
3580 3: 123
3581 4: 12
3582 12345+
3583 0: 12345
3584 1: 1234
3585 2: 123
3586 3: 12
3587
3588/((?>\d+))(\w)/
3589 12345a
3590 0: 12345a
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003591\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003592 12345+
3593No match
3594
3595/(?>a+)b/
3596 aaab
3597 0: aaab
3598
3599/((?>a+)b)/
3600 aaab
3601 0: aaab
3602
3603/(?>(a+))b/
3604 aaab
3605 0: aaab
3606
3607/(?>b)+/
3608 aaabbbccc
3609 0: bbb
3610 1: bb
3611 2: b
3612
3613/(?>a+|b+|c+)*c/
3614 aaabbbbccccd
3615 0: aaabbbbcccc
3616 1: aaabbbbc
3617
3618/(a+|b+|c+)*c/
3619 aaabbbbccccd
3620 0: aaabbbbcccc
3621 1: aaabbbbccc
3622 2: aaabbbbcc
3623 3: aaabbbbc
3624
3625/((?>[^()]+)|\([^()]*\))+/
3626 ((abc(ade)ufh()()x
3627 0: abc(ade)ufh()()x
3628 1: abc(ade)ufh()()
3629 2: abc(ade)ufh()
3630 3: abc(ade)ufh
3631 4: abc(ade)
3632 5: abc
3633
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003634/\(((?>[^()]+)|\([^()]+\))+\)/
Nick Kralevichf73ff172014-09-27 12:41:49 -07003635 (abc)
3636 0: (abc)
3637 (abc(def)xyz)
3638 0: (abc(def)xyz)
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003639\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003640 ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
3641No match
3642
3643/a(?-i)b/i
3644 ab
3645 0: ab
3646 Ab
3647 0: Ab
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003648\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003649 aB
3650No match
3651 AB
3652No match
3653
3654/(a (?x)b c)d e/
3655 a bcd e
3656 0: a bcd e
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003657\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003658 a b cd e
3659No match
3660 abcd e
3661No match
3662 a bcde
3663No match
3664
3665/(a b(?x)c d (?-x)e f)/
3666 a bcde f
3667 0: a bcde f
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003668\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003669 abcdef
3670No match
3671
3672/(a(?i)b)c/
3673 abc
3674 0: abc
3675 aBc
3676 0: aBc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003677\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003678 abC
3679No match
3680 aBC
3681No match
3682 Abc
3683No match
3684 ABc
3685No match
3686 ABC
3687No match
3688 AbC
3689No match
3690
3691/a(?i:b)c/
3692 abc
3693 0: abc
3694 aBc
3695 0: aBc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003696\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003697 ABC
3698No match
3699 abC
3700No match
3701 aBC
3702No match
3703
3704/a(?i:b)*c/
3705 aBc
3706 0: aBc
3707 aBBc
3708 0: aBBc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003709\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003710 aBC
3711No match
3712 aBBC
3713No match
3714
3715/a(?=b(?i)c)\w\wd/
3716 abcd
3717 0: abcd
3718 abCd
3719 0: abCd
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003720\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003721 aBCd
3722No match
3723 abcD
3724No match
3725
3726/(?s-i:more.*than).*million/i
3727 more than million
3728 0: more than million
3729 more than MILLION
3730 0: more than MILLION
3731 more \n than Million
3732 0: more \x0a than Million
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003733\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003734 MORE THAN MILLION
3735No match
3736 more \n than \n million
3737No match
3738
3739/(?:(?s-i)more.*than).*million/i
3740 more than million
3741 0: more than million
3742 more than MILLION
3743 0: more than MILLION
3744 more \n than Million
3745 0: more \x0a than Million
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003746\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003747 MORE THAN MILLION
3748No match
3749 more \n than \n million
3750No match
3751
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003752/(?>a(?i)b+)+c/
Nick Kralevichf73ff172014-09-27 12:41:49 -07003753 abc
3754 0: abc
3755 aBbc
3756 0: aBbc
3757 aBBc
3758 0: aBBc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003759\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003760 Abc
3761No match
3762 abAb
3763No match
3764 abbC
3765No match
3766
3767/(?=a(?i)b)\w\wc/
3768 abc
3769 0: abc
3770 aBc
3771 0: aBc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003772\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003773 Ab
3774No match
3775 abC
3776No match
3777 aBC
3778No match
3779
3780/(?<=a(?i)b)(\w\w)c/
3781 abxxc
3782 0: xxc
3783 aBxxc
3784 0: xxc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003785\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003786 Abxxc
3787No match
3788 ABxxc
3789No match
3790 abxxC
3791No match
3792
3793/^(?(?=abc)\w{3}:|\d\d)$/
3794 abc:
3795 0: abc:
3796 12
3797 0: 12
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003798\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003799 123
3800No match
3801 xyz
3802No match
3803
3804/^(?(?!abc)\d\d|\w{3}:)$/
3805 abc:
3806 0: abc:
3807 12
3808 0: 12
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003809\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003810 123
3811No match
3812 xyz
3813No match
3814
3815/(?(?<=foo)bar|cat)/
3816 foobar
3817 0: bar
3818 cat
3819 0: cat
3820 fcat
3821 0: cat
3822 focat
3823 0: cat
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003824\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003825 foocat
3826No match
3827
3828/(?(?<!foo)cat|bar)/
3829 foobar
3830 0: bar
3831 cat
3832 0: cat
3833 fcat
3834 0: cat
3835 focat
3836 0: cat
Janis Danisevskis53e448c2016-03-31 13:35:25 +01003837\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07003838 foocat
3839No match
3840
3841/(?>a*)*/
3842 a
3843 0: a
3844 1:
3845 aa
3846 0: aa
3847 1:
3848 aaaa
3849 0: aaaa
3850 1:
3851
3852/(abc|)+/
3853 abc
3854 0: abc
3855 1:
3856 abcabc
3857 0: abcabc
3858 1: abc
3859 2:
3860 abcabcabc
3861 0: abcabcabc
3862 1: abcabc
3863 2: abc
3864 3:
3865 xyz
3866 0:
3867
3868/([a]*)*/
3869 a
3870 0: a
3871 1:
3872 aaaaa
3873 0: aaaaa
3874 1: aaaa
3875 2: aaa
3876 3: aa
3877 4: a
3878 5:
3879
3880/([ab]*)*/
3881 a
3882 0: a
3883 1:
3884 b
3885 0: b
3886 1:
3887 ababab
3888 0: ababab
3889 1: ababa
3890 2: abab
3891 3: aba
3892 4: ab
3893 5: a
3894 6:
3895 aaaabcde
3896 0: aaaab
3897 1: aaaa
3898 2: aaa
3899 3: aa
3900 4: a
3901 5:
3902 bbbb
3903 0: bbbb
3904 1: bbb
3905 2: bb
3906 3: b
3907 4:
3908
3909/([^a]*)*/
3910 b
3911 0: b
3912 1:
3913 bbbb
3914 0: bbbb
3915 1: bbb
3916 2: bb
3917 3: b
3918 4:
3919 aaa
3920 0:
3921
3922/([^ab]*)*/
3923 cccc
3924 0: cccc
3925 1: ccc
3926 2: cc
3927 3: c
3928 4:
3929 abab
3930 0:
3931
3932/([a]*?)*/
3933 a
3934 0: a
3935 1:
3936 aaaa
3937 0: aaaa
3938 1: aaa
3939 2: aa
3940 3: a
3941 4:
3942
3943/([ab]*?)*/
3944 a
3945 0: a
3946 1:
3947 b
3948 0: b
3949 1:
3950 abab
3951 0: abab
3952 1: aba
3953 2: ab
3954 3: a
3955 4:
3956 baba
3957 0: baba
3958 1: bab
3959 2: ba
3960 3: b
3961 4:
3962
3963/([^a]*?)*/
3964 b
3965 0: b
3966 1:
3967 bbbb
3968 0: bbbb
3969 1: bbb
3970 2: bb
3971 3: b
3972 4:
3973 aaa
3974 0:
3975
3976/([^ab]*?)*/
3977 c
3978 0: c
3979 1:
3980 cccc
3981 0: cccc
3982 1: ccc
3983 2: cc
3984 3: c
3985 4:
3986 baba
3987 0:
3988
3989/(?>a*)*/
3990 a
3991 0: a
3992 1:
3993 aaabcde
3994 0: aaa
3995 1:
3996
3997/((?>a*))*/
3998 aaaaa
3999 0: aaaaa
4000 1:
4001 aabbaa
4002 0: aa
4003 1:
4004
4005/((?>a*?))*/
4006 aaaaa
4007 0: aaaaa
4008 1:
4009 aabbaa
4010 0: aa
4011 1:
4012
4013/(?(?=[^a-z]+[a-z]) \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} ) /x
4014 12-sep-98
4015 0: 12-sep-98
4016 12-09-98
4017 0: 12-09-98
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004018\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004019 sep-12-98
4020No match
4021
4022/(?i:saturday|sunday)/
4023 saturday
4024 0: saturday
4025 sunday
4026 0: sunday
4027 Saturday
4028 0: Saturday
4029 Sunday
4030 0: Sunday
4031 SATURDAY
4032 0: SATURDAY
4033 SUNDAY
4034 0: SUNDAY
4035 SunDay
4036 0: SunDay
4037
4038/(a(?i)bc|BB)x/
4039 abcx
4040 0: abcx
4041 aBCx
4042 0: aBCx
4043 bbx
4044 0: bbx
4045 BBx
4046 0: BBx
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004047\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004048 abcX
4049No match
4050 aBCX
4051No match
4052 bbX
4053No match
4054 BBX
4055No match
4056
4057/^([ab](?i)[cd]|[ef])/
4058 ac
4059 0: ac
4060 aC
4061 0: aC
4062 bD
4063 0: bD
4064 elephant
4065 0: e
4066 Europe
4067 0: E
4068 frog
4069 0: f
4070 France
4071 0: F
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004072\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004073 Africa
4074No match
4075
4076/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
4077 ab
4078 0: ab
4079 aBd
4080 0: aBd
4081 xy
4082 0: xy
4083 xY
4084 0: xY
4085 zebra
4086 0: z
4087 Zambesi
4088 0: Z
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004089\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004090 aCD
4091No match
4092 XY
4093No match
4094
4095/(?<=foo\n)^bar/m
4096 foo\nbar
4097 0: bar
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004098\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004099 bar
4100No match
4101 baz\nbar
4102No match
4103
4104/(?<=(?<!foo)bar)baz/
4105 barbaz
4106 0: baz
4107 barbarbaz
4108 0: baz
4109 koobarbaz
4110 0: baz
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004111\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004112 baz
4113No match
4114 foobarbaz
4115No match
4116
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004117# The following tests are taken from the Perl 5.005 test suite; some of them
4118# are compatible with 5.004, but I'd rather not have to sort them out.
Nick Kralevichf73ff172014-09-27 12:41:49 -07004119
4120/abc/
4121 abc
4122 0: abc
4123 xabcy
4124 0: abc
4125 ababc
4126 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004127\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004128 xbc
4129No match
4130 axc
4131No match
4132 abx
4133No match
4134
4135/ab*c/
4136 abc
4137 0: abc
4138
4139/ab*bc/
4140 abc
4141 0: abc
4142 abbc
4143 0: abbc
4144 abbbbc
4145 0: abbbbc
4146
4147/.{1}/
4148 abbbbc
4149 0: a
4150
4151/.{3,4}/
4152 abbbbc
4153 0: abbb
4154
4155/ab{0,}bc/
4156 abbbbc
4157 0: abbbbc
4158
4159/ab+bc/
4160 abbc
4161 0: abbc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004162\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004163 abc
4164No match
4165 abq
4166No match
4167
4168/ab+bc/
4169 abbbbc
4170 0: abbbbc
4171
4172/ab{1,}bc/
4173 abbbbc
4174 0: abbbbc
4175
4176/ab{1,3}bc/
4177 abbbbc
4178 0: abbbbc
4179
4180/ab{3,4}bc/
4181 abbbbc
4182 0: abbbbc
4183
4184/ab{4,5}bc/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004185\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004186 abq
4187No match
4188 abbbbc
4189No match
4190
4191/ab?bc/
4192 abbc
4193 0: abbc
4194 abc
4195 0: abc
4196
4197/ab{0,1}bc/
4198 abc
4199 0: abc
4200
4201/ab?bc/
4202
4203/ab?c/
4204 abc
4205 0: abc
4206
4207/ab{0,1}c/
4208 abc
4209 0: abc
4210
4211/^abc$/
4212 abc
4213 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004214\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004215 abbbbc
4216No match
4217 abcc
4218No match
4219
4220/^abc/
4221 abcc
4222 0: abc
4223
4224/^abc$/
4225
4226/abc$/
4227 aabc
4228 0: abc
Nick Kralevichf73ff172014-09-27 12:41:49 -07004229 aabc
4230 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004231\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004232 aabcd
4233No match
4234
4235/^/
4236 abc
4237 0:
4238
4239/$/
4240 abc
4241 0:
4242
4243/a.c/
4244 abc
4245 0: abc
4246 axc
4247 0: axc
4248
4249/a.*c/
4250 axyzc
4251 0: axyzc
4252
4253/a[bc]d/
4254 abd
4255 0: abd
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004256\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004257 axyzd
4258No match
4259 abc
4260No match
4261
4262/a[b-d]e/
4263 ace
4264 0: ace
4265
4266/a[b-d]/
4267 aac
4268 0: ac
4269
4270/a[-b]/
4271 a-
4272 0: a-
4273
4274/a[b-]/
4275 a-
4276 0: a-
4277
4278/a]/
4279 a]
4280 0: a]
4281
4282/a[]]b/
4283 a]b
4284 0: a]b
4285
4286/a[^bc]d/
4287 aed
4288 0: aed
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004289\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004290 abd
4291No match
4292 abd
4293No match
4294
4295/a[^-b]c/
4296 adc
4297 0: adc
4298
4299/a[^]b]c/
4300 adc
4301 0: adc
Nick Kralevichf73ff172014-09-27 12:41:49 -07004302 a-c
4303 0: a-c
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004304\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004305 a]c
4306No match
4307
4308/\ba\b/
4309 a-
4310 0: a
4311 -a
4312 0: a
4313 -a-
4314 0: a
4315
4316/\by\b/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004317\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004318 xy
4319No match
4320 yz
4321No match
4322 xyz
4323No match
4324
4325/\Ba\B/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004326\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004327 a-
4328No match
4329 -a
4330No match
4331 -a-
4332No match
4333
4334/\By\b/
4335 xy
4336 0: y
4337
4338/\by\B/
4339 yz
4340 0: y
4341
4342/\By\B/
4343 xyz
4344 0: y
4345
4346/\w/
4347 a
4348 0: a
4349
4350/\W/
4351 -
4352 0: -
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004353\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004354 a
4355No match
4356
4357/a\sb/
4358 a b
4359 0: a b
4360
4361/a\Sb/
4362 a-b
4363 0: a-b
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004364\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004365 a b
4366No match
4367
4368/\d/
4369 1
4370 0: 1
4371
4372/\D/
4373 -
4374 0: -
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004375\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004376 1
4377No match
4378
4379/[\w]/
4380 a
4381 0: a
4382
4383/[\W]/
4384 -
4385 0: -
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004386\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004387 a
4388No match
4389
4390/a[\s]b/
4391 a b
4392 0: a b
4393
4394/a[\S]b/
4395 a-b
4396 0: a-b
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004397\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004398 a b
4399No match
4400
4401/[\d]/
4402 1
4403 0: 1
4404
4405/[\D]/
4406 -
4407 0: -
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004408\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004409 1
4410No match
4411
4412/ab|cd/
4413 abc
4414 0: ab
4415 abcd
4416 0: ab
4417
4418/()ef/
4419 def
4420 0: ef
4421
4422/$b/
4423
4424/a\(b/
4425 a(b
4426 0: a(b
4427
4428/a\(*b/
4429 ab
4430 0: ab
4431 a((b
4432 0: a((b
4433
4434/a\\b/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004435 a\\b
4436 0: a\b
4437\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004438 a\b
4439No match
4440
4441/((a))/
4442 abc
4443 0: a
4444
4445/(a)b(c)/
4446 abc
4447 0: abc
4448
4449/a+b+c/
4450 aabbabc
4451 0: abc
4452
4453/a{1,}b{1,}c/
4454 aabbabc
4455 0: abc
4456
4457/a.+?c/
4458 abcabc
4459 0: abcabc
4460 1: abc
4461
4462/(a+|b)*/
4463 ab
4464 0: ab
4465 1: a
4466 2:
4467
4468/(a+|b){0,}/
4469 ab
4470 0: ab
4471 1: a
4472 2:
4473
4474/(a+|b)+/
4475 ab
4476 0: ab
4477 1: a
4478
4479/(a+|b){1,}/
4480 ab
4481 0: ab
4482 1: a
4483
4484/(a+|b)?/
4485 ab
4486 0: a
4487 1:
4488
4489/(a+|b){0,1}/
4490 ab
4491 0: a
4492 1:
4493
4494/[^ab]*/
4495 cde
4496 0: cde
4497
4498/abc/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004499\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004500 b
4501No match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004502
4503/a*/
Nick Kralevichf73ff172014-09-27 12:41:49 -07004504
4505/([abc])*d/
4506 abbbcd
4507 0: abbbcd
4508
4509/([abc])*bcd/
4510 abcd
4511 0: abcd
4512
4513/a|b|c|d|e/
4514 e
4515 0: e
4516
4517/(a|b|c|d|e)f/
4518 ef
4519 0: ef
4520
4521/abcd*efg/
4522 abcdefg
4523 0: abcdefg
4524
4525/ab*/
4526 xabyabbbz
4527 0: ab
4528 xayabbbz
4529 0: a
4530
4531/(ab|cd)e/
4532 abcde
4533 0: cde
4534
4535/[abhgefdc]ij/
4536 hij
4537 0: hij
4538
4539/^(ab|cd)e/
4540
4541/(abc|)ef/
4542 abcdef
4543 0: ef
4544
4545/(a|b)c*d/
4546 abcd
4547 0: bcd
4548
4549/(ab|ab*)bc/
4550 abc
4551 0: abc
4552
4553/a([bc]*)c*/
4554 abc
4555 0: abc
4556 1: a
4557
4558/a([bc]*)(c*d)/
4559 abcd
4560 0: abcd
4561
4562/a([bc]+)(c*d)/
4563 abcd
4564 0: abcd
4565
4566/a([bc]*)(c+d)/
4567 abcd
4568 0: abcd
4569
4570/a[bcd]*dcdcde/
4571 adcdcde
4572 0: adcdcde
4573
4574/a[bcd]+dcdcde/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004575\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004576 abcde
4577No match
4578 adcdcde
4579No match
4580
4581/(ab|a)b*c/
4582 abc
4583 0: abc
4584
4585/((a)(b)c)(d)/
4586 abcd
4587 0: abcd
4588
4589/[a-zA-Z_][a-zA-Z0-9_]*/
4590 alpha
4591 0: alpha
4592
4593/^a(bc+|b[eh])g|.h$/
4594 abh
4595 0: bh
4596
4597/(bc+d$|ef*g.|h?i(j|k))/
4598 effgz
4599 0: effgz
4600 ij
4601 0: ij
4602 reffgz
4603 0: effgz
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004604\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004605 effg
4606No match
4607 bcdd
4608No match
4609
4610/((((((((((a))))))))))/
4611 a
4612 0: a
4613
4614/(((((((((a)))))))))/
4615 a
4616 0: a
4617
4618/multiple words of text/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004619\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004620 aa
4621No match
4622 uh-uh
4623No match
4624
4625/multiple words/
4626 multiple words, yeah
4627 0: multiple words
4628
4629/(.*)c(.*)/
4630 abcde
4631 0: abcde
4632
4633/\((.*), (.*)\)/
4634 (a, b)
4635 0: (a, b)
4636
4637/[k]/
4638
4639/abcd/
4640 abcd
4641 0: abcd
4642
4643/a(bc)d/
4644 abcd
4645 0: abcd
4646
4647/a[-]?c/
4648 ac
4649 0: ac
4650
4651/abc/i
4652 ABC
4653 0: ABC
4654 XABCY
4655 0: ABC
4656 ABABC
4657 0: ABC
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004658\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004659 aaxabxbaxbbx
4660No match
4661 XBC
4662No match
4663 AXC
4664No match
4665 ABX
4666No match
4667
4668/ab*c/i
4669 ABC
4670 0: ABC
4671
4672/ab*bc/i
4673 ABC
4674 0: ABC
4675 ABBC
4676 0: ABBC
4677
4678/ab*?bc/i
4679 ABBBBC
4680 0: ABBBBC
4681
4682/ab{0,}?bc/i
4683 ABBBBC
4684 0: ABBBBC
4685
4686/ab+?bc/i
4687 ABBC
4688 0: ABBC
4689
4690/ab+bc/i
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004691\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004692 ABC
4693No match
4694 ABQ
4695No match
4696
4697/ab{1,}bc/i
4698
4699/ab+bc/i
4700 ABBBBC
4701 0: ABBBBC
4702
4703/ab{1,}?bc/i
4704 ABBBBC
4705 0: ABBBBC
4706
4707/ab{1,3}?bc/i
4708 ABBBBC
4709 0: ABBBBC
4710
4711/ab{3,4}?bc/i
4712 ABBBBC
4713 0: ABBBBC
4714
4715/ab{4,5}?bc/i
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004716\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004717 ABQ
4718No match
4719 ABBBBC
4720No match
4721
4722/ab??bc/i
4723 ABBC
4724 0: ABBC
4725 ABC
4726 0: ABC
4727
4728/ab{0,1}?bc/i
4729 ABC
4730 0: ABC
4731
4732/ab??bc/i
4733
4734/ab??c/i
4735 ABC
4736 0: ABC
4737
4738/ab{0,1}?c/i
4739 ABC
4740 0: ABC
4741
4742/^abc$/i
4743 ABC
4744 0: ABC
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004745\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004746 ABBBBC
4747No match
4748 ABCC
4749No match
4750
4751/^abc/i
4752 ABCC
4753 0: ABC
4754
4755/^abc$/i
4756
4757/abc$/i
4758 AABC
4759 0: ABC
4760
4761/^/i
4762 ABC
4763 0:
4764
4765/$/i
4766 ABC
4767 0:
4768
4769/a.c/i
4770 ABC
4771 0: ABC
4772 AXC
4773 0: AXC
4774
4775/a.*?c/i
4776 AXYZC
4777 0: AXYZC
4778
4779/a.*c/i
Nick Kralevichf73ff172014-09-27 12:41:49 -07004780 AABC
4781 0: AABC
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004782\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004783 AXYZD
4784No match
4785
4786/a[bc]d/i
4787 ABD
4788 0: ABD
4789
4790/a[b-d]e/i
4791 ACE
4792 0: ACE
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004793\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004794 ABC
4795No match
4796 ABD
4797No match
4798
4799/a[b-d]/i
4800 AAC
4801 0: AC
4802
4803/a[-b]/i
4804 A-
4805 0: A-
4806
4807/a[b-]/i
4808 A-
4809 0: A-
4810
4811/a]/i
4812 A]
4813 0: A]
4814
4815/a[]]b/i
4816 A]B
4817 0: A]B
4818
4819/a[^bc]d/i
4820 AED
4821 0: AED
4822
4823/a[^-b]c/i
4824 ADC
4825 0: ADC
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004826\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004827 ABD
4828No match
4829 A-C
4830No match
4831
4832/a[^]b]c/i
4833 ADC
4834 0: ADC
4835
4836/ab|cd/i
4837 ABC
4838 0: AB
4839 ABCD
4840 0: AB
4841
4842/()ef/i
4843 DEF
4844 0: EF
4845
4846/$b/i
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004847\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004848 A]C
4849No match
4850 B
4851No match
4852
4853/a\(b/i
4854 A(B
4855 0: A(B
4856
4857/a\(*b/i
4858 AB
4859 0: AB
4860 A((B
4861 0: A((B
4862
4863/a\\b/i
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004864\= Expect no match
4865 A\=notbol
Nick Kralevichf73ff172014-09-27 12:41:49 -07004866No match
4867
4868/((a))/i
4869 ABC
4870 0: A
4871
4872/(a)b(c)/i
4873 ABC
4874 0: ABC
4875
4876/a+b+c/i
4877 AABBABC
4878 0: ABC
4879
4880/a{1,}b{1,}c/i
4881 AABBABC
4882 0: ABC
4883
4884/a.+?c/i
4885 ABCABC
4886 0: ABCABC
4887 1: ABC
4888
4889/a.*?c/i
4890 ABCABC
4891 0: ABCABC
4892 1: ABC
4893
4894/a.{0,5}?c/i
4895 ABCABC
4896 0: ABCABC
4897 1: ABC
4898
4899/(a+|b)*/i
4900 AB
4901 0: AB
4902 1: A
4903 2:
4904
4905/(a+|b){0,}/i
4906 AB
4907 0: AB
4908 1: A
4909 2:
4910
4911/(a+|b)+/i
4912 AB
4913 0: AB
4914 1: A
4915
4916/(a+|b){1,}/i
4917 AB
4918 0: AB
4919 1: A
4920
4921/(a+|b)?/i
4922 AB
4923 0: A
4924 1:
4925
4926/(a+|b){0,1}/i
4927 AB
4928 0: A
4929 1:
4930
4931/(a+|b){0,1}?/i
4932 AB
4933 0: A
4934 1:
4935
4936/[^ab]*/i
4937 CDE
4938 0: CDE
4939
4940/abc/i
4941
4942/a*/i
Nick Kralevichf73ff172014-09-27 12:41:49 -07004943
4944/([abc])*d/i
4945 ABBBCD
4946 0: ABBBCD
4947
4948/([abc])*bcd/i
4949 ABCD
4950 0: ABCD
4951
4952/a|b|c|d|e/i
4953 E
4954 0: E
4955
4956/(a|b|c|d|e)f/i
4957 EF
4958 0: EF
4959
4960/abcd*efg/i
4961 ABCDEFG
4962 0: ABCDEFG
4963
4964/ab*/i
4965 XABYABBBZ
4966 0: AB
4967 XAYABBBZ
4968 0: A
4969
4970/(ab|cd)e/i
4971 ABCDE
4972 0: CDE
4973
4974/[abhgefdc]ij/i
4975 HIJ
4976 0: HIJ
4977
4978/^(ab|cd)e/i
Janis Danisevskis53e448c2016-03-31 13:35:25 +01004979\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07004980 ABCDE
4981No match
4982
4983/(abc|)ef/i
4984 ABCDEF
4985 0: EF
4986
4987/(a|b)c*d/i
4988 ABCD
4989 0: BCD
4990
4991/(ab|ab*)bc/i
4992 ABC
4993 0: ABC
4994
4995/a([bc]*)c*/i
4996 ABC
4997 0: ABC
4998 1: A
4999
5000/a([bc]*)(c*d)/i
5001 ABCD
5002 0: ABCD
5003
5004/a([bc]+)(c*d)/i
5005 ABCD
5006 0: ABCD
5007
5008/a([bc]*)(c+d)/i
5009 ABCD
5010 0: ABCD
5011
5012/a[bcd]*dcdcde/i
5013 ADCDCDE
5014 0: ADCDCDE
5015
5016/a[bcd]+dcdcde/i
5017
5018/(ab|a)b*c/i
5019 ABC
5020 0: ABC
5021
5022/((a)(b)c)(d)/i
5023 ABCD
5024 0: ABCD
5025
5026/[a-zA-Z_][a-zA-Z0-9_]*/i
5027 ALPHA
5028 0: ALPHA
5029
5030/^a(bc+|b[eh])g|.h$/i
5031 ABH
5032 0: BH
5033
5034/(bc+d$|ef*g.|h?i(j|k))/i
5035 EFFGZ
5036 0: EFFGZ
5037 IJ
5038 0: IJ
5039 REFFGZ
5040 0: EFFGZ
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005041\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005042 ADCDCDE
5043No match
5044 EFFG
5045No match
5046 BCDD
5047No match
5048
5049/((((((((((a))))))))))/i
5050 A
5051 0: A
5052
5053/(((((((((a)))))))))/i
5054 A
5055 0: A
5056
5057/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
5058 A
5059 0: A
5060
5061/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
5062 C
5063 0: C
5064
5065/multiple words of text/i
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005066\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005067 AA
5068No match
5069 UH-UH
5070No match
5071
5072/multiple words/i
5073 MULTIPLE WORDS, YEAH
5074 0: MULTIPLE WORDS
5075
5076/(.*)c(.*)/i
5077 ABCDE
5078 0: ABCDE
5079
5080/\((.*), (.*)\)/i
5081 (A, B)
5082 0: (A, B)
5083
5084/[k]/i
5085
5086/abcd/i
5087 ABCD
5088 0: ABCD
5089
5090/a(bc)d/i
5091 ABCD
5092 0: ABCD
5093
5094/a[-]?c/i
5095 AC
5096 0: AC
5097
5098/a(?!b)./
5099 abad
5100 0: ad
5101
5102/a(?=d)./
5103 abad
5104 0: ad
5105
5106/a(?=c|d)./
5107 abad
5108 0: ad
5109
5110/a(?:b|c|d)(.)/
5111 ace
5112 0: ace
5113
5114/a(?:b|c|d)*(.)/
5115 ace
5116 0: ace
5117 1: ac
5118
5119/a(?:b|c|d)+?(.)/
5120 ace
5121 0: ace
5122 acdbcdbe
5123 0: acdbcdbe
5124 1: acdbcdb
5125 2: acdbcd
5126 3: acdbc
5127 4: acdb
5128 5: acd
5129
5130/a(?:b|c|d)+(.)/
5131 acdbcdbe
5132 0: acdbcdbe
5133 1: acdbcdb
5134 2: acdbcd
5135 3: acdbc
5136 4: acdb
5137 5: acd
5138
5139/a(?:b|c|d){2}(.)/
5140 acdbcdbe
5141 0: acdb
5142
5143/a(?:b|c|d){4,5}(.)/
5144 acdbcdbe
5145 0: acdbcdb
5146 1: acdbcd
5147
5148/a(?:b|c|d){4,5}?(.)/
5149 acdbcdbe
5150 0: acdbcdb
5151 1: acdbcd
5152
5153/((foo)|(bar))*/
5154 foobar
5155 0: foobar
5156 1: foo
5157 2:
5158
5159/a(?:b|c|d){6,7}(.)/
5160 acdbcdbe
5161 0: acdbcdbe
5162
5163/a(?:b|c|d){6,7}?(.)/
5164 acdbcdbe
5165 0: acdbcdbe
5166
5167/a(?:b|c|d){5,6}(.)/
5168 acdbcdbe
5169 0: acdbcdbe
5170 1: acdbcdb
5171
5172/a(?:b|c|d){5,6}?(.)/
5173 acdbcdbe
5174 0: acdbcdbe
5175 1: acdbcdb
5176
5177/a(?:b|c|d){5,7}(.)/
5178 acdbcdbe
5179 0: acdbcdbe
5180 1: acdbcdb
5181
5182/a(?:b|c|d){5,7}?(.)/
5183 acdbcdbe
5184 0: acdbcdbe
5185 1: acdbcdb
5186
5187/a(?:b|(c|e){1,2}?|d)+?(.)/
5188 ace
5189 0: ace
5190
5191/^(.+)?B/
5192 AB
5193 0: AB
5194
5195/^([^a-z])|(\^)$/
5196 .
5197 0: .
5198
5199/^[<>]&/
5200 <&OUT
5201 0: <&
5202
5203/(?:(f)(o)(o)|(b)(a)(r))*/
5204 foobar
5205 0: foobar
5206 1: foo
5207 2:
5208
5209/(?<=a)b/
5210 ab
5211 0: b
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005212\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005213 cb
5214No match
5215 b
5216No match
5217
5218/(?<!c)b/
5219 ab
5220 0: b
5221 b
5222 0: b
5223 b
5224 0: b
5225
5226/(?:..)*a/
5227 aba
5228 0: aba
5229 1: a
5230
5231/(?:..)*?a/
5232 aba
5233 0: aba
5234 1: a
5235
5236/^(){3,5}/
5237 abc
5238 0:
5239
5240/^(a+)*ax/
5241 aax
5242 0: aax
5243
5244/^((a|b)+)*ax/
5245 aax
5246 0: aax
5247
5248/^((a|bc)+)*ax/
5249 aax
5250 0: aax
5251
5252/(a|x)*ab/
5253 cab
5254 0: ab
5255
5256/(a)*ab/
5257 cab
5258 0: ab
5259
5260/(?:(?i)a)b/
5261 ab
5262 0: ab
5263
5264/((?i)a)b/
5265 ab
5266 0: ab
5267
5268/(?:(?i)a)b/
5269 Ab
5270 0: Ab
5271
5272/((?i)a)b/
5273 Ab
5274 0: Ab
5275
5276/(?:(?i)a)b/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005277\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005278 cb
5279No match
5280 aB
5281No match
5282
5283/((?i)a)b/
5284
5285/(?i:a)b/
5286 ab
5287 0: ab
5288
5289/((?i:a))b/
5290 ab
5291 0: ab
5292
5293/(?i:a)b/
5294 Ab
5295 0: Ab
5296
5297/((?i:a))b/
5298 Ab
5299 0: Ab
5300
5301/(?i:a)b/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005302\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005303 aB
5304No match
5305 aB
5306No match
5307
5308/((?i:a))b/
5309
5310/(?:(?-i)a)b/i
5311 ab
5312 0: ab
5313
5314/((?-i)a)b/i
5315 ab
5316 0: ab
5317
5318/(?:(?-i)a)b/i
5319 aB
5320 0: aB
5321
5322/((?-i)a)b/i
5323 aB
5324 0: aB
5325
5326/(?:(?-i)a)b/i
Nick Kralevichf73ff172014-09-27 12:41:49 -07005327 aB
5328 0: aB
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005329\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005330 Ab
5331No match
5332
5333/((?-i)a)b/i
5334
5335/(?:(?-i)a)b/i
5336 aB
5337 0: aB
5338
5339/((?-i)a)b/i
5340 aB
5341 0: aB
5342
5343/(?:(?-i)a)b/i
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005344\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005345 Ab
5346No match
5347 AB
5348No match
5349
5350/((?-i)a)b/i
5351
5352/(?-i:a)b/i
5353 ab
5354 0: ab
5355
5356/((?-i:a))b/i
5357 ab
5358 0: ab
5359
5360/(?-i:a)b/i
5361 aB
5362 0: aB
5363
5364/((?-i:a))b/i
5365 aB
5366 0: aB
5367
5368/(?-i:a)b/i
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005369\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005370 AB
5371No match
5372 Ab
5373No match
5374
5375/((?-i:a))b/i
5376
5377/(?-i:a)b/i
5378 aB
5379 0: aB
5380
5381/((?-i:a))b/i
5382 aB
5383 0: aB
5384
5385/(?-i:a)b/i
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005386\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005387 Ab
5388No match
5389 AB
5390No match
5391
5392/((?-i:a))b/i
5393
5394/((?-i:a.))b/i
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005395\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005396 AB
5397No match
5398 a\nB
5399No match
5400
5401/((?s-i:a.))b/i
5402 a\nB
5403 0: a\x0aB
5404
5405/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
5406 cabbbb
5407 0: cabbbb
5408
5409/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
5410 caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
5411 0: caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
5412
5413/foo\w*\d{4}baz/
5414 foobar1234baz
5415 0: foobar1234baz
5416
5417/x(~~)*(?:(?:F)?)?/
5418 x~~
5419 0: x~~
5420 1: x
5421
5422/^a(?#xxx){3}c/
5423 aaac
5424 0: aaac
5425
5426/^a (?#xxx) (?#yyy) {3}c/x
5427 aaac
5428 0: aaac
5429
5430/(?<![cd])b/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005431\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005432 B\nB
5433No match
5434 dbcb
5435No match
5436
5437/(?<![cd])[ab]/
5438 dbaacb
5439 0: a
5440
5441/(?<!(c|d))b/
5442
5443/(?<!(c|d))[ab]/
5444 dbaacb
5445 0: a
5446
5447/(?<!cd)[ab]/
5448 cdaccb
5449 0: b
5450
5451/^(?:a?b?)*$/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005452\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005453 dbcb
5454No match
5455 a--
5456No match
5457
5458/((?s)^a(.))((?m)^b$)/
5459 a\nb\nc\n
5460 0: a\x0ab
5461
5462/((?m)^b$)/
5463 a\nb\nc\n
5464 0: b
5465
5466/(?m)^b/
5467 a\nb\n
5468 0: b
5469
5470/(?m)^(b)/
5471 a\nb\n
5472 0: b
5473
5474/((?m)^b)/
5475 a\nb\n
5476 0: b
5477
5478/\n((?m)^b)/
5479 a\nb\n
5480 0: \x0ab
5481
5482/((?s).)c(?!.)/
5483 a\nb\nc\n
5484 0: \x0ac
5485 a\nb\nc\n
5486 0: \x0ac
5487
5488/((?s)b.)c(?!.)/
5489 a\nb\nc\n
5490 0: b\x0ac
5491 a\nb\nc\n
5492 0: b\x0ac
5493
5494/^b/
5495
5496/()^b/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005497\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005498 a\nb\nc\n
5499No match
5500 a\nb\nc\n
5501No match
5502
5503/((?m)^b)/
5504 a\nb\nc\n
5505 0: b
5506
5507/(?(?!a)a|b)/
5508
5509/(?(?!a)b|a)/
5510 a
5511 0: a
5512
5513/(?(?=a)b|a)/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005514\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005515 a
5516No match
5517 a
5518No match
5519
5520/(?(?=a)a|b)/
5521 a
5522 0: a
5523
5524/(\w+:)+/
5525 one:
5526 0: one:
5527
5528/$(?<=^(a))/
5529 a
5530 0:
5531
5532/([\w:]+::)?(\w+)$/
5533 abcd
5534 0: abcd
5535 xy:z:::abcd
5536 0: xy:z:::abcd
5537
5538/^[^bcd]*(c+)/
5539 aexycd
5540 0: aexyc
5541
5542/(a*)b+/
5543 caab
5544 0: aab
5545
5546/([\w:]+::)?(\w+)$/
5547 abcd
5548 0: abcd
5549 xy:z:::abcd
5550 0: xy:z:::abcd
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005551\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005552 abcd:
5553No match
5554 abcd:
5555No match
5556
5557/^[^bcd]*(c+)/
5558 aexycd
5559 0: aexyc
5560
5561/(>a+)ab/
5562
5563/(?>a+)b/
5564 aaab
5565 0: aaab
5566
5567/([[:]+)/
5568 a:[b]:
5569 0: :[
5570
5571/([[=]+)/
5572 a=[b]=
5573 0: =[
5574
5575/([[.]+)/
5576 a.[b].
5577 0: .[
5578
5579/((?>a+)b)/
5580 aaab
5581 0: aaab
5582
5583/(?>(a+))b/
5584 aaab
5585 0: aaab
5586
5587/((?>[^()]+)|\([^()]*\))+/
5588 ((abc(ade)ufh()()x
5589 0: abc(ade)ufh()()x
5590 1: abc(ade)ufh()()
5591 2: abc(ade)ufh()
5592 3: abc(ade)ufh
5593 4: abc(ade)
5594 5: abc
5595
5596/a\Z/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005597\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005598 aaab
5599No match
5600 a\nb\n
5601No match
5602
5603/b\Z/
5604 a\nb\n
5605 0: b
5606
5607/b\z/
5608
5609/b\Z/
5610 a\nb
5611 0: b
5612
5613/b\z/
5614 a\nb
5615 0: b
Nick Kralevichf73ff172014-09-27 12:41:49 -07005616
5617/(?>.*)(?<=(abcd|wxyz))/
5618 alphabetabcd
5619 0: alphabetabcd
5620 endingwxyz
5621 0: endingwxyz
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005622\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005623 a rather long string that doesn't end with one of them
5624No match
5625
5626/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
5627 word cat dog elephant mussel cow horse canary baboon snake shark otherword
5628 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005629\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005630 word cat dog elephant mussel cow horse canary baboon snake shark
5631No match
5632
5633/word (?>[a-zA-Z0-9]+ ){0,30}otherword/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005634\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005635 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
5636No match
5637
5638/(?<=\d{3}(?!999))foo/
5639 999foo
5640 0: foo
5641 123999foo
5642 0: foo
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005643\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005644 123abcfoo
5645No match
5646
5647/(?<=(?!...999)\d{3})foo/
5648 999foo
5649 0: foo
5650 123999foo
5651 0: foo
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005652\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005653 123abcfoo
5654No match
5655
5656/(?<=\d{3}(?!999)...)foo/
5657 123abcfoo
5658 0: foo
5659 123456foo
5660 0: foo
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005661\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005662 123999foo
5663No match
5664
5665/(?<=\d{3}...)(?<!999)foo/
5666 123abcfoo
5667 0: foo
5668 123456foo
5669 0: foo
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005670\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005671 123999foo
5672No match
5673
5674/((Z)+|A)*/
5675 ZABCDEFG
5676 0: ZA
5677 1: Z
5678 2:
5679
5680/(Z()|A)*/
5681 ZABCDEFG
5682 0: ZA
5683 1: Z
5684 2:
5685
5686/(Z(())|A)*/
5687 ZABCDEFG
5688 0: ZA
5689 1: Z
5690 2:
5691
5692/((?>Z)+|A)*/
5693 ZABCDEFG
5694 0: ZA
5695 1: Z
5696 2:
5697
5698/((?>)+|A)*/
5699 ZABCDEFG
5700 0:
5701
5702/a*/g
5703 abbab
5704 0: a
5705 0:
5706 0:
5707 0: a
5708 0:
5709 0:
5710
Nick Kralevichf73ff172014-09-27 12:41:49 -07005711/[[:space:]]+/
5712 > \x09\x0a\x0c\x0d\x0b<
5713 0: \x09\x0a\x0c\x0d\x0b
5714
5715/[[:blank:]]+/
5716 > \x09\x0a\x0c\x0d\x0b<
5717 0: \x09
5718
5719/[\s]+/
5720 > \x09\x0a\x0c\x0d\x0b<
5721 0: \x09\x0a\x0c\x0d\x0b
5722
5723/\s+/
5724 > \x09\x0a\x0c\x0d\x0b<
5725 0: \x09\x0a\x0c\x0d\x0b
5726
5727/a b/x
5728 ab
5729 0: ab
5730
5731/(?!\A)x/m
5732 a\nxb\n
5733 0: x
5734
5735/(?!^)x/m
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005736\= Expect no match
5737 a\nxb\n
Nick Kralevichf73ff172014-09-27 12:41:49 -07005738No match
5739
5740/abc\Qabc\Eabc/
5741 abcabcabc
5742 0: abcabcabc
5743
5744/abc\Q(*+|\Eabc/
5745 abc(*+|abc
5746 0: abc(*+|abc
5747
5748/ abc\Q abc\Eabc/x
5749 abc abcabc
5750 0: abc abcabc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005751\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005752 abcabcabc
5753No match
5754
5755/abc#comment
5756 \Q#not comment
5757 literal\E/x
5758 abc#not comment\n literal
5759 0: abc#not comment\x0a literal
5760
5761/abc#comment
5762 \Q#not comment
5763 literal/x
5764 abc#not comment\n literal
5765 0: abc#not comment\x0a literal
5766
5767/abc#comment
5768 \Q#not comment
5769 literal\E #more comment
5770 /x
5771 abc#not comment\n literal
5772 0: abc#not comment\x0a literal
5773
5774/abc#comment
5775 \Q#not comment
5776 literal\E #more comment/x
5777 abc#not comment\n literal
5778 0: abc#not comment\x0a literal
5779
5780/\Qabc\$xyz\E/
5781 abc\\\$xyz
5782 0: abc\$xyz
5783
5784/\Qabc\E\$\Qxyz\E/
5785 abc\$xyz
5786 0: abc$xyz
5787
5788/\Gabc/
5789 abc
5790 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005791\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005792 xyzabc
5793No match
5794
5795/\Gabc./g
5796 abc1abc2xyzabc3
5797 0: abc1
5798 0: abc2
5799
5800/abc./g
5801 abc1abc2xyzabc3
5802 0: abc1
5803 0: abc2
5804 0: abc3
5805
5806/a(?x: b c )d/
5807 XabcdY
5808 0: abcd
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005809\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005810 Xa b c d Y
5811No match
5812
5813/((?x)x y z | a b c)/
5814 XabcY
5815 0: abc
5816 AxyzB
5817 0: xyz
5818
5819/(?i)AB(?-i)C/
5820 XabCY
5821 0: abC
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005822\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005823 XabcY
5824No match
5825
5826/((?i)AB(?-i)C|D)E/
5827 abCE
5828 0: abCE
5829 DE
5830 0: DE
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005831\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005832 abcE
5833No match
5834 abCe
5835No match
5836 dE
5837No match
5838 De
5839No match
5840
5841/[z\Qa-d]\E]/
5842 z
5843 0: z
5844 a
5845 0: a
5846 -
5847 0: -
5848 d
5849 0: d
5850 ]
5851 0: ]
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005852\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005853 b
5854No match
5855
Nick Kralevichf73ff172014-09-27 12:41:49 -07005856/(a+)*b/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005857\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005858 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
5859No match
5860
5861/(?i)reg(?:ul(?:[aä]|ae)r|ex)/
5862 REGular
5863 0: REGular
5864 regulaer
5865 0: regulaer
5866 Regex
5867 0: Regex
5868 regulär
5869 0: regul\xe4r
5870
5871/Åæåä[à-ÿÀ-ß]+/
5872 Åæåäà
5873 0: \xc5\xe6\xe5\xe4\xe0
5874 Åæåäÿ
5875 0: \xc5\xe6\xe5\xe4\xff
5876 ÅæåäÀ
5877 0: \xc5\xe6\xe5\xe4\xc0
5878 Åæåäß
5879 0: \xc5\xe6\xe5\xe4\xdf
5880
5881/(?<=Z)X./
5882 \x84XAZXB
5883 0: XB
5884
5885/^(?(2)a|(1)(2))+$/
5886 123a
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005887Failed: error -40: backreference condition or recursion test is not supported for DFA matching
Nick Kralevichf73ff172014-09-27 12:41:49 -07005888
5889/(?<=a|bbbb)c/
5890 ac
5891 0: c
5892 bbbbc
5893 0: c
5894
Nick Kralevichf73ff172014-09-27 12:41:49 -07005895/line\nbreak/
5896 this is a line\nbreak
5897 0: line\x0abreak
5898 line one\nthis is a line\nbreak in the second line
5899 0: line\x0abreak
5900
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005901/line\nbreak/firstline
Nick Kralevichf73ff172014-09-27 12:41:49 -07005902 this is a line\nbreak
5903 0: line\x0abreak
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005904\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005905 line one\nthis is a line\nbreak in the second line
5906No match
5907
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005908/line\nbreak/m,firstline
Nick Kralevichf73ff172014-09-27 12:41:49 -07005909 this is a line\nbreak
5910 0: line\x0abreak
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005911\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07005912 line one\nthis is a line\nbreak in the second line
5913No match
5914
5915/1234/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005916 123\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07005917Partial match: 123
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005918\= Expect no match
5919 a4\=ps,dfa_restart
Nick Kralevichf73ff172014-09-27 12:41:49 -07005920No match
5921
5922/1234/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005923 123\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07005924Partial match: 123
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005925 4\=ps,dfa_restart
Nick Kralevichf73ff172014-09-27 12:41:49 -07005926 0: 4
5927
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005928/^/gm
Nick Kralevichf73ff172014-09-27 12:41:49 -07005929 a\nb\nc\n
5930 0:
5931 0:
5932 0:
5933 \
5934 0:
5935
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005936/(?<=C\n)^/gm
Nick Kralevichf73ff172014-09-27 12:41:49 -07005937 A\nC\nC\n
5938 0:
5939
5940/(?s)A?B/
5941 AB
5942 0: AB
5943 aB
5944 0: B
5945
5946/(?s)A*B/
5947 AB
5948 0: AB
5949 aB
5950 0: B
5951
5952/(?m)A?B/
5953 AB
5954 0: AB
5955 aB
5956 0: B
5957
5958/(?m)A*B/
5959 AB
5960 0: AB
5961 aB
5962 0: B
5963
5964/Content-Type\x3A[^\r\n]{6,}/
5965 Content-Type:xxxxxyyy
5966 0: Content-Type:xxxxxyyy
5967
5968/Content-Type\x3A[^\r\n]{6,}z/
5969 Content-Type:xxxxxyyyz
5970 0: Content-Type:xxxxxyyyz
5971
5972/Content-Type\x3A[^a]{6,}/
5973 Content-Type:xxxyyy
5974 0: Content-Type:xxxyyy
5975
5976/Content-Type\x3A[^a]{6,}z/
5977 Content-Type:xxxyyyz
5978 0: Content-Type:xxxyyyz
5979
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005980/^abc/Im,newline=lf
Elliott Hughes0c26e192019-08-07 12:24:46 -07005981Capture group count = 0
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005982Options: multiline
5983Forced newline is LF
5984First code unit at start or follows newline
5985Last code unit = 'c'
5986Subject length lower bound = 3
Nick Kralevichf73ff172014-09-27 12:41:49 -07005987 xyz\nabc
5988 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005989 xyz\r\nabc
Nick Kralevichf73ff172014-09-27 12:41:49 -07005990 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01005991\= Expect no match
5992 xyz\rabc
5993No match
5994 xyzabc\r
5995No match
5996 xyzabc\rpqr
5997No match
5998 xyzabc\r\n
5999No match
6000 xyzabc\r\npqr
6001No match
6002
6003/^abc/Im,newline=crlf
Elliott Hughes0c26e192019-08-07 12:24:46 -07006004Capture group count = 0
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006005Options: multiline
6006Forced newline is CRLF
6007First code unit at start or follows newline
6008Last code unit = 'c'
6009Subject length lower bound = 3
6010 xyz\r\nabclf>
Nick Kralevichf73ff172014-09-27 12:41:49 -07006011 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006012\= Expect no match
6013 xyz\nabclf
Nick Kralevichf73ff172014-09-27 12:41:49 -07006014No match
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006015 xyz\rabclf
Nick Kralevichf73ff172014-09-27 12:41:49 -07006016No match
6017
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006018/^abc/Im,newline=cr
Elliott Hughes0c26e192019-08-07 12:24:46 -07006019Capture group count = 0
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006020Options: multiline
6021Forced newline is CR
6022First code unit at start or follows newline
6023Last code unit = 'c'
6024Subject length lower bound = 3
6025 xyz\rabc
Nick Kralevichf73ff172014-09-27 12:41:49 -07006026 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006027\= Expect no match
6028 xyz\nabc
Nick Kralevichf73ff172014-09-27 12:41:49 -07006029No match
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006030 xyz\r\nabc
Nick Kralevichf73ff172014-09-27 12:41:49 -07006031No match
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006032
6033/.*/I,newline=lf
Elliott Hughes0c26e192019-08-07 12:24:46 -07006034Capture group count = 0
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006035May match empty string
6036Forced newline is LF
6037First code unit at start or follows newline
6038Subject length lower bound = 0
Nick Kralevichf73ff172014-09-27 12:41:49 -07006039 abc\ndef
6040 0: abc
6041 abc\rdef
6042 0: abc\x0ddef
6043 abc\r\ndef
6044 0: abc\x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006045
6046/.*/I,newline=cr
Elliott Hughes0c26e192019-08-07 12:24:46 -07006047Capture group count = 0
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006048May match empty string
6049Forced newline is CR
6050First code unit at start or follows newline
6051Subject length lower bound = 0
6052 abc\ndef
Nick Kralevichf73ff172014-09-27 12:41:49 -07006053 0: abc\x0adef
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006054 abc\rdef
Nick Kralevichf73ff172014-09-27 12:41:49 -07006055 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006056 abc\r\ndef
Nick Kralevichf73ff172014-09-27 12:41:49 -07006057 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006058
6059/.*/I,newline=crlf
Elliott Hughes0c26e192019-08-07 12:24:46 -07006060Capture group count = 0
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006061May match empty string
6062Forced newline is CRLF
6063First code unit at start or follows newline
6064Subject length lower bound = 0
6065 abc\ndef
Nick Kralevichf73ff172014-09-27 12:41:49 -07006066 0: abc\x0adef
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006067 abc\rdef
Nick Kralevichf73ff172014-09-27 12:41:49 -07006068 0: abc\x0ddef
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006069 abc\r\ndef
Nick Kralevichf73ff172014-09-27 12:41:49 -07006070 0: abc
6071
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006072/\w+(.)(.)?def/Is
Elliott Hughes0c26e192019-08-07 12:24:46 -07006073Capture group count = 2
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006074Options: dotall
6075Starting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P
6076 Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z
6077Last code unit = 'f'
6078Subject length lower bound = 5
6079 abc\ndef
6080 0: abc\x0adef
6081 abc\rdef
6082 0: abc\x0ddef
6083 abc\r\ndef
6084 0: abc\x0d\x0adef
6085
Nick Kralevichf73ff172014-09-27 12:41:49 -07006086/\w+(.)(.)?def/s
6087 abc\ndef
6088 0: abc\x0adef
6089 abc\rdef
6090 0: abc\x0ddef
6091 abc\r\ndef
6092 0: abc\x0d\x0adef
6093
6094/^\w+=.*(\\\n.*)*/
6095 abc=xyz\\\npqr
6096 0: abc=xyz\\x0apqr
6097 1: abc=xyz\\x0apq
6098 2: abc=xyz\\x0ap
6099 3: abc=xyz\\x0a
6100 4: abc=xyz\
6101 5: abc=xyz
6102 6: abc=xy
6103 7: abc=x
6104 8: abc=
6105
6106/^(a()*)*/
6107 aaaa
6108 0: aaaa
6109 1: aaa
6110 2: aa
6111 3: a
6112 4:
6113
6114/^(?:a(?:(?:))*)*/
6115 aaaa
6116 0: aaaa
6117 1: aaa
6118 2: aa
6119 3: a
6120 4:
6121
6122/^(a()+)+/
6123 aaaa
6124 0: aaaa
6125 1: aaa
6126 2: aa
6127 3: a
6128
6129/^(?:a(?:(?:))+)+/
6130 aaaa
6131 0: aaaa
6132 1: aaa
6133 2: aa
6134 3: a
6135
6136/(a|)*\d/
Nick Kralevichf73ff172014-09-27 12:41:49 -07006137 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
6138 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006139\= Expect no match
6140 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
6141No match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006142
6143/(?>a|)*\d/
Nick Kralevichf73ff172014-09-27 12:41:49 -07006144 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
6145 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006146\= Expect no match
6147 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
6148No match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006149
6150/(?:a|)*\d/
Nick Kralevichf73ff172014-09-27 12:41:49 -07006151 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
6152 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006153\= Expect no match
6154 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
6155No match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006156
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006157/^a.b/newline=lf
Nick Kralevichf73ff172014-09-27 12:41:49 -07006158 a\rb
6159 0: a\x0db
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006160\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006161 a\nb
6162No match
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006163
6164/^a.b/newline=cr
6165 a\nb
6166 0: a\x0ab
6167\= Expect no match
6168 a\rb
Nick Kralevichf73ff172014-09-27 12:41:49 -07006169No match
6170
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006171/^a.b/newline=anycrlf
6172 a\x85b
6173 0: a\x85b
6174\= Expect no match
6175 a\rb
6176No match
6177
6178/^a.b/newline=any
6179\= Expect no match
6180 a\nb
6181No match
6182 a\rb
6183No match
6184 a\x85b
6185No match
6186
6187/^abc./gmx,newline=any
Nick Kralevichf73ff172014-09-27 12:41:49 -07006188 abc1 \x0aabc2 \x0babc3xx \x0cabc4 \x0dabc5xx \x0d\x0aabc6 \x85abc7 JUNK
6189 0: abc1
6190 0: abc2
6191 0: abc3
6192 0: abc4
6193 0: abc5
6194 0: abc6
6195 0: abc7
6196
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006197/abc.$/gmx,newline=any
Nick Kralevichf73ff172014-09-27 12:41:49 -07006198 abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc9
6199 0: abc1
6200 0: abc2
6201 0: abc3
6202 0: abc4
6203 0: abc5
6204 0: abc6
6205 0: abc9
6206
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006207/^a\Rb/bsr=unicode
Nick Kralevichf73ff172014-09-27 12:41:49 -07006208 a\nb
6209 0: a\x0ab
6210 a\rb
6211 0: a\x0db
6212 a\r\nb
6213 0: a\x0d\x0ab
6214 a\x0bb
6215 0: a\x0bb
6216 a\x0cb
6217 0: a\x0cb
6218 a\x85b
6219 0: a\x85b
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006220\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006221 a\n\rb
6222No match
6223
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006224/^a\R*b/bsr=unicode
Nick Kralevichf73ff172014-09-27 12:41:49 -07006225 ab
6226 0: ab
6227 a\nb
6228 0: a\x0ab
6229 a\rb
6230 0: a\x0db
6231 a\r\nb
6232 0: a\x0d\x0ab
6233 a\x0bb
6234 0: a\x0bb
6235 a\x0cb
6236 0: a\x0cb
6237 a\x85b
6238 0: a\x85b
6239 a\n\rb
6240 0: a\x0a\x0db
6241 a\n\r\x85\x0cb
6242 0: a\x0a\x0d\x85\x0cb
6243
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006244/^a\R+b/bsr=unicode
Nick Kralevichf73ff172014-09-27 12:41:49 -07006245 a\nb
6246 0: a\x0ab
6247 a\rb
6248 0: a\x0db
6249 a\r\nb
6250 0: a\x0d\x0ab
6251 a\x0bb
6252 0: a\x0bb
6253 a\x0cb
6254 0: a\x0cb
6255 a\x85b
6256 0: a\x85b
6257 a\n\rb
6258 0: a\x0a\x0db
6259 a\n\r\x85\x0cb
6260 0: a\x0a\x0d\x85\x0cb
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006261\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006262 ab
6263No match
6264
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006265/^a\R{1,3}b/bsr=unicode
Nick Kralevichf73ff172014-09-27 12:41:49 -07006266 a\nb
6267 0: a\x0ab
6268 a\n\rb
6269 0: a\x0a\x0db
6270 a\n\r\x85b
6271 0: a\x0a\x0d\x85b
6272 a\r\n\r\nb
6273 0: a\x0d\x0a\x0d\x0ab
6274 a\r\n\r\n\r\nb
6275 0: a\x0d\x0a\x0d\x0a\x0d\x0ab
6276 a\n\r\n\rb
6277 0: a\x0a\x0d\x0a\x0db
6278 a\n\n\r\nb
6279 0: a\x0a\x0a\x0d\x0ab
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006280\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006281 a\n\n\n\rb
6282No match
6283 a\r
6284No match
6285
Nick Kralevichf73ff172014-09-27 12:41:49 -07006286/.+foo/
6287 afoo
6288 0: afoo
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006289\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006290 \r\nfoo
6291No match
6292 \nfoo
6293No match
6294
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006295/.+foo/newline=crlf
Nick Kralevichf73ff172014-09-27 12:41:49 -07006296 afoo
6297 0: afoo
6298 \nfoo
6299 0: \x0afoo
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006300\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006301 \r\nfoo
6302No match
6303
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006304/.+foo/newline=any
Nick Kralevichf73ff172014-09-27 12:41:49 -07006305 afoo
6306 0: afoo
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006307\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006308 \nfoo
6309No match
6310 \r\nfoo
6311No match
6312
6313/.+foo/s
6314 afoo
6315 0: afoo
6316 \r\nfoo
6317 0: \x0d\x0afoo
6318 \nfoo
6319 0: \x0afoo
6320
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006321/^$/gm,newline=any
Nick Kralevichf73ff172014-09-27 12:41:49 -07006322 abc\r\rxyz
6323 0:
6324 abc\n\rxyz
6325 0:
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006326\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006327 abc\r\nxyz
6328No match
6329
6330/^X/m
6331 XABC
6332 0: X
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006333\= Expect no match
6334 XABC\=notbol
Nick Kralevichf73ff172014-09-27 12:41:49 -07006335No match
6336
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006337/(?m)^$/g,newline=any,aftertext
Nick Kralevichf73ff172014-09-27 12:41:49 -07006338 abc\r\n\r\n
6339 0:
6340 0+ \x0d\x0a
6341
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006342/(?m)^$|^\r\n/g,newline=any,aftertext
Nick Kralevichf73ff172014-09-27 12:41:49 -07006343 abc\r\n\r\n
6344 0: \x0d\x0a
6345 0+
6346 1:
6347
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006348/(?m)$/g,newline=any,aftertext
Nick Kralevichf73ff172014-09-27 12:41:49 -07006349 abc\r\n\r\n
6350 0:
6351 0+ \x0d\x0a\x0d\x0a
6352 0:
6353 0+ \x0d\x0a
6354 0:
6355 0+
6356
6357/(?|(abc)|(xyz))/
6358 >abc<
6359 0: abc
6360 >xyz<
6361 0: xyz
6362
6363/(x)(?|(abc)|(xyz))(x)/
6364 xabcx
6365 0: xabcx
6366 xxyzx
6367 0: xxyzx
6368
6369/(x)(?|(abc)(pqr)|(xyz))(x)/
6370 xabcpqrx
6371 0: xabcpqrx
6372 xxyzx
6373 0: xxyzx
6374
6375/(?|(abc)|(xyz))(?1)/
6376 abcabc
6377 0: abcabc
6378 xyzabc
6379 0: xyzabc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006380\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006381 xyzxyz
6382No match
6383
6384/\H\h\V\v/
6385 X X\x0a
6386 0: X X\x0a
6387 X\x09X\x0b
6388 0: X\x09X\x0b
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006389\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006390 \xa0 X\x0a
6391No match
6392
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006393/\H*\h+\V?\v{3,4}/
Nick Kralevichf73ff172014-09-27 12:41:49 -07006394 \x09\x20\xa0X\x0a\x0b\x0c\x0d\x0a
6395 0: \x09 \xa0X\x0a\x0b\x0c\x0d
6396 \x09\x20\xa0\x0a\x0b\x0c\x0d\x0a
6397 0: \x09 \xa0\x0a\x0b\x0c\x0d
6398 \x09\x20\xa0\x0a\x0b\x0c
6399 0: \x09 \xa0\x0a\x0b\x0c
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006400\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006401 \x09\x20\xa0\x0a\x0b
6402No match
6403
6404/\H{3,4}/
6405 XY ABCDE
6406 0: ABCD
6407 XY PQR ST
6408 0: PQR
6409
6410/.\h{3,4}./
6411 XY AB PQRS
6412 0: B P
6413 1: B
6414
6415/\h*X\h?\H+Y\H?Z/
6416 >XNNNYZ
6417 0: XNNNYZ
6418 > X NYQZ
6419 0: X NYQZ
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006420\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006421 >XYZ
6422No match
6423 > X NY Z
6424No match
6425
6426/\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c/
6427 >XY\x0aZ\x0aA\x0bNN\x0c
6428 0: XY\x0aZ\x0aA\x0bNN\x0c
6429 >\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
6430 0: \x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
6431
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006432/.+A/newline=crlf
6433\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006434 \r\nA
6435No match
6436
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006437/\nA/newline=crlf
Nick Kralevichf73ff172014-09-27 12:41:49 -07006438 \r\nA
6439 0: \x0aA
6440
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006441/[\r\n]A/newline=crlf
Nick Kralevichf73ff172014-09-27 12:41:49 -07006442 \r\nA
6443 0: \x0aA
6444
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006445/(\r|\n)A/newline=crlf
Nick Kralevichf73ff172014-09-27 12:41:49 -07006446 \r\nA
6447 0: \x0aA
6448
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006449/a\Rb/I,bsr=anycrlf
Elliott Hughes0c26e192019-08-07 12:24:46 -07006450Capture group count = 0
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006451\R matches CR, LF, or CRLF
6452First code unit = 'a'
6453Last code unit = 'b'
6454Subject length lower bound = 3
Nick Kralevichf73ff172014-09-27 12:41:49 -07006455 a\rb
6456 0: a\x0db
6457 a\nb
6458 0: a\x0ab
6459 a\r\nb
6460 0: a\x0d\x0ab
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006461\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006462 a\x85b
6463No match
6464 a\x0bb
6465No match
6466
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006467/a\Rb/I,bsr=unicode
Elliott Hughes0c26e192019-08-07 12:24:46 -07006468Capture group count = 0
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006469\R matches any Unicode newline
6470First code unit = 'a'
6471Last code unit = 'b'
6472Subject length lower bound = 3
Nick Kralevichf73ff172014-09-27 12:41:49 -07006473 a\rb
6474 0: a\x0db
6475 a\nb
6476 0: a\x0ab
6477 a\r\nb
6478 0: a\x0d\x0ab
6479 a\x85b
6480 0: a\x85b
6481 a\x0bb
6482 0: a\x0bb
Nick Kralevichf73ff172014-09-27 12:41:49 -07006483
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006484/a\R?b/I,bsr=anycrlf
Elliott Hughes0c26e192019-08-07 12:24:46 -07006485Capture group count = 0
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006486\R matches CR, LF, or CRLF
6487First code unit = 'a'
6488Last code unit = 'b'
6489Subject length lower bound = 2
Nick Kralevichf73ff172014-09-27 12:41:49 -07006490 a\rb
6491 0: a\x0db
6492 a\nb
6493 0: a\x0ab
6494 a\r\nb
6495 0: a\x0d\x0ab
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006496\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006497 a\x85b
6498No match
6499 a\x0bb
6500No match
6501
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006502/a\R?b/I,bsr=unicode
Elliott Hughes0c26e192019-08-07 12:24:46 -07006503Capture group count = 0
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006504\R matches any Unicode newline
6505First code unit = 'a'
6506Last code unit = 'b'
6507Subject length lower bound = 2
Nick Kralevichf73ff172014-09-27 12:41:49 -07006508 a\rb
6509 0: a\x0db
6510 a\nb
6511 0: a\x0ab
6512 a\r\nb
6513 0: a\x0d\x0ab
6514 a\x85b
6515 0: a\x85b
6516 a\x0bb
6517 0: a\x0bb
Nick Kralevichf73ff172014-09-27 12:41:49 -07006518
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006519/a\R{2,4}b/I,bsr=anycrlf
Elliott Hughes0c26e192019-08-07 12:24:46 -07006520Capture group count = 0
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006521\R matches CR, LF, or CRLF
6522First code unit = 'a'
6523Last code unit = 'b'
6524Subject length lower bound = 4
Nick Kralevichf73ff172014-09-27 12:41:49 -07006525 a\r\n\nb
6526 0: a\x0d\x0a\x0ab
6527 a\n\r\rb
6528 0: a\x0a\x0d\x0db
6529 a\r\n\r\n\r\n\r\nb
6530 0: a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0ab
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006531\= Expect no match
6532 a\x0b\x0bb
Nick Kralevichf73ff172014-09-27 12:41:49 -07006533No match
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006534 a\x85\x85b
Nick Kralevichf73ff172014-09-27 12:41:49 -07006535No match
6536
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006537/a\R{2,4}b/I,bsr=unicode
Elliott Hughes0c26e192019-08-07 12:24:46 -07006538Capture group count = 0
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006539\R matches any Unicode newline
6540First code unit = 'a'
6541Last code unit = 'b'
6542Subject length lower bound = 4
Nick Kralevichf73ff172014-09-27 12:41:49 -07006543 a\r\rb
6544 0: a\x0d\x0db
6545 a\n\n\nb
6546 0: a\x0a\x0a\x0ab
6547 a\r\n\n\r\rb
6548 0: a\x0d\x0a\x0a\x0d\x0db
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006549 a\x85\x85b
6550 0: a\x85\x85b
6551 a\x0b\x0bb
6552 0: a\x0b\x0bb
6553\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006554 a\r\r\r\r\rb
6555No match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006556
6557/a(?!)|\wbc/
6558 abc
6559 0: abc
6560
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006561/a[]b/alt_bsux,allow_empty_class,match_unset_backref,dupnames
6562\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006563 ab
6564No match
6565
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006566/a[]+b/alt_bsux,allow_empty_class,match_unset_backref,dupnames
6567\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006568 ab
6569No match
6570
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006571/a[]*+b/alt_bsux,allow_empty_class,match_unset_backref,dupnames
6572\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006573 ab
6574No match
6575
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006576/a[^]b/alt_bsux,allow_empty_class,match_unset_backref,dupnames
Nick Kralevichf73ff172014-09-27 12:41:49 -07006577 aXb
6578 0: aXb
6579 a\nb
6580 0: a\x0ab
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006581\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006582 ab
6583No match
6584
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006585/a[^]+b/alt_bsux,allow_empty_class,match_unset_backref,dupnames
Nick Kralevichf73ff172014-09-27 12:41:49 -07006586 aXb
6587 0: aXb
6588 a\nX\nXb
6589 0: a\x0aX\x0aXb
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006590\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006591 ab
6592No match
6593
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006594/X$/dollar_endonly
Nick Kralevichf73ff172014-09-27 12:41:49 -07006595 X
6596 0: X
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006597\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006598 X\n
6599No match
6600
6601/X$/
6602 X
6603 0: X
6604 X\n
6605 0: X
6606
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006607/xyz/auto_callout
Nick Kralevichf73ff172014-09-27 12:41:49 -07006608 xyz
6609--->xyz
6610 +0 ^ x
6611 +1 ^^ y
6612 +2 ^ ^ z
Elliott Hughes9bc971b2018-07-27 13:23:14 -07006613 +3 ^ ^ End of pattern
Nick Kralevichf73ff172014-09-27 12:41:49 -07006614 0: xyz
6615 abcxyz
6616--->abcxyz
6617 +0 ^ x
6618 +1 ^^ y
6619 +2 ^ ^ z
Elliott Hughes9bc971b2018-07-27 13:23:14 -07006620 +3 ^ ^ End of pattern
Nick Kralevichf73ff172014-09-27 12:41:49 -07006621 0: xyz
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006622\= Expect no match
6623 abc
6624No match
6625 abcxypqr
6626No match
6627
6628/xyz/auto_callout,no_start_optimize
6629 abcxyz
Nick Kralevichf73ff172014-09-27 12:41:49 -07006630--->abcxyz
6631 +0 ^ x
6632 +0 ^ x
6633 +0 ^ x
6634 +0 ^ x
6635 +1 ^^ y
6636 +2 ^ ^ z
Elliott Hughes9bc971b2018-07-27 13:23:14 -07006637 +3 ^ ^ End of pattern
Nick Kralevichf73ff172014-09-27 12:41:49 -07006638 0: xyz
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006639\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006640 abc
Nick Kralevichf73ff172014-09-27 12:41:49 -07006641--->abc
6642 +0 ^ x
6643 +0 ^ x
6644 +0 ^ x
6645 +0 ^ x
6646No match
6647 abcxypqr
Nick Kralevichf73ff172014-09-27 12:41:49 -07006648--->abcxypqr
6649 +0 ^ x
6650 +0 ^ x
6651 +0 ^ x
6652 +0 ^ x
6653 +1 ^^ y
6654 +2 ^ ^ z
6655 +0 ^ x
6656 +0 ^ x
6657 +0 ^ x
6658 +0 ^ x
6659 +0 ^ x
6660No match
6661
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006662/(*NO_START_OPT)xyz/auto_callout
Nick Kralevichf73ff172014-09-27 12:41:49 -07006663 abcxyz
6664--->abcxyz
6665+15 ^ x
6666+15 ^ x
6667+15 ^ x
6668+15 ^ x
6669+16 ^^ y
6670+17 ^ ^ z
Elliott Hughes9bc971b2018-07-27 13:23:14 -07006671+18 ^ ^ End of pattern
Nick Kralevichf73ff172014-09-27 12:41:49 -07006672 0: xyz
6673
6674/(?C)ab/
6675 ab
6676--->ab
6677 0 ^ a
6678 0: ab
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006679 ab\=callout_none
Nick Kralevichf73ff172014-09-27 12:41:49 -07006680 0: ab
6681
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006682/ab/auto_callout
Nick Kralevichf73ff172014-09-27 12:41:49 -07006683 ab
6684--->ab
6685 +0 ^ a
6686 +1 ^^ b
Elliott Hughes9bc971b2018-07-27 13:23:14 -07006687 +2 ^ ^ End of pattern
Nick Kralevichf73ff172014-09-27 12:41:49 -07006688 0: ab
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006689 ab\=callout_none
Nick Kralevichf73ff172014-09-27 12:41:49 -07006690 0: ab
6691
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006692/^"((?(?=[a])[^"])|b)*"$/auto_callout
Nick Kralevichf73ff172014-09-27 12:41:49 -07006693 "ab"
6694--->"ab"
6695 +0 ^ ^
6696 +1 ^ "
Elliott Hughes9bc971b2018-07-27 13:23:14 -07006697 +2 ^^ (
Nick Kralevichf73ff172014-09-27 12:41:49 -07006698+21 ^^ "
Elliott Hughes9bc971b2018-07-27 13:23:14 -07006699 +3 ^^ (?
Nick Kralevichf73ff172014-09-27 12:41:49 -07006700+18 ^^ b
Elliott Hughes9bc971b2018-07-27 13:23:14 -07006701 +5 ^^ (?=
Nick Kralevichf73ff172014-09-27 12:41:49 -07006702 +8 ^ [a]
6703+11 ^^ )
6704+12 ^^ [^"]
6705+16 ^ ^ )
6706+17 ^ ^ |
6707+21 ^ ^ "
Elliott Hughes9bc971b2018-07-27 13:23:14 -07006708 +3 ^ ^ (?
Nick Kralevichf73ff172014-09-27 12:41:49 -07006709+18 ^ ^ b
Elliott Hughes9bc971b2018-07-27 13:23:14 -07006710 +5 ^ ^ (?=
Nick Kralevichf73ff172014-09-27 12:41:49 -07006711 +8 ^ [a]
Elliott Hughes9bc971b2018-07-27 13:23:14 -07006712+19 ^ ^ )*
Nick Kralevichf73ff172014-09-27 12:41:49 -07006713+21 ^ ^ "
Elliott Hughes9bc971b2018-07-27 13:23:14 -07006714 +3 ^ ^ (?
Nick Kralevichf73ff172014-09-27 12:41:49 -07006715+18 ^ ^ b
Elliott Hughes9bc971b2018-07-27 13:23:14 -07006716 +5 ^ ^ (?=
Nick Kralevichf73ff172014-09-27 12:41:49 -07006717 +8 ^ [a]
6718+17 ^ ^ |
6719+22 ^ ^ $
Elliott Hughes9bc971b2018-07-27 13:23:14 -07006720+23 ^ ^ End of pattern
Nick Kralevichf73ff172014-09-27 12:41:49 -07006721 0: "ab"
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006722 "ab"\=callout_none
Nick Kralevichf73ff172014-09-27 12:41:49 -07006723 0: "ab"
6724
6725/\d+X|9+Y/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006726 ++++123999\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006727Partial match: 123999
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006728 ++++123999Y\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006729 0: 999Y
6730
6731/Z(*F)/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006732\= Expect no match
6733 Z\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006734No match
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006735 ZA\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006736No match
6737
6738/Z(?!)/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006739\= Expect no match
6740 Z\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006741No match
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006742 ZA\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006743No match
6744
6745/dog(sbody)?/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006746 dogs\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006747 0: dog
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006748 dogs\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07006749Partial match: dogs
6750
6751/dog(sbody)??/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006752 dogs\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006753 0: dog
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006754 dogs\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07006755Partial match: dogs
6756
6757/dog|dogsbody/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006758 dogs\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006759 0: dog
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006760 dogs\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07006761Partial match: dogs
6762
6763/dogsbody|dog/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006764 dogs\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006765 0: dog
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006766 dogs\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07006767Partial match: dogs
6768
6769/Z(*F)Q|ZXY/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006770 Z\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006771Partial match: Z
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006772\= Expect no match
6773 ZA\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006774No match
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006775 X\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006776No match
6777
6778/\bthe cat\b/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006779 the cat\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006780 0: the cat
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006781 the cat\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07006782Partial match: the cat
6783
6784/dog(sbody)?/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006785 dogs\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006786 0: dog
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006787 body\=dfa_restart
Nick Kralevichf73ff172014-09-27 12:41:49 -07006788 0: body
6789
6790/dog(sbody)?/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006791 dogs\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07006792Partial match: dogs
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006793 body\=dfa_restart
Nick Kralevichf73ff172014-09-27 12:41:49 -07006794 0: body
6795
6796/abc/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006797 abc\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006798 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006799 abc\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07006800 0: abc
6801
6802/abc\K123/
6803 xyzabc123pqr
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006804Failed: error -42: pattern contains an item that is not supported for DFA matching
Nick Kralevichf73ff172014-09-27 12:41:49 -07006805
Elliott Hughes2dbd7d22020-06-03 14:32:37 -07006806/(?<=abc)123/allusedtext
Nick Kralevichf73ff172014-09-27 12:41:49 -07006807 xyzabc123pqr
Elliott Hughes2dbd7d22020-06-03 14:32:37 -07006808 0: abc123
6809 <<<
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006810 xyzabc12\=ps
6811Partial match: abc12
6812 <<<
6813 xyzabc12\=ph
6814Partial match: abc12
6815 <<<
Nick Kralevichf73ff172014-09-27 12:41:49 -07006816
Elliott Hughes2dbd7d22020-06-03 14:32:37 -07006817/\babc\b/allusedtext
Nick Kralevichf73ff172014-09-27 12:41:49 -07006818 +++abc+++
Elliott Hughes2dbd7d22020-06-03 14:32:37 -07006819 0: +abc+
6820 < >
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006821 +++ab\=ps
6822Partial match: +ab
6823 <
6824 +++ab\=ph
6825Partial match: +ab
6826 <
Nick Kralevichf73ff172014-09-27 12:41:49 -07006827
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006828/(?=C)/g,aftertext
Nick Kralevichf73ff172014-09-27 12:41:49 -07006829 ABCDECBA
6830 0:
6831 0+ CDECBA
6832 0:
6833 0+ CBA
6834
6835/(abc|def|xyz)/I
Elliott Hughes0c26e192019-08-07 12:24:46 -07006836Capture group count = 1
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006837Starting code units: a d x
Nick Kralevichf73ff172014-09-27 12:41:49 -07006838Subject length lower bound = 3
Nick Kralevichf73ff172014-09-27 12:41:49 -07006839 terhjk;abcdaadsfe
6840 0: abc
6841 the quick xyz brown fox
6842 0: xyz
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006843\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006844 thejk;adlfj aenjl;fda asdfasd ehj;kjxyasiupd
6845No match
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006846
6847/(abc|def|xyz)/I,no_start_optimize
Elliott Hughes0c26e192019-08-07 12:24:46 -07006848Capture group count = 1
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006849Options: no_start_optimize
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006850 terhjk;abcdaadsfe
6851 0: abc
6852 the quick xyz brown fox
6853 0: xyz
6854\= Expect no match
6855 thejk;adlfj aenjl;fda asdfasd ehj;kjxyasiupd
Nick Kralevichf73ff172014-09-27 12:41:49 -07006856No match
6857
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006858/abcd*/aftertext
6859 xxxxabcd\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006860 0: abcd
6861 0+
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006862 xxxxabcd\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07006863Partial match: abcd
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006864 dddxxx\=dfa_restart
Nick Kralevichf73ff172014-09-27 12:41:49 -07006865 0: ddd
6866 0+ xxx
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006867 xxxxabcd\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07006868Partial match: abcd
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006869 xxx\=dfa_restart
Nick Kralevichf73ff172014-09-27 12:41:49 -07006870 0:
6871 0+ xxx
6872
6873/abcd*/i
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006874 xxxxabcd\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006875 0: abcd
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006876 xxxxabcd\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07006877Partial match: abcd
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006878 XXXXABCD\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006879 0: ABCD
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006880 XXXXABCD\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07006881Partial match: ABCD
6882
6883/abc\d*/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006884 xxxxabc1\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006885 0: abc1
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006886 xxxxabc1\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07006887Partial match: abc1
6888
6889/abc[de]*/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006890 xxxxabcde\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006891 0: abcde
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006892 xxxxabcde\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07006893Partial match: abcde
6894
6895/(?:(?1)|B)(A(*F)|C)/
6896 ABCD
6897 0: BC
6898 CCD
6899 0: CC
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006900\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006901 CAD
6902No match
6903
6904/^(?:(?1)|B)(A(*F)|C)/
6905 CCD
6906 0: CC
6907 BCD
6908 0: BC
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006909\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006910 ABCD
6911No match
6912 CAD
6913No match
6914 BAD
6915No match
6916
6917/^(?!a(*SKIP)b)/
6918 ac
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006919Failed: error -42: pattern contains an item that is not supported for DFA matching
Nick Kralevichf73ff172014-09-27 12:41:49 -07006920
6921/^(?=a(*SKIP)b|ac)/
Nick Kralevichf73ff172014-09-27 12:41:49 -07006922 ac
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006923Failed: error -42: pattern contains an item that is not supported for DFA matching
Nick Kralevichf73ff172014-09-27 12:41:49 -07006924
6925/^(?=a(*THEN)b|ac)/
6926 ac
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006927Failed: error -42: pattern contains an item that is not supported for DFA matching
Nick Kralevichf73ff172014-09-27 12:41:49 -07006928
6929/^(?=a(*PRUNE)b)/
6930 ab
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006931Failed: error -42: pattern contains an item that is not supported for DFA matching
Nick Kralevichf73ff172014-09-27 12:41:49 -07006932
6933/^(?(?!a(*SKIP)b))/
6934 ac
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006935Failed: error -42: pattern contains an item that is not supported for DFA matching
Nick Kralevichf73ff172014-09-27 12:41:49 -07006936
Elliott Hughes2dbd7d22020-06-03 14:32:37 -07006937/(?<=abc)def/allusedtext
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006938 abc\=ph
6939Partial match: abc
6940 <<<
Nick Kralevichf73ff172014-09-27 12:41:49 -07006941
6942/abc$/
6943 abc
6944 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006945 abc\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006946 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006947 abc\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07006948Partial match: abc
6949
6950/abc$/m
6951 abc
6952 0: abc
6953 abc\n
6954 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006955 abc\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07006956Partial match: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006957 abc\n\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07006958 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006959 abc\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006960 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006961 abc\n\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006962 0: abc
6963
6964/abc\z/
6965 abc
6966 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006967 abc\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006968 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006969 abc\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07006970Partial match: abc
6971
6972/abc\Z/
6973 abc
6974 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006975 abc\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006976 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006977 abc\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07006978Partial match: abc
6979
6980/abc\b/
6981 abc
6982 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006983 abc\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07006984 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006985 abc\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07006986Partial match: abc
6987
6988/abc\B/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006989 abc\=ps
6990Partial match: abc
6991 abc\=ph
6992Partial match: abc
6993\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006994 abc
6995No match
Nick Kralevichf73ff172014-09-27 12:41:49 -07006996
6997/.+/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01006998 abc\=offset=0
Nick Kralevichf73ff172014-09-27 12:41:49 -07006999 0: abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007000 abc\=offset=1
Nick Kralevichf73ff172014-09-27 12:41:49 -07007001 0: bc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007002 abc\=offset=2
Nick Kralevichf73ff172014-09-27 12:41:49 -07007003 0: c
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007004\= Bad offsets
7005 abc\=offset=4
7006Failed: error -33: bad offset value
7007 abc\=offset=-4
7008** Invalid value in 'offset=-4'
7009\= Expect no match
7010 abc\=offset=3
Nick Kralevichf73ff172014-09-27 12:41:49 -07007011No match
Nick Kralevichf73ff172014-09-27 12:41:49 -07007012
7013/^(?:a)++\w/
7014 aaaab
7015 0: aaaab
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007016\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07007017 aaaa
7018No match
7019 bbb
7020No match
7021
7022/^(?:aa|(?:a)++\w)/
7023 aaaab
7024 0: aaaab
7025 1: aa
7026 aaaa
7027 0: aa
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007028\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07007029 bbb
7030No match
7031
7032/^(?:a)*+\w/
7033 aaaab
7034 0: aaaab
7035 bbb
7036 0: b
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007037\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07007038 aaaa
7039No match
7040
7041/^(a)++\w/
7042 aaaab
7043 0: aaaab
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007044\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07007045 aaaa
7046No match
7047 bbb
7048No match
7049
7050/^(a|)++\w/
7051 aaaab
7052 0: aaaab
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007053\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07007054 aaaa
7055No match
7056 bbb
7057No match
7058
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007059/(?=abc){3}abc/aftertext
Nick Kralevichf73ff172014-09-27 12:41:49 -07007060 abcabcabc
7061 0: abc
7062 0+ abcabc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007063\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07007064 xyz
7065No match
7066
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007067/(?=abc)+abc/aftertext
Nick Kralevichf73ff172014-09-27 12:41:49 -07007068 abcabcabc
7069 0: abc
7070 0+ abcabc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007071\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07007072 xyz
7073No match
7074
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007075/(?=abc)++abc/aftertext
Nick Kralevichf73ff172014-09-27 12:41:49 -07007076 abcabcabc
7077 0: abc
7078 0+ abcabc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007079\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07007080 xyz
7081No match
7082
7083/(?=abc){0}xyz/
7084 xyz
7085 0: xyz
7086
7087/(?=abc){1}xyz/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007088\= Expect no match
Nick Kralevichf73ff172014-09-27 12:41:49 -07007089 xyz
7090No match
7091
7092/(?=(a))?./
7093 ab
7094 0: a
7095 bc
7096 0: b
7097
7098/(?=(a))??./
7099 ab
7100 0: a
7101 bc
7102 0: b
7103
7104/^(?=(a)){0}b(?1)/
7105 backgammon
7106 0: ba
7107
7108/^(?=(?1))?[az]([abc])d/
7109 abd
7110 0: abd
7111 zcdxx
7112 0: zcd
7113
7114/^(?!a){0}\w+/
7115 aaaaa
7116 0: aaaaa
7117
7118/(?<=(abc))?xyz/
7119 abcxyz
7120 0: xyz
7121 pqrxyz
7122 0: xyz
7123
7124/((?2))((?1))/
7125 abc
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007126Failed: error -52: nested recursion at the same subject position
Nick Kralevichf73ff172014-09-27 12:41:49 -07007127
7128/(?(R)a+|(?R)b)/
7129 aaaabcde
7130 0: aaaab
7131
7132/(?(R)a+|((?R))b)/
7133 aaaabcde
7134 0: aaaab
7135
7136/((?(R)a+|(?1)b))/
7137 aaaabcde
7138 0: aaaab
7139
Elliott Hughes9bc971b2018-07-27 13:23:14 -07007140/((?(R2)a+|(?1)b))()/
Nick Kralevichf73ff172014-09-27 12:41:49 -07007141 aaaabcde
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007142Failed: error -40: backreference condition or recursion test is not supported for DFA matching
Nick Kralevichf73ff172014-09-27 12:41:49 -07007143
7144/(?(R)a*(?1)|((?R))b)/
7145 aaaabcde
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007146Failed: error -52: nested recursion at the same subject position
Nick Kralevichf73ff172014-09-27 12:41:49 -07007147
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007148/(a+)/no_auto_possess
7149 aaaa\=ovector=3
Nick Kralevichf73ff172014-09-27 12:41:49 -07007150Matched, but offsets vector is too small to show all matches
7151 0: aaaa
7152 1: aaa
7153 2: aa
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007154 aaaa\=ovector=4
Nick Kralevichf73ff172014-09-27 12:41:49 -07007155 0: aaaa
7156 1: aaa
7157 2: aa
7158 3: a
7159
Nick Kralevichf73ff172014-09-27 12:41:49 -07007160/^\R/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007161 \r\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07007162 0: \x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007163 \r\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07007164Partial match: \x0d
7165
7166/^\R{2,3}x/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007167 \r\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07007168Partial match: \x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007169 \r\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07007170Partial match: \x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007171 \r\r\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07007172Partial match: \x0d\x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007173 \r\r\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07007174Partial match: \x0d\x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007175 \r\r\r\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07007176Partial match: \x0d\x0d\x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007177 \r\r\r\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07007178Partial match: \x0d\x0d\x0d
7179 \r\rx
7180 0: \x0d\x0dx
7181 \r\r\rx
7182 0: \x0d\x0d\x0dx
7183
7184/^\R{2,3}?x/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007185 \r\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07007186Partial match: \x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007187 \r\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07007188Partial match: \x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007189 \r\r\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07007190Partial match: \x0d\x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007191 \r\r\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07007192Partial match: \x0d\x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007193 \r\r\r\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07007194Partial match: \x0d\x0d\x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007195 \r\r\r\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07007196Partial match: \x0d\x0d\x0d
7197 \r\rx
7198 0: \x0d\x0dx
7199 \r\r\rx
7200 0: \x0d\x0d\x0dx
7201
7202/^\R?x/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007203 \r\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07007204Partial match: \x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007205 \r\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07007206Partial match: \x0d
7207 x
7208 0: x
7209 \rx
7210 0: \x0dx
7211
7212/^\R+x/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007213 \r\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07007214Partial match: \x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007215 \r\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07007216Partial match: \x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007217 \r\n\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07007218Partial match: \x0d\x0a
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007219 \r\n\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07007220Partial match: \x0d\x0a
7221 \rx
7222 0: \x0dx
7223
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007224/^a$/newline=crlf
7225 a\r\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07007226Partial match: a\x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007227 a\r\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07007228Partial match: a\x0d
7229
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007230/^a$/m,newline=crlf
7231 a\r\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07007232Partial match: a\x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007233 a\r\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07007234Partial match: a\x0d
7235
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007236/^(a$|a\r)/newline=crlf
7237 a\r\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07007238 0: a\x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007239 a\r\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07007240Partial match: a\x0d
7241
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007242/^(a$|a\r)/m,newline=crlf
7243 a\r\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07007244 0: a\x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007245 a\r\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07007246Partial match: a\x0d
7247
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007248/./newline=crlf
7249 \r\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07007250 0: \x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007251 \r\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07007252Partial match: \x0d
7253
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007254/.{2,3}/newline=crlf
7255 \r\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07007256Partial match: \x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007257 \r\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07007258Partial match: \x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007259 \r\r\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07007260 0: \x0d\x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007261 \r\r\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07007262Partial match: \x0d\x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007263 \r\r\r\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07007264 0: \x0d\x0d\x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007265 \r\r\r\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07007266Partial match: \x0d\x0d\x0d
7267
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007268/.{2,3}?/newline=crlf
7269 \r\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07007270Partial match: \x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007271 \r\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07007272Partial match: \x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007273 \r\r\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07007274 0: \x0d\x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007275 \r\r\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07007276Partial match: \x0d\x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007277 \r\r\r\=ps
Nick Kralevichf73ff172014-09-27 12:41:49 -07007278 0: \x0d\x0d\x0d
7279 1: \x0d\x0d
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007280 \r\r\r\=ph
Nick Kralevichf73ff172014-09-27 12:41:49 -07007281Partial match: \x0d\x0d\x0d
7282
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007283# Test simple validity check for restarts
Nick Kralevichf73ff172014-09-27 12:41:49 -07007284
7285/abcdef/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007286 abc\=dfa_restart
7287Failed: error -38: invalid data in workspace for DFA restart
Nick Kralevichf73ff172014-09-27 12:41:49 -07007288
7289/<H((?(?!<H|F>)(.)|(?R))++)*F>/
7290 text <H more text <H texting more hexA0-"\xA0" hex above 7F-"\xBC" F> text xxxxx <H text F> text F> text2 <H text sample F> more text.
7291 0: <H more text <H texting more hexA0-"\xa0" hex above 7F-"\xbc" F> text xxxxx <H text F> text F>
7292
7293/^(?>.{4})abc|^\w\w.xabcd/
7294 xxxxabcd
7295 0: xxxxabcd
7296 1: xxxxabc
7297 xx\xa0xabcd
7298 0: xx\xa0xabcd
7299 1: xx\xa0xabc
7300
7301/^(.{4}){2}+abc|^\w\w.x\w\w\w\wabcd/
7302 xxxxxxxxabcd
7303 0: xxxxxxxxabcd
7304 1: xxxxxxxxabc
7305 xx\xa0xxxxxabcd
7306 0: xx\xa0xxxxxabcd
7307 1: xx\xa0xxxxxabc
7308
7309/abcd/
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007310 abcd\=ovector=0
7311 0: abcd
Nick Kralevichf73ff172014-09-27 12:41:49 -07007312
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007313# These tests show up auto-possessification
Nick Kralevichf73ff172014-09-27 12:41:49 -07007314
7315/[ab]*/
7316 aaaa
7317 0: aaaa
7318
7319/[ab]*?/
7320 aaaa
7321 0: aaaa
7322 1: aaa
7323 2: aa
7324 3: a
7325 4:
7326
7327/[ab]?/
7328 aaaa
7329 0: a
7330
7331/[ab]??/
7332 aaaa
7333 0: a
7334 1:
7335
7336/[ab]+/
7337 aaaa
7338 0: aaaa
7339
7340/[ab]+?/
7341 aaaa
7342 0: aaaa
7343 1: aaa
7344 2: aa
7345 3: a
7346
7347/[ab]{2,3}/
7348 aaaa
7349 0: aaa
7350
7351/[ab]{2,3}?/
7352 aaaa
7353 0: aaa
7354 1: aa
7355
7356/[ab]{2,}/
7357 aaaa
7358 0: aaaa
7359
7360/[ab]{2,}?/
7361 aaaa
7362 0: aaaa
7363 1: aaa
7364 2: aa
7365
7366'\A(?:[^\"]++|\"(?:[^\"]*+|\"\")*+\")++'
7367 NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
7368 0: NON QUOTED "QUOT""ED" AFTER
7369
7370'\A(?:[^\"]++|\"(?:[^\"]++|\"\")*+\")++'
7371 NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
7372 0: NON QUOTED "QUOT""ED" AFTER
7373
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007374/abc(?=xyz)/allusedtext
7375 abcxyzpqr
7376 0: abcxyz
7377 >>>
7378 abcxyzpqr\=aftertext
7379 0: abcxyz
7380 >>>
7381 0+ xyzpqr
7382
7383/(?<=pqr)abc(?=xyz)/allusedtext
7384 xyzpqrabcxyzpqr
7385 0: pqrabcxyz
7386 <<< >>>
7387 xyzpqrabcxyzpqr\=aftertext
7388 0: pqrabcxyz
7389 <<< >>>
7390 0+ xyzpqr
7391
7392/a\b/
7393 a.\=allusedtext
7394 0: a.
7395 >
7396 a\=allusedtext
7397 0: a
7398
7399/abc(?=abcde)(?=ab)/allusedtext
7400 abcabcdefg
7401 0: abcabcde
7402 >>>>>
7403
7404/a*?b*?/
7405 ab
7406 0: ab
7407 1: a
7408 2:
7409
7410/(*NOTEMPTY)a*?b*?/
7411 ab
7412 0: ab
7413 1: a
7414 ba
7415 0: b
7416 cb
7417 0: b
7418
7419/(*NOTEMPTY_ATSTART)a*?b*?/aftertext
7420 ab
7421 0: ab
7422 0+
7423 1: a
7424 cdab
7425 0:
7426 0+ dab
7427
7428/(a)(b)|(c)/
7429 XcX\=ovector=2,get=1,get=2,get=3,get=4,getall
7430 0: c
7431Get substring 1 failed (-55): requested value is not set
7432Get substring 2 failed (-54): requested value is not available
7433Get substring 3 failed (-54): requested value is not available
7434Get substring 4 failed (-54): requested value is not available
7435 0L c
7436
7437/(?<A>aa)/
7438 aa\=get=A
7439 0: aa
7440Get substring 'A' failed (-41): function is not supported for DFA matching
7441 aa\=copy=A
7442 0: aa
7443Copy substring 'A' failed (-41): function is not supported for DFA matching
7444
7445/a+/no_auto_possess
7446 a\=ovector=2,get=1,get=2,getall
7447 0: a
7448Get substring 1 failed (-55): requested value is not set
7449Get substring 2 failed (-54): requested value is not available
7450 0L a
7451 aaa\=ovector=2,get=1,get=2,getall
7452Matched, but offsets vector is too small to show all matches
7453 0: aaa
7454 1: aa
7455 1G aa (2)
7456Get substring 2 failed (-54): requested value is not available
7457 0L aaa
7458 1L aa
7459
7460/a(b)c(d)/
7461 abc\=ph,copy=0,copy=1,getall
7462Partial match: abc
7463 0C abc (3)
7464Copy substring 1 failed (-2): partial match
7465get substring list failed (-2): partial match
7466
7467/ab(?C" any text with spaces ")cde/B
7468------------------------------------------------------------------
7469 Bra
7470 ab
7471 CalloutStr " any text with spaces " 6 30 1
7472 cde
7473 Ket
7474 End
7475------------------------------------------------------------------
7476 abcde
7477Callout (6): " any text with spaces "
7478--->abcde
7479 ^ ^ c
7480 0: abcde
7481 12abcde
7482Callout (6): " any text with spaces "
7483--->12abcde
7484 ^ ^ c
7485 0: abcde
7486
7487/^a(b)c(?C1)def/
7488 abcdef
7489--->abcdef
7490 1 ^ ^ d
7491 0: abcdef
7492
7493/^a(b)c(?C"AB")def/
7494 abcdef
7495Callout (10): "AB"
7496--->abcdef
7497 ^ ^ d
7498 0: abcdef
7499
7500/^a(b)c(?C1)def/
7501 abcdef\=callout_capture
7502Callout 1: last capture = 0
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007503--->abcdef
7504 ^ ^ d
7505 0: abcdef
7506
7507/^a(b)c(?C{AB})def/B
7508------------------------------------------------------------------
7509 Bra
7510 ^
7511 a
7512 CBra 1
7513 b
7514 Ket
7515 c
7516 CalloutStr {AB} 10 14 1
7517 def
7518 Ket
7519 End
7520------------------------------------------------------------------
7521 abcdef\=callout_capture
7522Callout (10): {AB} last capture = 0
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007523--->abcdef
7524 ^ ^ d
7525 0: abcdef
7526
7527/^(?(?C25)(?=abc)abcd|xyz)/B
7528------------------------------------------------------------------
7529 Bra
7530 ^
7531 Cond
Elliott Hughes9bc971b2018-07-27 13:23:14 -07007532 Callout 25 9 3
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007533 Assert
7534 abc
7535 Ket
7536 abcd
7537 Alt
7538 xyz
7539 Ket
7540 Ket
7541 End
7542------------------------------------------------------------------
7543 abcdefg
7544--->abcdefg
Elliott Hughes9bc971b2018-07-27 13:23:14 -07007545 25 ^ (?=
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007546 0: abcd
7547 xyz123
7548--->xyz123
Elliott Hughes9bc971b2018-07-27 13:23:14 -07007549 25 ^ (?=
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007550 0: xyz
7551
7552/^(?(?C$abc$)(?=abc)abcd|xyz)/B
7553------------------------------------------------------------------
7554 Bra
7555 ^
7556 Cond
Elliott Hughes9bc971b2018-07-27 13:23:14 -07007557 CalloutStr $abc$ 7 12 3
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007558 Assert
7559 abc
7560 Ket
7561 abcd
7562 Alt
7563 xyz
7564 Ket
7565 Ket
7566 End
7567------------------------------------------------------------------
7568 abcdefg
7569Callout (7): $abc$
7570--->abcdefg
Elliott Hughes9bc971b2018-07-27 13:23:14 -07007571 ^ (?=
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007572 0: abcd
7573 xyz123
7574Callout (7): $abc$
7575--->xyz123
Elliott Hughes9bc971b2018-07-27 13:23:14 -07007576 ^ (?=
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007577 0: xyz
7578
7579/^ab(?C'first')cd(?C"second")ef/
7580 abcdefg
7581Callout (7): 'first'
7582--->abcdefg
7583 ^ ^ c
7584Callout (20): "second"
7585--->abcdefg
7586 ^ ^ e
7587 0: abcdef
7588
7589/(?:a(?C`code`)){3}X/
7590 aaaXY
7591Callout (8): `code`
7592--->aaaXY
Elliott Hughes9bc971b2018-07-27 13:23:14 -07007593 ^^ ){3}
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007594Callout (8): `code`
7595--->aaaXY
Elliott Hughes9bc971b2018-07-27 13:23:14 -07007596 ^ ^ ){3}
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007597Callout (8): `code`
7598--->aaaXY
Elliott Hughes9bc971b2018-07-27 13:23:14 -07007599 ^ ^ ){3}
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007600 0: aaaX
7601
7602# Binary zero in callout string
Janis Danisevskis8b979b22016-08-15 16:09:16 +01007603/"a(?C'x" 00 "z')b"/hex
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007604 abcdefgh
7605Callout (5): 'x\x00z'
7606--->abcdefgh
7607 ^^ b
7608 0: ab
7609
Elliott Hughes8366e8b2015-08-14 20:48:15 -07007610/(?(?!)a|b)/
7611 bbb
7612 0: b
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007613\= Expect no match
Elliott Hughes8366e8b2015-08-14 20:48:15 -07007614 aaa
7615No match
7616
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007617/^/gm
7618 \n\n\n
7619 0:
7620 0:
7621 0:
7622
7623/^/gm,alt_circumflex
7624 \n\n\n
7625 0:
7626 0:
7627 0:
7628 0:
7629
7630/abc/use_offset_limit
7631 1234abcde\=offset_limit=100
7632 0: abc
7633 1234abcde\=offset_limit=9
7634 0: abc
7635 1234abcde\=offset_limit=4
7636 0: abc
7637 1234abcde\=offset_limit=4,offset=4
7638 0: abc
7639\= Expect no match
7640 1234abcde\=offset_limit=4,offset=5
7641No match
7642 1234abcde\=offset_limit=3
7643No match
7644
7645/(?<=abc)/use_offset_limit
7646 1234abc\=offset_limit=7
7647 0:
7648\= Expect no match
7649 1234abc\=offset_limit=6
7650No match
7651
7652/abcd/null_context
7653 abcd\=null_context
7654 0: abcd
7655
Janis Danisevskis8b979b22016-08-15 16:09:16 +01007656/()()a+/no_auto_possess
Elliott Hughes9bc971b2018-07-27 13:23:14 -07007657 aaa\=allcaptures
Janis Danisevskis8b979b22016-08-15 16:09:16 +01007658** Ignored after DFA matching: allcaptures
7659 0: aaa
7660 1: aa
7661 2: a
Elliott Hughes9bc971b2018-07-27 13:23:14 -07007662 a\=allcaptures
Janis Danisevskis8b979b22016-08-15 16:09:16 +01007663** Ignored after DFA matching: allcaptures
7664 0: a
7665
Elliott Hughes9bc971b2018-07-27 13:23:14 -07007666/(*LIMIT_DEPTH=100)^((.)(?1)|.)$/
7667\= Expect depth limit exceeded
7668 a[00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]
7669Failed: error -53: matching depth limit exceeded
7670
Elliott Hughes653c2102019-01-09 15:41:36 -08007671/(*LIMIT_HEAP=0)^((.)(?1)|.)$/
7672\= Expect heap limit exceeded
7673 a[00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]
7674Failed: error -63: heap limit exceeded
7675
7676/(*LIMIT_HEAP=50000)^((.)(?1)|.)$/
7677\= Expect success
7678 a[00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]
7679 0: a[00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]
7680
Elliott Hughes9bc971b2018-07-27 13:23:14 -07007681/(02-)?[0-9]{3}-[0-9]{3}/
7682 02-123-123
7683 0: 02-123-123
7684
7685/^(a(?2))(b)(?1)/
7686 abbab\=find_limits
Elliott Hughes653c2102019-01-09 15:41:36 -08007687Minimum heap limit = 0
Elliott Hughes9bc971b2018-07-27 13:23:14 -07007688Minimum match limit = 4
7689Minimum depth limit = 2
7690 0: abbab
7691
7692/abc/endanchored
7693 xyzabc
7694 0: abc
7695\= Expect no match
7696 xyzabcdef
7697No match
7698\= Expect error
7699 xyzabc\=ph
7700Failed: error -34: bad option value
7701
7702/abc/
7703 xyzabc\=endanchored
7704 0: abc
7705\= Expect no match
7706 xyzabcdef\=endanchored
7707No match
7708\= Expect error
7709 xyzabc\=ps,endanchored
7710Failed: error -34: bad option value
7711
7712/abc|bcd/endanchored
7713 xyzabcd
7714 0: bcd
7715\= Expect no match
7716 xyzabcdef
7717No match
7718
7719/(*NUL)^.*/
7720 a\nb\x00ccc
7721 0: a\x0ab
7722
7723/(*NUL)^.*/s
7724 a\nb\x00ccc
7725 0: a\x0ab\x00ccc
7726
7727/^x/m,newline=nul
7728 ab\x00xy
7729 0: x
7730
7731/'#comment' 0d 0a 00 '^x\' 0a 'y'/x,newline=nul,hex
7732 x\nyz
7733 0: x\x0ay
7734
7735/(*NUL)^X\NY/
7736 X\nY
7737 0: X\x0aY
7738 X\rY
7739 0: X\x0dY
7740\= Expect no match
7741 X\x00Y
7742No match
7743
7744/(?<=abc|)/
7745 abcde\=aftertext
7746 0:
7747 0+ abcde
7748
7749/(?<=|abc)/
7750 abcde\=aftertext
7751 0:
7752 0+ abcde
7753
7754/(?<=abc|)/endanchored
7755 abcde\=aftertext
7756 0:
7757 0+
7758
7759/(?<=|abc)/endanchored
7760 abcde\=aftertext
7761 0:
7762 0+
7763
Elliott Hughes653c2102019-01-09 15:41:36 -08007764/(*LIMIT_MATCH=100).*(?![|H]?.*(?![|H]?););.*(?![|H]?.*(?![|H]?););\x00\x00\x00\x00\x00\x00\x00(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?![|);)?.*(![|H]?);)?.*(?![|H]?);)?.*(?![|H]?);)?.*(?![|H]););![|H]?););[|H]?);|H]?);)\x00\x00\x00 \x00\x00\x00H]?););?![|H]?);)?.*(?![|H]?););[||H]?);)?.*(?![|H]?););[|H]?);(?![|H]?););![|H]?););[|H]?);|H]?);)?.*(?![|H]?););;[\x00\x00\x00\x00\x00\x00\x00![|H]?););![|H]?););[|H]?);|H]?);)?.*(?![|H]?););/no_dotstar_anchor
7765\= Expect limit exceeded
7766.*(?![|H]?.*(?![|H]?););.*(?![|H]?.*(?![|H]?););\x00\x00\x00\x00\x00\x00\x00(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?!(?![|);)?.*(![|H]?);)?.*(?![|H]?);)?.*(?![|H]?);)?.*(?![|H]););![|H]?););[|H]?);|H]?);)\x00\x00\x00 \x00\x00\x00H]?););?![|H]?);)?.*(?![|H]?););[||H]?);)?.*(?![|H]?););[|H]?);(?![|H]?););![|H]?););[|H]?);|H]?);)?.*(?![|H]?););;[\x00\x00\x00\x00\x00\x00\x00![|H]?););![|H]?););[|H]?);|H]?);)?.*(?![|H]?););
Elliott Hughes9bc971b2018-07-27 13:23:14 -07007767Failed: error -47: match limit exceeded
7768
7769/\n/firstline
7770 xyz\nabc
7771 0: \x0a
7772
7773/\nabc/firstline
7774 xyz\nabc
7775 0: \x0aabc
7776
7777/\x{0a}abc/firstline,newline=crlf
7778\= Expect no match
7779 xyz\r\nabc
7780No match
7781
7782/[abc]/firstline
7783\= Expect no match
7784 \na
7785No match
7786
Elliott Hughes0c26e192019-08-07 12:24:46 -07007787/foobar/
7788 the foobar thing\=copy_matched_subject
7789 0: foobar
7790 the foobar thing\=copy_matched_subject,zero_terminate
7791 0: foobar
7792
7793/foobar/g
7794 the foobar thing foobar again\=copy_matched_subject
7795 0: foobar
7796 0: foobar
7797
7798/(?(VERSION>=0)^B0W)/
7799 B0W-W0W
7800 0: B0W
7801\= Expect no match
7802 0
7803No match
7804
7805/(?(VERSION>=1000)^B0W|W0W)/
7806 B0W-W0W
7807 0: W0W
7808\= Expect no match
7809 0
7810No match
7811
Elliott Hughes2dbd7d22020-06-03 14:32:37 -07007812/(?<=pqr)abc(?=xyz)/
7813 123pqrabcxy\=ps,allusedtext
7814Partial match: pqrabcxy
7815 <<<
7816 123pqrabcxyz\=ps,allusedtext
7817 0: pqrabcxyz
7818 <<< >>>
7819
7820/(?>a+b)/
7821 aaaa\=ps
7822Partial match: aaaa
7823 aaaab\=ps
7824 0: aaaab
7825
7826/(abc)(?1)/
7827 abca\=ps
7828Partial match: abca
7829 abcabc\=ps
7830 0: abcabc
7831
7832/(?(?=abc).*|Z)/
7833 ab\=ps
7834Partial match: ab
7835 abcxyz\=ps
7836 0: abcxyz
7837
7838/(abc)++x/
7839 abcab\=ps
7840Partial match: abcab
7841 abc\=ps
7842Partial match: abc
7843 ab\=ps
7844Partial match: ab
7845 abcx
7846 0: abcx
7847
7848/\z/
7849 abc\=ph
7850Partial match:
7851 abc\=ps
7852 0:
7853
7854/\Z/
7855 abc\=ph
7856Partial match:
7857 abc\=ps
7858 0:
7859 abc\n\=ph
7860Partial match: \x0a
7861 abc\n\=ps
7862 0:
7863
7864/c*+(?<=[bc])/
7865 abc\=ph
7866Partial match: c
7867 ab\=ph
7868Partial match:
7869 abc\=ps
7870 0: c
7871 ab\=ps
7872 0:
7873
7874/c++(?<=[bc])/
7875 abc\=ph
7876Partial match: c
7877 ab\=ph
7878Partial match:
7879
7880/(?<=(?=.(?<=x)))/
7881 abx
7882 0:
7883 ab\=ph
7884Partial match:
7885 bxyz
7886 0:
7887 xyz
7888 0:
7889
7890/(?![ab]).*/
7891 ab\=ph
7892Partial match:
7893
7894/c*+/
7895 ab\=ph,offset=2
7896Partial match:
7897
Janis Danisevskis53e448c2016-03-31 13:35:25 +01007898# End of testinput6