Annotation of embedaddon/pcre/testdata/testoutput11, revision 1.1
1.1 ! misho 1: /-- These tests are for the Perl >= 5.10 features that PCRE supports. --/
! 2:
! 3: /\H\h\V\v/
! 4: X X\x0a
! 5: 0: X X\x0a
! 6: X\x09X\x0b
! 7: 0: X\x09X\x0b
! 8: ** Failers
! 9: No match
! 10: \xa0 X\x0a
! 11: No match
! 12:
! 13: /\H*\h+\V?\v{3,4}/
! 14: \x09\x20\xa0X\x0a\x0b\x0c\x0d\x0a
! 15: 0: \x09 \xa0X\x0a\x0b\x0c\x0d
! 16: \x09\x20\xa0\x0a\x0b\x0c\x0d\x0a
! 17: 0: \x09 \xa0\x0a\x0b\x0c\x0d
! 18: \x09\x20\xa0\x0a\x0b\x0c
! 19: 0: \x09 \xa0\x0a\x0b\x0c
! 20: ** Failers
! 21: No match
! 22: \x09\x20\xa0\x0a\x0b
! 23: No match
! 24:
! 25: /\H{3,4}/
! 26: XY ABCDE
! 27: 0: ABCD
! 28: XY PQR ST
! 29: 0: PQR
! 30:
! 31: /.\h{3,4}./
! 32: XY AB PQRS
! 33: 0: B P
! 34:
! 35: /\h*X\h?\H+Y\H?Z/
! 36: >XNNNYZ
! 37: 0: XNNNYZ
! 38: > X NYQZ
! 39: 0: X NYQZ
! 40: ** Failers
! 41: No match
! 42: >XYZ
! 43: No match
! 44: > X NY Z
! 45: No match
! 46:
! 47: /\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c/
! 48: >XY\x0aZ\x0aA\x0bNN\x0c
! 49: 0: XY\x0aZ\x0aA\x0bNN\x0c
! 50: >\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
! 51: 0: \x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
! 52:
! 53: /(foo)\Kbar/
! 54: foobar
! 55: 0: bar
! 56: 1: foo
! 57:
! 58: /(foo)(\Kbar|baz)/
! 59: foobar
! 60: 0: bar
! 61: 1: foo
! 62: 2: bar
! 63: foobaz
! 64: 0: foobaz
! 65: 1: foo
! 66: 2: baz
! 67:
! 68: /(foo\Kbar)baz/
! 69: foobarbaz
! 70: 0: barbaz
! 71: 1: foobar
! 72:
! 73: /abc\K|def\K/g+
! 74: Xabcdefghi
! 75: 0:
! 76: 0+ defghi
! 77: 0:
! 78: 0+ ghi
! 79:
! 80: /ab\Kc|de\Kf/g+
! 81: Xabcdefghi
! 82: 0: c
! 83: 0+ defghi
! 84: 0: f
! 85: 0+ ghi
! 86:
! 87: /(?=C)/g+
! 88: ABCDECBA
! 89: 0:
! 90: 0+ CDECBA
! 91: 0:
! 92: 0+ CBA
! 93:
! 94: /^abc\K/+
! 95: abcdef
! 96: 0:
! 97: 0+ def
! 98: ** Failers
! 99: No match
! 100: defabcxyz
! 101: No match
! 102:
! 103: /^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-02}Z/
! 104: ababababbbabZXXXX
! 105: 0: ababababbbabZ
! 106: 1: ab
! 107: 2: b
! 108:
! 109: /(?<A>tom|bon)-\g{A}/
! 110: tom-tom
! 111: 0: tom-tom
! 112: 1: tom
! 113: bon-bon
! 114: 0: bon-bon
! 115: 1: bon
! 116:
! 117: /(^(a|b\g{-1}))/
! 118: bacxxx
! 119: No match
! 120:
! 121: /(?|(abc)|(xyz))\1/
! 122: abcabc
! 123: 0: abcabc
! 124: 1: abc
! 125: xyzxyz
! 126: 0: xyzxyz
! 127: 1: xyz
! 128: ** Failers
! 129: No match
! 130: abcxyz
! 131: No match
! 132: xyzabc
! 133: No match
! 134:
! 135: /(?|(abc)|(xyz))(?1)/
! 136: abcabc
! 137: 0: abcabc
! 138: 1: abc
! 139: xyzabc
! 140: 0: xyzabc
! 141: 1: xyz
! 142: ** Failers
! 143: No match
! 144: xyzxyz
! 145: No match
! 146:
! 147: /^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/
! 148: XYabcdY
! 149: 0: XYabcdY
! 150: 1: a
! 151: 2: b
! 152: 3: c
! 153: 4: d
! 154: 5: Y
! 155:
! 156: /^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/
! 157: XYabcdY
! 158: 0: XYabcdY
! 159: 1: a
! 160: 2: b
! 161: 3: <unset>
! 162: 4: <unset>
! 163: 5: c
! 164: 6: d
! 165: 7: Y
! 166:
! 167: /^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/
! 168: XYabcdY
! 169: 0: XYabcdY
! 170: 1: a
! 171: 2: b
! 172: 3: <unset>
! 173: 4: <unset>
! 174: 5: c
! 175: 6: d
! 176: 7: Y
! 177:
! 178: /(?'abc'\w+):\k<abc>{2}/
! 179: a:aaxyz
! 180: 0: a:aa
! 181: 1: a
! 182: ab:ababxyz
! 183: 0: ab:abab
! 184: 1: ab
! 185: ** Failers
! 186: No match
! 187: a:axyz
! 188: No match
! 189: ab:abxyz
! 190: No match
! 191:
! 192: /(?'abc'\w+):\g{abc}{2}/
! 193: a:aaxyz
! 194: 0: a:aa
! 195: 1: a
! 196: ab:ababxyz
! 197: 0: ab:abab
! 198: 1: ab
! 199: ** Failers
! 200: No match
! 201: a:axyz
! 202: No match
! 203: ab:abxyz
! 204: No match
! 205:
! 206: /^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)/x
! 207: abd
! 208: 0: abd
! 209: 1: a
! 210: ce
! 211: 0: ce
! 212:
! 213: /^(a.)\g-1Z/
! 214: aXaXZ
! 215: 0: aXaXZ
! 216: 1: aX
! 217:
! 218: /^(a.)\g{-1}Z/
! 219: aXaXZ
! 220: 0: aXaXZ
! 221: 1: aX
! 222:
! 223: /^(?(DEFINE) (?<A> a) (?<B> b) ) (?&A) (?&B) /x
! 224: abcd
! 225: 0: ab
! 226:
! 227: /(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT))
! 228: (?(DEFINE)
! 229: (?<NAME_PAT>[a-z]+)
! 230: (?<ADDRESS_PAT>\d+)
! 231: )/x
! 232: metcalfe 33
! 233: 0: metcalfe 33
! 234: 1: metcalfe
! 235: 2: 33
! 236:
! 237: /(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}/
! 238: 1.2.3.4
! 239: 0: 1.2.3.4
! 240: 1: <unset>
! 241: 2: .4
! 242: 131.111.10.206
! 243: 0: 131.111.10.206
! 244: 1: <unset>
! 245: 2: .206
! 246: 10.0.0.0
! 247: 0: 10.0.0.0
! 248: 1: <unset>
! 249: 2: .0
! 250: ** Failers
! 251: No match
! 252: 10.6
! 253: No match
! 254: 455.3.4.5
! 255: No match
! 256:
! 257: /\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))/
! 258: 1.2.3.4
! 259: 0: 1.2.3.4
! 260: 1: .4
! 261: 131.111.10.206
! 262: 0: 131.111.10.206
! 263: 1: .206
! 264: 10.0.0.0
! 265: 0: 10.0.0.0
! 266: 1: .0
! 267: ** Failers
! 268: No match
! 269: 10.6
! 270: No match
! 271: 455.3.4.5
! 272: No match
! 273:
! 274: /^(\w++|\s++)*$/
! 275: now is the time for all good men to come to the aid of the party
! 276: 0: now is the time for all good men to come to the aid of the party
! 277: 1: party
! 278: *** Failers
! 279: No match
! 280: this is not a line with only words and spaces!
! 281: No match
! 282:
! 283: /(\d++)(\w)/
! 284: 12345a
! 285: 0: 12345a
! 286: 1: 12345
! 287: 2: a
! 288: *** Failers
! 289: No match
! 290: 12345+
! 291: No match
! 292:
! 293: /a++b/
! 294: aaab
! 295: 0: aaab
! 296:
! 297: /(a++b)/
! 298: aaab
! 299: 0: aaab
! 300: 1: aaab
! 301:
! 302: /(a++)b/
! 303: aaab
! 304: 0: aaab
! 305: 1: aaa
! 306:
! 307: /([^()]++|\([^()]*\))+/
! 308: ((abc(ade)ufh()()x
! 309: 0: abc(ade)ufh()()x
! 310: 1: x
! 311:
! 312: /\(([^()]++|\([^()]+\))+\)/
! 313: (abc)
! 314: 0: (abc)
! 315: 1: abc
! 316: (abc(def)xyz)
! 317: 0: (abc(def)xyz)
! 318: 1: xyz
! 319: *** Failers
! 320: No match
! 321: ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
! 322: No match
! 323:
! 324: /^([^()]|\((?1)*\))*$/
! 325: abc
! 326: 0: abc
! 327: 1: c
! 328: a(b)c
! 329: 0: a(b)c
! 330: 1: c
! 331: a(b(c))d
! 332: 0: a(b(c))d
! 333: 1: d
! 334: *** Failers)
! 335: No match
! 336: a(b(c)d
! 337: No match
! 338:
! 339: /^>abc>([^()]|\((?1)*\))*<xyz<$/
! 340: >abc>123<xyz<
! 341: 0: >abc>123<xyz<
! 342: 1: 3
! 343: >abc>1(2)3<xyz<
! 344: 0: >abc>1(2)3<xyz<
! 345: 1: 3
! 346: >abc>(1(2)3)<xyz<
! 347: 0: >abc>(1(2)3)<xyz<
! 348: 1: (1(2)3)
! 349:
! 350: /^(?:((.)(?1)\2|)|((.)(?3)\4|.))$/i
! 351: 1221
! 352: 0: 1221
! 353: 1: 1221
! 354: 2: 1
! 355: Satanoscillatemymetallicsonatas
! 356: 0: Satanoscillatemymetallicsonatas
! 357: 1: <unset>
! 358: 2: <unset>
! 359: 3: Satanoscillatemymetallicsonatas
! 360: 4: S
! 361: AmanaplanacanalPanama
! 362: 0: AmanaplanacanalPanama
! 363: 1: <unset>
! 364: 2: <unset>
! 365: 3: AmanaplanacanalPanama
! 366: 4: A
! 367: AblewasIereIsawElba
! 368: 0: AblewasIereIsawElba
! 369: 1: <unset>
! 370: 2: <unset>
! 371: 3: AblewasIereIsawElba
! 372: 4: A
! 373: *** Failers
! 374: No match
! 375: Thequickbrownfox
! 376: No match
! 377:
! 378: /^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/
! 379: 12
! 380: 0: 12
! 381: 1: 12
! 382: (((2+2)*-3)-7)
! 383: 0: (((2+2)*-3)-7)
! 384: 1: (((2+2)*-3)-7)
! 385: 2: -
! 386: -12
! 387: 0: -12
! 388: 1: -12
! 389: *** Failers
! 390: No match
! 391: ((2+2)*-3)-7)
! 392: No match
! 393:
! 394: /^(x(y|(?1){2})z)/
! 395: xyz
! 396: 0: xyz
! 397: 1: xyz
! 398: 2: y
! 399: xxyzxyzz
! 400: 0: xxyzxyzz
! 401: 1: xxyzxyzz
! 402: 2: xyzxyz
! 403: *** Failers
! 404: No match
! 405: xxyzz
! 406: No match
! 407: xxyzxyzxyzz
! 408: No match
! 409:
! 410: /((< (?: (?(R) \d++ | [^<>]*+) | (?2)) * >))/x
! 411: <>
! 412: 0: <>
! 413: 1: <>
! 414: 2: <>
! 415: <abcd>
! 416: 0: <abcd>
! 417: 1: <abcd>
! 418: 2: <abcd>
! 419: <abc <123> hij>
! 420: 0: <abc <123> hij>
! 421: 1: <abc <123> hij>
! 422: 2: <abc <123> hij>
! 423: <abc <def> hij>
! 424: 0: <def>
! 425: 1: <def>
! 426: 2: <def>
! 427: <abc<>def>
! 428: 0: <abc<>def>
! 429: 1: <abc<>def>
! 430: 2: <abc<>def>
! 431: <abc<>
! 432: 0: <>
! 433: 1: <>
! 434: 2: <>
! 435: *** Failers
! 436: No match
! 437: <abc
! 438: No match
! 439:
! 440: /^a+(*FAIL)/
! 441: aaaaaa
! 442: No match
! 443:
! 444: /a+b?c+(*FAIL)/
! 445: aaabccc
! 446: No match
! 447:
! 448: /a+b?(*PRUNE)c+(*FAIL)/
! 449: aaabccc
! 450: No match
! 451:
! 452: /a+b?(*COMMIT)c+(*FAIL)/
! 453: aaabccc
! 454: No match
! 455:
! 456: /a+b?(*SKIP)c+(*FAIL)/
! 457: aaabcccaaabccc
! 458: No match
! 459:
! 460: /^(?:aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
! 461: aaaxxxxxx
! 462: 0: aaaxxxxxx
! 463: aaa++++++
! 464: 0: aaa
! 465: bbbxxxxx
! 466: 0: bbbxxxxx
! 467: bbb+++++
! 468: 0: bbb
! 469: cccxxxx
! 470: 0: cccxxxx
! 471: ccc++++
! 472: 0: ccc
! 473: dddddddd
! 474: 0: ddd
! 475:
! 476: /^(aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
! 477: aaaxxxxxx
! 478: 0: aaaxxxxxx
! 479: 1: aaaxxxxxx
! 480: aaa++++++
! 481: 0: aaa
! 482: 1: aaa
! 483: bbbxxxxx
! 484: 0: bbbxxxxx
! 485: 1: bbbxxxxx
! 486: bbb+++++
! 487: 0: bbb
! 488: 1: bbb
! 489: cccxxxx
! 490: 0: cccxxxx
! 491: 1: cccxxxx
! 492: ccc++++
! 493: 0: ccc
! 494: 1: ccc
! 495: dddddddd
! 496: 0: ddd
! 497: 1: ddd
! 498:
! 499: /a+b?(*THEN)c+(*FAIL)/
! 500: aaabccc
! 501: No match
! 502:
! 503: /(A (A|B(*ACCEPT)|C) D)(E)/x
! 504: AB
! 505: 0: AB
! 506: 1: AB
! 507: 2: B
! 508: ABX
! 509: 0: AB
! 510: 1: AB
! 511: 2: B
! 512: AADE
! 513: 0: AADE
! 514: 1: AAD
! 515: 2: A
! 516: 3: E
! 517: ACDE
! 518: 0: ACDE
! 519: 1: ACD
! 520: 2: C
! 521: 3: E
! 522: ** Failers
! 523: No match
! 524: AD
! 525: No match
! 526:
! 527: /^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$/i
! 528: 1221
! 529: 0: 1221
! 530: 1: 1221
! 531: 2: 1
! 532: Satan, oscillate my metallic sonatas!
! 533: 0: Satan, oscillate my metallic sonatas!
! 534: 1: <unset>
! 535: 2: <unset>
! 536: 3: Satan, oscillate my metallic sonatas
! 537: 4: S
! 538: A man, a plan, a canal: Panama!
! 539: 0: A man, a plan, a canal: Panama!
! 540: 1: <unset>
! 541: 2: <unset>
! 542: 3: A man, a plan, a canal: Panama
! 543: 4: A
! 544: Able was I ere I saw Elba.
! 545: 0: Able was I ere I saw Elba.
! 546: 1: <unset>
! 547: 2: <unset>
! 548: 3: Able was I ere I saw Elba
! 549: 4: A
! 550: *** Failers
! 551: No match
! 552: The quick brown fox
! 553: No match
! 554:
! 555: /^((.)(?1)\2|.)$/
! 556: a
! 557: 0: a
! 558: 1: a
! 559: aba
! 560: 0: aba
! 561: 1: aba
! 562: 2: a
! 563: aabaa
! 564: 0: aabaa
! 565: 1: aabaa
! 566: 2: a
! 567: abcdcba
! 568: 0: abcdcba
! 569: 1: abcdcba
! 570: 2: a
! 571: pqaabaaqp
! 572: 0: pqaabaaqp
! 573: 1: pqaabaaqp
! 574: 2: p
! 575: ablewasiereisawelba
! 576: 0: ablewasiereisawelba
! 577: 1: ablewasiereisawelba
! 578: 2: a
! 579: rhubarb
! 580: No match
! 581: the quick brown fox
! 582: No match
! 583:
! 584: /(a)(?<=b(?1))/
! 585: baz
! 586: 0: a
! 587: 1: a
! 588: ** Failers
! 589: No match
! 590: caz
! 591: No match
! 592:
! 593: /(?<=b(?1))(a)/
! 594: zbaaz
! 595: 0: a
! 596: 1: a
! 597: ** Failers
! 598: No match
! 599: aaa
! 600: No match
! 601:
! 602: /(?<X>a)(?<=b(?&X))/
! 603: baz
! 604: 0: a
! 605: 1: a
! 606:
! 607: /^(?|(abc)|(def))\1/
! 608: abcabc
! 609: 0: abcabc
! 610: 1: abc
! 611: defdef
! 612: 0: defdef
! 613: 1: def
! 614: ** Failers
! 615: No match
! 616: abcdef
! 617: No match
! 618: defabc
! 619: No match
! 620:
! 621: /^(?|(abc)|(def))(?1)/
! 622: abcabc
! 623: 0: abcabc
! 624: 1: abc
! 625: defabc
! 626: 0: defabc
! 627: 1: def
! 628: ** Failers
! 629: No match
! 630: defdef
! 631: No match
! 632: abcdef
! 633: No match
! 634:
! 635: /(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |b(?<quote> (?<apostrophe>')|(?<realquote>")) ) (?('quote')[a-z]+|[0-9]+)/xJ
! 636: a\"aaaaa
! 637: 0: a"aaaaa
! 638: 1: "
! 639: 2: <unset>
! 640: 3: "
! 641: b\"aaaaa
! 642: 0: b"aaaaa
! 643: 1: <unset>
! 644: 2: <unset>
! 645: 3: <unset>
! 646: 4: "
! 647: 5: <unset>
! 648: 6: "
! 649: ** Failers
! 650: No match
! 651: b\"11111
! 652: No match
! 653:
! 654: /(?:(?1)|B)(A(*F)|C)/
! 655: ABCD
! 656: 0: BC
! 657: 1: C
! 658: CCD
! 659: 0: CC
! 660: 1: C
! 661: ** Failers
! 662: No match
! 663: CAD
! 664: No match
! 665:
! 666: /^(?:(?1)|B)(A(*F)|C)/
! 667: CCD
! 668: 0: CC
! 669: 1: C
! 670: BCD
! 671: 0: BC
! 672: 1: C
! 673: ** Failers
! 674: No match
! 675: ABCD
! 676: No match
! 677: CAD
! 678: No match
! 679: BAD
! 680: No match
! 681:
! 682: /(?:(?1)|B)(A(*ACCEPT)XX|C)D/
! 683: AAD
! 684: 0: AA
! 685: 1: A
! 686: ACD
! 687: 0: ACD
! 688: 1: C
! 689: BAD
! 690: 0: BA
! 691: 1: A
! 692: BCD
! 693: 0: BCD
! 694: 1: C
! 695: BAX
! 696: 0: BA
! 697: 1: A
! 698: ** Failers
! 699: No match
! 700: ACX
! 701: No match
! 702: ABC
! 703: No match
! 704:
! 705: /(?(DEFINE)(A))B(?1)C/
! 706: BAC
! 707: 0: BAC
! 708:
! 709: /(?(DEFINE)((A)\2))B(?1)C/
! 710: BAAC
! 711: 0: BAAC
! 712:
! 713: /(?<pn> \( ( [^()]++ | (?&pn) )* \) )/x
! 714: (ab(cd)ef)
! 715: 0: (ab(cd)ef)
! 716: 1: (ab(cd)ef)
! 717: 2: ef
! 718:
! 719: /^(?!a(*SKIP)b)/
! 720: ac
! 721: 0:
! 722:
! 723: /^(?=a(*SKIP)b|ac)/
! 724: ** Failers
! 725: No match
! 726: ac
! 727: No match
! 728:
! 729: /^(?=a(*THEN)b|ac)/
! 730: ac
! 731: 0:
! 732:
! 733: /^(?=a(*PRUNE)b)/
! 734: ab
! 735: 0:
! 736: ** Failers
! 737: No match
! 738: ac
! 739: No match
! 740:
! 741: /^(?=a(*ACCEPT)b)/
! 742: ac
! 743: 0:
! 744:
! 745: /^(?(?!a(*SKIP)b))/
! 746: ac
! 747: 0:
! 748:
! 749: /(?>a\Kb)/
! 750: ab
! 751: 0: b
! 752:
! 753: /((?>a\Kb))/
! 754: ab
! 755: 0: b
! 756: 1: ab
! 757:
! 758: /(a\Kb)/
! 759: ab
! 760: 0: b
! 761: 1: ab
! 762:
! 763: /^a\Kcz|ac/
! 764: ac
! 765: 0: ac
! 766:
! 767: /(?>a\Kbz|ab)/
! 768: ab
! 769: 0: ab
! 770:
! 771: /^(?&t)(?(DEFINE)(?<t>a\Kb))$/
! 772: ab
! 773: 0: b
! 774:
! 775: /^([^()]|\((?1)*\))*$/
! 776: a(b)c
! 777: 0: a(b)c
! 778: 1: c
! 779: a(b(c)d)e
! 780: 0: a(b(c)d)e
! 781: 1: e
! 782:
! 783: /(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))/
! 784: 0
! 785: 0: 0
! 786: 1: 0
! 787: 00
! 788: 0: 00
! 789: 1: 00
! 790: 2: 0
! 791: 0000
! 792: 0: 0000
! 793: 1: 0000
! 794: 2: 0
! 795:
! 796: /(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))/
! 797: 0
! 798: 0: 0
! 799: 1: 0
! 800: 2: 0
! 801: 00
! 802: 0: 0
! 803: 1: 0
! 804: 2: 0
! 805: 0000
! 806: 0: 0
! 807: 1: 0
! 808: 2: 0
! 809:
! 810: /--- This one does fail, as expected, in Perl. It needs the complex item at the
! 811: end of the pattern. A single letter instead of (B|D) makes it not fail,
! 812: which I think is a Perl bug. --- /
! 813:
! 814: /A(*COMMIT)(B|D)/
! 815: ACABX
! 816: No match
! 817:
! 818: /--- Check the use of names for failure ---/
! 819:
! 820: /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
! 821: ** Failers
! 822: No match
! 823: AC
! 824: No match, mark = A
! 825: CB
! 826: No match, mark = B
! 827:
! 828: /--- Force no study, otherwise mark is not seen. The studied version is in
! 829: test 2 because it isn't Perl-compatible. ---/
! 830:
! 831: /(*MARK:A)(*SKIP:B)(C|X)/KSS
! 832: C
! 833: 0: C
! 834: 1: C
! 835: MK: A
! 836: D
! 837: No match, mark = A
! 838:
! 839: /^(A(*THEN:A)B|C(*THEN:B)D)/K
! 840: ** Failers
! 841: No match
! 842: CB
! 843: No match, mark = B
! 844:
! 845: /^(?:A(*THEN:A)B|C(*THEN:B)D)/K
! 846: CB
! 847: No match, mark = B
! 848:
! 849: /^(?>A(*THEN:A)B|C(*THEN:B)D)/K
! 850: CB
! 851: No match, mark = B
! 852:
! 853: /--- This should succeed, as the skip causes bump to offset 1 (the mark). Note
! 854: that we have to have something complicated such as (B|Z) at the end because,
! 855: for Perl, a simple character somehow causes an unwanted optimization to mess
! 856: with the handling of backtracking verbs. ---/
! 857:
! 858: /A(*MARK:A)A+(*SKIP:A)(B|Z) | AC/xK
! 859: AAAC
! 860: 0: AC
! 861:
! 862: /--- Test skipping over a non-matching mark. ---/
! 863:
! 864: /A(*MARK:A)A+(*MARK:B)(*SKIP:A)(B|Z) | AC/xK
! 865: AAAC
! 866: 0: AC
! 867:
! 868: /--- Check shorthand for MARK ---/
! 869:
! 870: /A(*:A)A+(*SKIP:A)(B|Z) | AC/xK
! 871: AAAC
! 872: 0: AC
! 873:
! 874: /--- Don't loop! Force no study, otherwise mark is not seen. ---/
! 875:
! 876: /(*:A)A+(*SKIP:A)(B|Z)/KSS
! 877: AAAC
! 878: No match, mark = A
! 879:
! 880: /--- This should succeed, as a non-existent skip name disables the skip ---/
! 881:
! 882: /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/xK
! 883: AAAC
! 884: 0: AC
! 885:
! 886: /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC(*:B)/xK
! 887: AAAC
! 888: 0: AC
! 889: MK: B
! 890:
! 891: /--- COMMIT at the start of a pattern should act like an anchor. Again,
! 892: however, we need the complication for Perl. ---/
! 893:
! 894: /(*COMMIT)(A|P)(B|P)(C|P)/
! 895: ABCDEFG
! 896: 0: ABC
! 897: 1: A
! 898: 2: B
! 899: 3: C
! 900: ** Failers
! 901: No match
! 902: DEFGABC
! 903: No match
! 904:
! 905: /--- COMMIT inside an atomic group can't stop backtracking over the group. ---/
! 906:
! 907: /(\w+)(?>b(*COMMIT))\w{2}/
! 908: abbb
! 909: 0: abbb
! 910: 1: a
! 911:
! 912: /(\w+)b(*COMMIT)\w{2}/
! 913: abbb
! 914: No match
! 915:
! 916: /--- Check opening parens in comment when seeking forward reference. ---/
! 917:
! 918: /(?&t)(?#()(?(DEFINE)(?<t>a))/
! 919: bac
! 920: 0: a
! 921:
! 922: /--- COMMIT should override THEN ---/
! 923:
! 924: /(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?/
! 925: yes
! 926: No match
! 927:
! 928: /(?>(*COMMIT)(yes|no)(*THEN)(*F))?/
! 929: yes
! 930: No match
! 931:
! 932: /b?(*SKIP)c/
! 933: bc
! 934: 0: bc
! 935: abc
! 936: 0: bc
! 937:
! 938: /(*SKIP)bc/
! 939: a
! 940: No match
! 941:
! 942: /(*SKIP)b/
! 943: a
! 944: No match
! 945:
! 946: /(?P<abn>(?P=abn)xxx|)+/
! 947: xxx
! 948: 0:
! 949: 1:
! 950:
! 951: /(?i:([^b]))(?1)/
! 952: aa
! 953: 0: aa
! 954: 1: a
! 955: aA
! 956: 0: aA
! 957: 1: a
! 958: ** Failers
! 959: 0: **
! 960: 1: *
! 961: ab
! 962: No match
! 963: aB
! 964: No match
! 965: Ba
! 966: No match
! 967: ba
! 968: No match
! 969:
! 970: /^(?&t)*+(?(DEFINE)(?<t>a))\w$/
! 971: aaaaaaX
! 972: 0: aaaaaaX
! 973: ** Failers
! 974: No match
! 975: aaaaaa
! 976: No match
! 977:
! 978: /^(?&t)*(?(DEFINE)(?<t>a))\w$/
! 979: aaaaaaX
! 980: 0: aaaaaaX
! 981: aaaaaa
! 982: 0: aaaaaa
! 983:
! 984: /^(a)*+(\w)/
! 985: aaaaX
! 986: 0: aaaaX
! 987: 1: a
! 988: 2: X
! 989: YZ
! 990: 0: Y
! 991: 1: <unset>
! 992: 2: Y
! 993: ** Failers
! 994: No match
! 995: aaaa
! 996: No match
! 997:
! 998: /^(?:a)*+(\w)/
! 999: aaaaX
! 1000: 0: aaaaX
! 1001: 1: X
! 1002: YZ
! 1003: 0: Y
! 1004: 1: Y
! 1005: ** Failers
! 1006: No match
! 1007: aaaa
! 1008: No match
! 1009:
! 1010: /^(a)++(\w)/
! 1011: aaaaX
! 1012: 0: aaaaX
! 1013: 1: a
! 1014: 2: X
! 1015: ** Failers
! 1016: No match
! 1017: aaaa
! 1018: No match
! 1019: YZ
! 1020: No match
! 1021:
! 1022: /^(?:a)++(\w)/
! 1023: aaaaX
! 1024: 0: aaaaX
! 1025: 1: X
! 1026: ** Failers
! 1027: No match
! 1028: aaaa
! 1029: No match
! 1030: YZ
! 1031: No match
! 1032:
! 1033: /^(a)?+(\w)/
! 1034: aaaaX
! 1035: 0: aa
! 1036: 1: a
! 1037: 2: a
! 1038: YZ
! 1039: 0: Y
! 1040: 1: <unset>
! 1041: 2: Y
! 1042:
! 1043: /^(?:a)?+(\w)/
! 1044: aaaaX
! 1045: 0: aa
! 1046: 1: a
! 1047: YZ
! 1048: 0: Y
! 1049: 1: Y
! 1050:
! 1051: /^(a){2,}+(\w)/
! 1052: aaaaX
! 1053: 0: aaaaX
! 1054: 1: a
! 1055: 2: X
! 1056: ** Failers
! 1057: No match
! 1058: aaa
! 1059: No match
! 1060: YZ
! 1061: No match
! 1062:
! 1063: /^(?:a){2,}+(\w)/
! 1064: aaaaX
! 1065: 0: aaaaX
! 1066: 1: X
! 1067: ** Failers
! 1068: No match
! 1069: aaa
! 1070: No match
! 1071: YZ
! 1072: No match
! 1073:
! 1074: /(a|)*(?1)b/
! 1075: b
! 1076: 0: b
! 1077: 1:
! 1078: ab
! 1079: 0: ab
! 1080: 1:
! 1081: aab
! 1082: 0: aab
! 1083: 1:
! 1084:
! 1085: /(a)++(?1)b/
! 1086: ** Failers
! 1087: No match
! 1088: ab
! 1089: No match
! 1090: aab
! 1091: No match
! 1092:
! 1093: /(a)*+(?1)b/
! 1094: ** Failers
! 1095: No match
! 1096: ab
! 1097: No match
! 1098: aab
! 1099: No match
! 1100:
! 1101: /(?1)(?:(b)){0}/
! 1102: b
! 1103: 0: b
! 1104:
! 1105: /(foo ( \( ((?:(?> [^()]+ )|(?2))*) \) ) )/x
! 1106: foo(bar(baz)+baz(bop))
! 1107: 0: foo(bar(baz)+baz(bop))
! 1108: 1: foo(bar(baz)+baz(bop))
! 1109: 2: (bar(baz)+baz(bop))
! 1110: 3: bar(baz)+baz(bop)
! 1111:
! 1112: /(A (A|B(*ACCEPT)|C) D)(E)/x
! 1113: AB
! 1114: 0: AB
! 1115: 1: AB
! 1116: 2: B
! 1117:
! 1118: /\A.*?(?:a|b(*THEN)c)/
! 1119: ba
! 1120: 0: ba
! 1121:
! 1122: /\A.*?(?:a|bc)/
! 1123: ba
! 1124: 0: ba
! 1125:
! 1126: /\A.*?(a|b(*THEN)c)/
! 1127: ba
! 1128: 0: ba
! 1129: 1: a
! 1130:
! 1131: /\A.*?(a|bc)/
! 1132: ba
! 1133: 0: ba
! 1134: 1: a
! 1135:
! 1136: /\A.*?(?:a|b(*THEN)c)++/
! 1137: ba
! 1138: 0: ba
! 1139:
! 1140: /\A.*?(?:a|bc)++/
! 1141: ba
! 1142: 0: ba
! 1143:
! 1144: /\A.*?(a|b(*THEN)c)++/
! 1145: ba
! 1146: 0: ba
! 1147: 1: a
! 1148:
! 1149: /\A.*?(a|bc)++/
! 1150: ba
! 1151: 0: ba
! 1152: 1: a
! 1153:
! 1154: /\A.*?(?:a|b(*THEN)c|d)/
! 1155: ba
! 1156: 0: ba
! 1157:
! 1158: /\A.*?(?:a|bc|d)/
! 1159: ba
! 1160: 0: ba
! 1161:
! 1162: /(?:(b))++/
! 1163: beetle
! 1164: 0: b
! 1165: 1: b
! 1166:
! 1167: /(?(?=(a(*ACCEPT)z))a)/
! 1168: a
! 1169: 0: a
! 1170: 1: a
! 1171:
! 1172: /^(a)(?1)+ab/
! 1173: aaaab
! 1174: 0: aaaab
! 1175: 1: a
! 1176:
! 1177: /^(a)(?1)++ab/
! 1178: aaaab
! 1179: No match
! 1180:
! 1181: /^(?=a(*:M))aZ/K
! 1182: aZbc
! 1183: 0: aZ
! 1184: MK: M
! 1185:
! 1186: /^(?!(*:M)b)aZ/K
! 1187: aZbc
! 1188: 0: aZ
! 1189:
! 1190: /(?(DEFINE)(a))?b(?1)/
! 1191: backgammon
! 1192: 0: ba
! 1193:
! 1194: /^\N+/
! 1195: abc\ndef
! 1196: 0: abc
! 1197:
! 1198: /^\N{1,}/
! 1199: abc\ndef
! 1200: 0: abc
! 1201:
! 1202: /(?(R)a+|(?R)b)/
! 1203: aaaabcde
! 1204: 0: aaaab
! 1205:
! 1206: /(?(R)a+|((?R))b)/
! 1207: aaaabcde
! 1208: 0: aaaab
! 1209: 1: aaaa
! 1210:
! 1211: /((?(R)a+|(?1)b))/
! 1212: aaaabcde
! 1213: 0: aaaab
! 1214: 1: aaaab
! 1215:
! 1216: /((?(R1)a+|(?1)b))/
! 1217: aaaabcde
! 1218: 0: aaaab
! 1219: 1: aaaab
! 1220:
! 1221: /a(*:any
! 1222: name)/K
! 1223: abc
! 1224: 0: a
! 1225: MK: any
! 1226: name
! 1227:
! 1228: /(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))/
! 1229: a
! 1230: 0: a
! 1231: ba
! 1232: 0: a
! 1233: bba
! 1234: 0: a
! 1235:
! 1236: /--- Checking revised (*THEN) handling ---/
! 1237:
! 1238: /--- Capture ---/
! 1239:
! 1240: /^.*? (a(*THEN)b) c/x
! 1241: aabc
! 1242: No match
! 1243:
! 1244: /^.*? (a(*THEN)b|(*F)) c/x
! 1245: aabc
! 1246: 0: aabc
! 1247: 1: ab
! 1248:
! 1249: /^.*? ( (a(*THEN)b) | (*F) ) c/x
! 1250: aabc
! 1251: 0: aabc
! 1252: 1: ab
! 1253: 2: ab
! 1254:
! 1255: /^.*? ( (a(*THEN)b) ) c/x
! 1256: aabc
! 1257: No match
! 1258:
! 1259: /--- Non-capture ---/
! 1260:
! 1261: /^.*? (?:a(*THEN)b) c/x
! 1262: aabc
! 1263: No match
! 1264:
! 1265: /^.*? (?:a(*THEN)b|(*F)) c/x
! 1266: aabc
! 1267: 0: aabc
! 1268:
! 1269: /^.*? (?: (?:a(*THEN)b) | (*F) ) c/x
! 1270: aabc
! 1271: 0: aabc
! 1272:
! 1273: /^.*? (?: (?:a(*THEN)b) ) c/x
! 1274: aabc
! 1275: No match
! 1276:
! 1277: /--- Atomic ---/
! 1278:
! 1279: /^.*? (?>a(*THEN)b) c/x
! 1280: aabc
! 1281: No match
! 1282:
! 1283: /^.*? (?>a(*THEN)b|(*F)) c/x
! 1284: aabc
! 1285: 0: aabc
! 1286:
! 1287: /^.*? (?> (?>a(*THEN)b) | (*F) ) c/x
! 1288: aabc
! 1289: 0: aabc
! 1290:
! 1291: /^.*? (?> (?>a(*THEN)b) ) c/x
! 1292: aabc
! 1293: No match
! 1294:
! 1295: /--- Possessive capture ---/
! 1296:
! 1297: /^.*? (a(*THEN)b)++ c/x
! 1298: aabc
! 1299: No match
! 1300:
! 1301: /^.*? (a(*THEN)b|(*F))++ c/x
! 1302: aabc
! 1303: 0: aabc
! 1304: 1: ab
! 1305:
! 1306: /^.*? ( (a(*THEN)b)++ | (*F) )++ c/x
! 1307: aabc
! 1308: 0: aabc
! 1309: 1: ab
! 1310: 2: ab
! 1311:
! 1312: /^.*? ( (a(*THEN)b)++ )++ c/x
! 1313: aabc
! 1314: No match
! 1315:
! 1316: /--- Possessive non-capture ---/
! 1317:
! 1318: /^.*? (?:a(*THEN)b)++ c/x
! 1319: aabc
! 1320: No match
! 1321:
! 1322: /^.*? (?:a(*THEN)b|(*F))++ c/x
! 1323: aabc
! 1324: 0: aabc
! 1325:
! 1326: /^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c/x
! 1327: aabc
! 1328: 0: aabc
! 1329:
! 1330: /^.*? (?: (?:a(*THEN)b)++ )++ c/x
! 1331: aabc
! 1332: No match
! 1333:
! 1334: /--- Condition assertion ---/
! 1335:
! 1336: /^(?(?=a(*THEN)b)ab|ac)/
! 1337: ac
! 1338: 0: ac
! 1339:
! 1340: /--- Condition ---/
! 1341:
! 1342: /^.*?(?(?=a)a|b(*THEN)c)/
! 1343: ba
! 1344: No match
! 1345:
! 1346: /^.*?(?:(?(?=a)a|b(*THEN)c)|d)/
! 1347: ba
! 1348: 0: ba
! 1349:
! 1350: /^.*?(?(?=a)a(*THEN)b|c)/
! 1351: ac
! 1352: No match
! 1353:
! 1354: /--- Assertion ---/
! 1355:
! 1356: /^.*(?=a(*THEN)b)/
! 1357: aabc
! 1358: 0: a
! 1359:
! 1360: /------------------------------/
! 1361:
! 1362: /(?>a(*:m))/imsxSK
! 1363: a
! 1364: 0: a
! 1365: MK: m
! 1366:
! 1367: /(?>(a)(*:m))/imsxSK
! 1368: a
! 1369: 0: a
! 1370: 1: a
! 1371: MK: m
! 1372:
! 1373: /(?<=a(*ACCEPT)b)c/
! 1374: xacd
! 1375: 0: c
! 1376:
! 1377: /(?<=(a(*ACCEPT)b))c/
! 1378: xacd
! 1379: 0: c
! 1380: 1: a
! 1381:
! 1382: /(?<=(a(*COMMIT)b))c/
! 1383: xabcd
! 1384: 0: c
! 1385: 1: ab
! 1386: ** Failers
! 1387: No match
! 1388: xacd
! 1389: No match
! 1390:
! 1391: /(?<!a(*FAIL)b)c/
! 1392: xcd
! 1393: 0: c
! 1394: acd
! 1395: 0: c
! 1396:
! 1397: /(?<=a(*:N)b)c/K
! 1398: xabcd
! 1399: 0: c
! 1400: MK: N
! 1401:
! 1402: /(?<=a(*PRUNE)b)c/
! 1403: xabcd
! 1404: 0: c
! 1405:
! 1406: /(?<=a(*SKIP)b)c/
! 1407: xabcd
! 1408: 0: c
! 1409:
! 1410: /(?<=a(*THEN)b)c/
! 1411: xabcd
! 1412: 0: c
! 1413:
! 1414: /(a)(?2){2}(.)/
! 1415: abcd
! 1416: 0: abcd
! 1417: 1: a
! 1418: 2: d
! 1419:
! 1420: /(*MARK:A)(*PRUNE:B)(C|X)/KS
! 1421: C
! 1422: 0: C
! 1423: 1: C
! 1424: MK: B
! 1425: D
! 1426: No match, mark = B
! 1427:
! 1428: /(*MARK:A)(*PRUNE:B)(C|X)/KSS
! 1429: C
! 1430: 0: C
! 1431: 1: C
! 1432: MK: B
! 1433: D
! 1434: No match, mark = B
! 1435:
! 1436: /(*MARK:A)(*THEN:B)(C|X)/KS
! 1437: C
! 1438: 0: C
! 1439: 1: C
! 1440: MK: B
! 1441: D
! 1442: No match, mark = B
! 1443:
! 1444: /(*MARK:A)(*THEN:B)(C|X)/KSY
! 1445: C
! 1446: 0: C
! 1447: 1: C
! 1448: MK: B
! 1449: D
! 1450: No match, mark = B
! 1451:
! 1452: /(*MARK:A)(*THEN:B)(C|X)/KSS
! 1453: C
! 1454: 0: C
! 1455: 1: C
! 1456: MK: B
! 1457: D
! 1458: No match, mark = B
! 1459:
! 1460: /--- This should fail, as the skip causes a bump to offset 3 (the skip) ---/
! 1461:
! 1462: /A(*MARK:A)A+(*SKIP)(B|Z) | AC/xK
! 1463: AAAC
! 1464: No match, mark = A
! 1465:
! 1466: /--- Same --/
! 1467:
! 1468: /A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/xK
! 1469: AAAC
! 1470: No match, mark = B
! 1471:
! 1472: /A(*:A)A+(*SKIP)(B|Z) | AC/xK
! 1473: AAAC
! 1474: No match, mark = A
! 1475:
! 1476: /--- This should fail, as a null name is the same as no name ---/
! 1477:
! 1478: /A(*MARK:A)A+(*SKIP:)(B|Z) | AC/xK
! 1479: AAAC
! 1480: No match, mark = A
! 1481:
! 1482: /--- A check on what happens after hitting a mark and them bumping along to
! 1483: something that does not even start. Perl reports tags after the failures here,
! 1484: though it does not when the individual letters are made into something
! 1485: more complicated. ---/
! 1486:
! 1487: /A(*:A)B|XX(*:B)Y/K
! 1488: AABC
! 1489: 0: AB
! 1490: MK: A
! 1491: XXYZ
! 1492: 0: XXY
! 1493: MK: B
! 1494: ** Failers
! 1495: No match
! 1496: XAQQ
! 1497: No match, mark = A
! 1498: XAQQXZZ
! 1499: No match, mark = A
! 1500: AXQQQ
! 1501: No match, mark = A
! 1502: AXXQQQ
! 1503: No match, mark = B
! 1504:
! 1505: /^(A(*THEN:A)B|C(*THEN:B)D)/K
! 1506: AB
! 1507: 0: AB
! 1508: 1: AB
! 1509: MK: A
! 1510: CD
! 1511: 0: CD
! 1512: 1: CD
! 1513: MK: B
! 1514: ** Failers
! 1515: No match
! 1516: AC
! 1517: No match, mark = A
! 1518: CB
! 1519: No match, mark = B
! 1520:
! 1521: /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
! 1522: AB
! 1523: 0: AB
! 1524: 1: AB
! 1525: MK: A
! 1526: CD
! 1527: 0: CD
! 1528: 1: CD
! 1529: MK: B
! 1530: ** Failers
! 1531: No match
! 1532: AC
! 1533: No match, mark = A
! 1534: CB
! 1535: No match, mark = B
! 1536:
! 1537: /--- An empty name does not pass back an empty string. It is the same as if no
! 1538: name were given. ---/
! 1539:
! 1540: /^(A(*PRUNE:)B|C(*PRUNE:B)D)/K
! 1541: AB
! 1542: 0: AB
! 1543: 1: AB
! 1544: CD
! 1545: 0: CD
! 1546: 1: CD
! 1547: MK: B
! 1548:
! 1549: /--- PRUNE goes to next bumpalong; COMMIT does not. ---/
! 1550:
! 1551: /A(*PRUNE:A)B/K
! 1552: ACAB
! 1553: 0: AB
! 1554: MK: A
! 1555:
! 1556: /--- Mark names can be duplicated ---/
! 1557:
! 1558: /A(*:A)B|X(*:A)Y/K
! 1559: AABC
! 1560: 0: AB
! 1561: MK: A
! 1562: XXYZ
! 1563: 0: XY
! 1564: MK: A
! 1565:
! 1566: /b(*:m)f|a(*:n)w/K
! 1567: aw
! 1568: 0: aw
! 1569: MK: n
! 1570: ** Failers
! 1571: No match, mark = n
! 1572: abc
! 1573: No match, mark = m
! 1574:
! 1575: /b(*:m)f|aw/K
! 1576: abaw
! 1577: 0: aw
! 1578: ** Failers
! 1579: No match
! 1580: abc
! 1581: No match, mark = m
! 1582: abax
! 1583: No match, mark = m
! 1584:
! 1585: /A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC/xK
! 1586: AAAC
! 1587: 0: AAC
! 1588:
! 1589: /a(*PRUNE:X)bc|qq/KY
! 1590: ** Failers
! 1591: No match, mark = X
! 1592: axy
! 1593: No match, mark = X
! 1594:
! 1595: /a(*THEN:X)bc|qq/KY
! 1596: ** Failers
! 1597: No match, mark = X
! 1598: axy
! 1599: No match, mark = X
! 1600:
! 1601: /(?=a(*MARK:A)b)..x/K
! 1602: abxy
! 1603: 0: abx
! 1604: MK: A
! 1605: ** Failers
! 1606: No match
! 1607: abpq
! 1608: No match
! 1609:
! 1610: /(?=a(*MARK:A)b)..(*:Y)x/K
! 1611: abxy
! 1612: 0: abx
! 1613: MK: Y
! 1614: ** Failers
! 1615: No match
! 1616: abpq
! 1617: No match
! 1618:
! 1619: /(?=a(*PRUNE:A)b)..x/K
! 1620: abxy
! 1621: 0: abx
! 1622: MK: A
! 1623: ** Failers
! 1624: No match
! 1625: abpq
! 1626: No match
! 1627:
! 1628: /(?=a(*PRUNE:A)b)..(*:Y)x/K
! 1629: abxy
! 1630: 0: abx
! 1631: MK: Y
! 1632: ** Failers
! 1633: No match
! 1634: abpq
! 1635: No match
! 1636:
! 1637: /(?=a(*THEN:A)b)..x/K
! 1638: abxy
! 1639: 0: abx
! 1640: MK: A
! 1641: ** Failers
! 1642: No match
! 1643: abpq
! 1644: No match
! 1645:
! 1646: /(?=a(*THEN:A)b)..(*:Y)x/K
! 1647: abxy
! 1648: 0: abx
! 1649: MK: Y
! 1650: ** Failers
! 1651: No match
! 1652: abpq
! 1653: No match
! 1654:
! 1655: /-- End of testinput11 --/
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>