1 |
/-- These tests are for the Perl >= 5.10 features that PCRE supports. --/
|
2 |
|
3 |
/\H\h\V\v/
|
4 |
X X\x0a
|
5 |
X\x09X\x0b
|
6 |
** Failers
|
7 |
\xa0 X\x0a
|
8 |
|
9 |
/\H*\h+\V?\v{3,4}/
|
10 |
\x09\x20\xa0X\x0a\x0b\x0c\x0d\x0a
|
11 |
\x09\x20\xa0\x0a\x0b\x0c\x0d\x0a
|
12 |
\x09\x20\xa0\x0a\x0b\x0c
|
13 |
** Failers
|
14 |
\x09\x20\xa0\x0a\x0b
|
15 |
|
16 |
/\H{3,4}/
|
17 |
XY ABCDE
|
18 |
XY PQR ST
|
19 |
|
20 |
/.\h{3,4}./
|
21 |
XY AB PQRS
|
22 |
|
23 |
/\h*X\h?\H+Y\H?Z/
|
24 |
>XNNNYZ
|
25 |
> X NYQZ
|
26 |
** Failers
|
27 |
>XYZ
|
28 |
> X NY Z
|
29 |
|
30 |
/\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c/
|
31 |
>XY\x0aZ\x0aA\x0bNN\x0c
|
32 |
>\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
|
33 |
|
34 |
/(foo)\Kbar/
|
35 |
foobar
|
36 |
|
37 |
/(foo)(\Kbar|baz)/
|
38 |
foobar
|
39 |
foobaz
|
40 |
|
41 |
/(foo\Kbar)baz/
|
42 |
foobarbaz
|
43 |
|
44 |
/abc\K|def\K/g+
|
45 |
Xabcdefghi
|
46 |
|
47 |
/ab\Kc|de\Kf/g+
|
48 |
Xabcdefghi
|
49 |
|
50 |
/(?=C)/g+
|
51 |
ABCDECBA
|
52 |
|
53 |
/^abc\K/+
|
54 |
abcdef
|
55 |
** Failers
|
56 |
defabcxyz
|
57 |
|
58 |
/^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-02}Z/
|
59 |
ababababbbabZXXXX
|
60 |
|
61 |
/(?<A>tom|bon)-\g{A}/
|
62 |
tom-tom
|
63 |
bon-bon
|
64 |
|
65 |
/(^(a|b\g{-1}))/
|
66 |
bacxxx
|
67 |
|
68 |
/(?|(abc)|(xyz))\1/
|
69 |
abcabc
|
70 |
xyzxyz
|
71 |
** Failers
|
72 |
abcxyz
|
73 |
xyzabc
|
74 |
|
75 |
/(?|(abc)|(xyz))(?1)/
|
76 |
abcabc
|
77 |
xyzabc
|
78 |
** Failers
|
79 |
xyzxyz
|
80 |
|
81 |
/^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/
|
82 |
XYabcdY
|
83 |
|
84 |
/^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/
|
85 |
XYabcdY
|
86 |
|
87 |
/^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/
|
88 |
XYabcdY
|
89 |
|
90 |
/(?'abc'\w+):\k<abc>{2}/
|
91 |
a:aaxyz
|
92 |
ab:ababxyz
|
93 |
** Failers
|
94 |
a:axyz
|
95 |
ab:abxyz
|
96 |
|
97 |
/(?'abc'\w+):\g{abc}{2}/
|
98 |
a:aaxyz
|
99 |
ab:ababxyz
|
100 |
** Failers
|
101 |
a:axyz
|
102 |
ab:abxyz
|
103 |
|
104 |
/^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)/x
|
105 |
abd
|
106 |
ce
|
107 |
|
108 |
/^(a.)\g-1Z/
|
109 |
aXaXZ
|
110 |
|
111 |
/^(a.)\g{-1}Z/
|
112 |
aXaXZ
|
113 |
|
114 |
/^(?(DEFINE) (?<A> a) (?<B> b) ) (?&A) (?&B) /x
|
115 |
abcd
|
116 |
|
117 |
/(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT))
|
118 |
(?(DEFINE)
|
119 |
(?<NAME_PAT>[a-z]+)
|
120 |
(?<ADDRESS_PAT>\d+)
|
121 |
)/x
|
122 |
metcalfe 33
|
123 |
|
124 |
/(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}/
|
125 |
1.2.3.4
|
126 |
131.111.10.206
|
127 |
10.0.0.0
|
128 |
** Failers
|
129 |
10.6
|
130 |
455.3.4.5
|
131 |
|
132 |
/\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))/
|
133 |
1.2.3.4
|
134 |
131.111.10.206
|
135 |
10.0.0.0
|
136 |
** Failers
|
137 |
10.6
|
138 |
455.3.4.5
|
139 |
|
140 |
/^(\w++|\s++)*$/
|
141 |
now is the time for all good men to come to the aid of the party
|
142 |
*** Failers
|
143 |
this is not a line with only words and spaces!
|
144 |
|
145 |
/(\d++)(\w)/
|
146 |
12345a
|
147 |
*** Failers
|
148 |
12345+
|
149 |
|
150 |
/a++b/
|
151 |
aaab
|
152 |
|
153 |
/(a++b)/
|
154 |
aaab
|
155 |
|
156 |
/(a++)b/
|
157 |
aaab
|
158 |
|
159 |
/([^()]++|\([^()]*\))+/
|
160 |
((abc(ade)ufh()()x
|
161 |
|
162 |
/\(([^()]++|\([^()]+\))+\)/
|
163 |
(abc)
|
164 |
(abc(def)xyz)
|
165 |
*** Failers
|
166 |
((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
167 |
|
168 |
/^([^()]|\((?1)*\))*$/
|
169 |
abc
|
170 |
a(b)c
|
171 |
a(b(c))d
|
172 |
*** Failers)
|
173 |
a(b(c)d
|
174 |
|
175 |
/^>abc>([^()]|\((?1)*\))*<xyz<$/
|
176 |
>abc>123<xyz<
|
177 |
>abc>1(2)3<xyz<
|
178 |
>abc>(1(2)3)<xyz<
|
179 |
|
180 |
/^(?:((.)(?1)\2|)|((.)(?3)\4|.))$/i
|
181 |
1221
|
182 |
Satanoscillatemymetallicsonatas
|
183 |
AmanaplanacanalPanama
|
184 |
AblewasIereIsawElba
|
185 |
*** Failers
|
186 |
Thequickbrownfox
|
187 |
|
188 |
/^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/
|
189 |
12
|
190 |
(((2+2)*-3)-7)
|
191 |
-12
|
192 |
*** Failers
|
193 |
((2+2)*-3)-7)
|
194 |
|
195 |
/^(x(y|(?1){2})z)/
|
196 |
xyz
|
197 |
xxyzxyzz
|
198 |
*** Failers
|
199 |
xxyzz
|
200 |
xxyzxyzxyzz
|
201 |
|
202 |
/((< (?: (?(R) \d++ | [^<>]*+) | (?2)) * >))/x
|
203 |
<>
|
204 |
<abcd>
|
205 |
<abc <123> hij>
|
206 |
<abc <def> hij>
|
207 |
<abc<>def>
|
208 |
<abc<>
|
209 |
*** Failers
|
210 |
<abc
|
211 |
|
212 |
/^a+(*FAIL)/
|
213 |
aaaaaa
|
214 |
|
215 |
/a+b?c+(*FAIL)/
|
216 |
aaabccc
|
217 |
|
218 |
/a+b?(*PRUNE)c+(*FAIL)/
|
219 |
aaabccc
|
220 |
|
221 |
/a+b?(*COMMIT)c+(*FAIL)/
|
222 |
aaabccc
|
223 |
|
224 |
/a+b?(*SKIP)c+(*FAIL)/
|
225 |
aaabcccaaabccc
|
226 |
|
227 |
/^(?:aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
|
228 |
aaaxxxxxx
|
229 |
aaa++++++
|
230 |
bbbxxxxx
|
231 |
bbb+++++
|
232 |
cccxxxx
|
233 |
ccc++++
|
234 |
dddddddd
|
235 |
|
236 |
/^(aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
|
237 |
aaaxxxxxx
|
238 |
aaa++++++
|
239 |
bbbxxxxx
|
240 |
bbb+++++
|
241 |
cccxxxx
|
242 |
ccc++++
|
243 |
dddddddd
|
244 |
|
245 |
/a+b?(*THEN)c+(*FAIL)/
|
246 |
aaabccc
|
247 |
|
248 |
/(A (A|B(*ACCEPT)|C) D)(E)/x
|
249 |
ABX
|
250 |
AADE
|
251 |
ACDE
|
252 |
** Failers
|
253 |
AD
|
254 |
|
255 |
/^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$/i
|
256 |
1221
|
257 |
Satan, oscillate my metallic sonatas!
|
258 |
A man, a plan, a canal: Panama!
|
259 |
Able was I ere I saw Elba.
|
260 |
*** Failers
|
261 |
The quick brown fox
|
262 |
|
263 |
/^((.)(?1)\2|.)$/
|
264 |
a
|
265 |
aba
|
266 |
aabaa
|
267 |
abcdcba
|
268 |
pqaabaaqp
|
269 |
ablewasiereisawelba
|
270 |
rhubarb
|
271 |
the quick brown fox
|
272 |
|
273 |
/(a)(?<=b(?1))/
|
274 |
baz
|
275 |
** Failers
|
276 |
caz
|
277 |
|
278 |
/(?<=b(?1))(a)/
|
279 |
zbaaz
|
280 |
** Failers
|
281 |
aaa
|
282 |
|
283 |
/(?<X>a)(?<=b(?&X))/
|
284 |
baz
|
285 |
|
286 |
/^(?|(abc)|(def))\1/
|
287 |
abcabc
|
288 |
defdef
|
289 |
** Failers
|
290 |
abcdef
|
291 |
defabc
|
292 |
|
293 |
/^(?|(abc)|(def))(?1)/
|
294 |
abcabc
|
295 |
defabc
|
296 |
** Failers
|
297 |
defdef
|
298 |
abcdef
|
299 |
|
300 |
/(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |b(?<quote> (?<apostrophe>')|(?<realquote>")) ) (?('quote')[a-z]+|[0-9]+)/xJ
|
301 |
a\"aaaaa
|
302 |
b\"aaaaa
|
303 |
** Failers
|
304 |
b\"11111
|
305 |
|
306 |
/(?:(?1)|B)(A(*F)|C)/
|
307 |
ABCD
|
308 |
CCD
|
309 |
** Failers
|
310 |
CAD
|
311 |
|
312 |
/^(?:(?1)|B)(A(*F)|C)/
|
313 |
CCD
|
314 |
BCD
|
315 |
** Failers
|
316 |
ABCD
|
317 |
CAD
|
318 |
BAD
|
319 |
|
320 |
/(?:(?1)|B)(A(*ACCEPT)XX|C)D/
|
321 |
AAD
|
322 |
ACD
|
323 |
BAD
|
324 |
BCD
|
325 |
BAX
|
326 |
** Failers
|
327 |
ACX
|
328 |
ABC
|
329 |
|
330 |
/(?(DEFINE)(A))B(?1)C/
|
331 |
BAC
|
332 |
|
333 |
/(?(DEFINE)((A)\2))B(?1)C/
|
334 |
BAAC
|
335 |
|
336 |
/(?<pn> \( ( [^()]++ | (?&pn) )* \) )/x
|
337 |
(ab(cd)ef)
|
338 |
|
339 |
/^(?!a(*SKIP)b)/
|
340 |
ac
|
341 |
|
342 |
/^(?=a(*SKIP)b|ac)/
|
343 |
** Failers
|
344 |
ac
|
345 |
|
346 |
/^(?=a(*THEN)b|ac)/
|
347 |
ac
|
348 |
|
349 |
/^(?=a(*PRUNE)b)/
|
350 |
ab
|
351 |
** Failers
|
352 |
ac
|
353 |
|
354 |
/^(?=a(*ACCEPT)b)/
|
355 |
ac
|
356 |
|
357 |
/^(?(?!a(*SKIP)b))/
|
358 |
ac
|
359 |
|
360 |
/(?>a\Kb)/
|
361 |
ab
|
362 |
|
363 |
/((?>a\Kb))/
|
364 |
ab
|
365 |
|
366 |
/(a\Kb)/
|
367 |
ab
|
368 |
|
369 |
/^a\Kcz|ac/
|
370 |
ac
|
371 |
|
372 |
/(?>a\Kbz|ab)/
|
373 |
ab
|
374 |
|
375 |
/^(?&t)(?(DEFINE)(?<t>a\Kb))$/
|
376 |
ab
|
377 |
|
378 |
/^([^()]|\((?1)*\))*$/
|
379 |
a(b)c
|
380 |
a(b(c)d)e
|
381 |
|
382 |
/(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))/
|
383 |
0
|
384 |
00
|
385 |
0000
|
386 |
|
387 |
/(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))/
|
388 |
0
|
389 |
00
|
390 |
0000
|
391 |
|
392 |
/--- This one does fail, as expected, in Perl. It needs the complex item at the
|
393 |
end of the pattern. A single letter instead of (B|D) makes it not fail,
|
394 |
which I think is a Perl bug. --- /
|
395 |
|
396 |
/A(*COMMIT)(B|D)/
|
397 |
ACABX
|
398 |
|
399 |
/--- Check the use of names for failure ---/
|
400 |
|
401 |
/^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
|
402 |
** Failers
|
403 |
AC
|
404 |
CB
|
405 |
|
406 |
/(*MARK:A)(*SKIP:B)(C|X)/K
|
407 |
C
|
408 |
D
|
409 |
|
410 |
/^(A(*THEN:A)B|C(*THEN:B)D)/K
|
411 |
** Failers
|
412 |
CB
|
413 |
|
414 |
/^(?:A(*THEN:A)B|C(*THEN:B)D)/K
|
415 |
CB
|
416 |
|
417 |
/^(?>A(*THEN:A)B|C(*THEN:B)D)/K
|
418 |
CB
|
419 |
|
420 |
/--- This should succeed, as the skip causes bump to offset 1 (the mark). Note
|
421 |
that we have to have something complicated such as (B|Z) at the end because,
|
422 |
for Perl, a simple character somehow causes an unwanted optimization to mess
|
423 |
with the handling of backtracking verbs. ---/
|
424 |
|
425 |
/A(*MARK:A)A+(*SKIP:A)(B|Z) | AC/xK
|
426 |
AAAC
|
427 |
|
428 |
/--- Test skipping over a non-matching mark. ---/
|
429 |
|
430 |
/A(*MARK:A)A+(*MARK:B)(*SKIP:A)(B|Z) | AC/xK
|
431 |
AAAC
|
432 |
|
433 |
/--- Check shorthand for MARK ---/
|
434 |
|
435 |
/A(*:A)A+(*SKIP:A)(B|Z) | AC/xK
|
436 |
AAAC
|
437 |
|
438 |
/--- Don't loop! ---/
|
439 |
|
440 |
/(*:A)A+(*SKIP:A)(B|Z)/K
|
441 |
AAAC
|
442 |
|
443 |
/--- This should succeed, as a non-existent skip name disables the skip ---/
|
444 |
|
445 |
/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/xK
|
446 |
AAAC
|
447 |
|
448 |
/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC(*:B)/xK
|
449 |
AAAC
|
450 |
|
451 |
/--- We use something more complicated than individual letters here, because
|
452 |
that causes different behaviour in Perl. Perhaps it disables some optimization;
|
453 |
anyway, the result now matches PCRE in that no tag is passed back for the
|
454 |
failures. ---/
|
455 |
|
456 |
/(A|P)(*:A)(B|P) | (X|P)(X|P)(*:B)(Y|P)/xK
|
457 |
AABC
|
458 |
XXYZ
|
459 |
** Failers
|
460 |
XAQQ
|
461 |
XAQQXZZ
|
462 |
AXQQQ
|
463 |
AXXQQQ
|
464 |
|
465 |
/--- COMMIT at the start of a pattern should act like an anchor. Again,
|
466 |
however, we need the complication for Perl. ---/
|
467 |
|
468 |
/(*COMMIT)(A|P)(B|P)(C|P)/
|
469 |
ABCDEFG
|
470 |
** Failers
|
471 |
DEFGABC
|
472 |
|
473 |
/--- COMMIT inside an atomic group can't stop backtracking over the group. ---/
|
474 |
|
475 |
/(\w+)(?>b(*COMMIT))\w{2}/
|
476 |
abbb
|
477 |
|
478 |
/(\w+)b(*COMMIT)\w{2}/
|
479 |
abbb
|
480 |
|
481 |
/--- Check opening parens in comment when seeking forward reference. ---/
|
482 |
|
483 |
/(?&t)(?#()(?(DEFINE)(?<t>a))/
|
484 |
bac
|
485 |
|
486 |
/--- COMMIT should override THEN ---/
|
487 |
|
488 |
/(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?/
|
489 |
yes
|
490 |
|
491 |
/(?>(*COMMIT)(yes|no)(*THEN)(*F))?/
|
492 |
yes
|
493 |
|
494 |
/^((yes|no)(*THEN)(*F))?/
|
495 |
yes
|
496 |
|
497 |
/b?(*SKIP)c/
|
498 |
bc
|
499 |
abc
|
500 |
|
501 |
/(*SKIP)bc/
|
502 |
a
|
503 |
|
504 |
/(*SKIP)b/
|
505 |
a
|
506 |
|
507 |
/(?P<abn>(?P=abn)xxx|)+/
|
508 |
xxx
|
509 |
|
510 |
/-- End of testinput11 --/
|