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 --/ 511