/[pcre]/code/trunk/testdata/testinput1
ViewVC logotype

Diff of /code/trunk/testdata/testinput1

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 602 by ph10, Wed May 25 08:29:03 2011 UTC revision 1370 by ph10, Wed Oct 9 10:18:26 2013 UTC
# Line 1  Line 1 
1  /-- This set of tests is for features that are compatible with all versions of  /-- This set of tests is for features that are compatible with all versions of
2      Perl 5, in non-UTF-8 mode. --/      Perl >= 5.10, in non-UTF-8 mode. It should run clean for the 8-bit, 16-bit,
3        and 32-bit PCRE libraries. --/
4    
5  /the quick brown fox/  /the quick brown fox/
6      the quick brown fox      the quick brown fox
# Line 1482  Line 1483 
1483      abc\100\x30      abc\100\x30
1484      abc\100\060      abc\100\060
1485      abc\100\60      abc\100\60
1486    
1487    /^A\8B\9C$/
1488        A8B9C
1489        *** Failers
1490        A\08B\09C
1491    
1492    /^(A)(B)(C)(D)(E)(F)(G)(H)(I)\8\9$/
1493        ABCDEFGHIHI
1494    
1495  /abc\81/  /^[A\8B\9C]+$/
1496      abc\081      A8B9C
1497      abc\0\x38\x31      *** Failers
1498        A8B9C\x00
 /abc\91/  
     abc\091  
     abc\0\x39\x31  
1499    
1500  /(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/  /(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
1501      abcdefghijkllS      abcdefghijkllS
# Line 3772  Line 3778 
3778      abc123abc      abc123abc
3779      abc123bc      abc123bc
3780    
3781  /-- This tests for an IPv6 address in the form where it can have up to --/  /-- This tests for an IPv6 address in the form where it can have up to
3782  /-- eight components, one and only one of which is empty. This must be --/      eight components, one and only one of which is empty. This must be
3783  /-- an internal component. --/      an internal component. --/
3784    
3785  /^(?!:)                       # colon disallowed at start  /^(?!:)                       # colon disallowed at start
3786    (?:                         # start of item    (?:                         # start of item
# Line 4130  Line 4136 
4136      abcdef      abcdef
4137      ABCDEF      ABCDEF
4138    
4139    /((a|)+)+Z/
4140        Z
4141    
4142    /(a)b|(a)c/
4143        ac
4144    
4145    /(?>(a))b|(a)c/
4146        ac
4147    
4148    /(?=(a))ab|(a)c/
4149        ac
4150    
4151    /((?>(a))b|(a)c)/
4152        ac
4153    
4154    /((?>(a))b|(a)c)++/
4155        ac
4156    
4157    /(?:(?>(a))b|(a)c)++/
4158        ac
4159    
4160    /(?=(?>(a))b|(a)c)(..)/
4161        ac
4162    
4163    /(?>(?>(a))b|(a)c)/
4164        ac
4165    
4166    /(?:(?>([ab])))+a=/+
4167        =ba=
4168    
4169    /(?>([ab]))+a=/+
4170        =ba=
4171    
4172    /((?>(a+)b)+(aabab))/
4173        aaaabaaabaabab
4174    
4175    /(?>a+|ab)+?c/
4176        aabc
4177    
4178    /(?>a+|ab)+c/
4179        aabc
4180    
4181    /(?:a+|ab)+c/
4182        aabc
4183    
4184    /(?(?=(a))a)/
4185        a
4186    
4187    /(?(?=(a))a)(b)/
4188        ab
4189    
4190    /^(?:a|ab)++c/
4191        aaaabc
4192    
4193    /^(?>a|ab)++c/
4194        aaaabc
4195    
4196    /^(?:a|ab)+c/
4197        aaaabc
4198    
4199    /(?=abc){3}abc/+
4200        abcabcabc
4201        ** Failers
4202        xyz
4203    
4204    /(?=abc)+abc/+
4205        abcabcabc
4206        ** Failers
4207        xyz
4208    
4209    /(?=abc)++abc/+
4210        abcabcabc
4211        ** Failers
4212        xyz
4213    
4214    /(?=abc){0}xyz/
4215        xyz
4216    
4217    /(?=abc){1}xyz/
4218        ** Failers
4219        xyz
4220    
4221    /(?=(a))?./
4222        ab
4223        bc
4224    
4225    /(?=(a))??./
4226        ab
4227        bc
4228    
4229    /^(?=(?1))?[az]([abc])d/
4230        abd
4231        zcdxx
4232    
4233    /^(?!a){0}\w+/
4234        aaaaa
4235    
4236    /(?<=(abc))?xyz/
4237        abcxyz
4238        pqrxyz
4239    
4240    /^[\g<a>]+/
4241        ggg<<<aaa>>>
4242        ** Failers
4243        \\ga
4244    
4245    /^[\ga]+/
4246        gggagagaxyz
4247    
4248    /^[:a[:digit:]]+/
4249        aaaa444:::Z
4250    
4251    /^[:a[:digit:]:b]+/
4252        aaaa444:::bbbZ
4253    
4254    /[:a]xxx[b:]/
4255         :xxx:
4256    
4257    /(?<=a{2})b/i
4258        xaabc
4259        ** Failers
4260        xabc
4261    
4262    /(?<!a{2})b/i
4263        xabc
4264        ** Failers
4265        xaabc
4266    
4267    /(?<=a\h)c/
4268        xa c
4269    
4270    /(?<=[^a]{2})b/
4271        axxbc
4272        aAAbc
4273        ** Failers
4274        xaabc
4275    
4276    /(?<=[^a]{2})b/i
4277        axxbc
4278        ** Failers
4279        aAAbc
4280        xaabc
4281    
4282    /(?<=a\H)c/
4283        abc
4284    
4285    /(?<=a\V)c/
4286        abc
4287    
4288    /(?<=a\v)c/
4289        a\nc
4290    
4291    /(?(?=c)c|d)++Y/
4292        XcccddYX
4293    
4294    /(?(?=c)c|d)*+Y/
4295        XcccddYX
4296    
4297    /^(a{2,3}){2,}+a/
4298        aaaaaaa
4299        ** Failers
4300        aaaaaa
4301        aaaaaaaaa
4302    
4303    /^(a{2,3})++a/
4304        ** Failers
4305        aaaaaa
4306    
4307    /^(a{2,3})*+a/
4308        ** Failers
4309        aaaaaa
4310    
4311    /ab\Cde/
4312        abXde
4313    
4314    /(?<=ab\Cde)X/
4315        abZdeX
4316    
4317    /a[\CD]b/
4318        aCb
4319        aDb
4320    
4321    /a[\C-X]b/
4322        aJb
4323    
4324    /\H\h\V\v/
4325        X X\x0a
4326        X\x09X\x0b
4327        ** Failers
4328        \xa0 X\x0a
4329    
4330    /\H*\h+\V?\v{3,4}/
4331        \x09\x20\xa0X\x0a\x0b\x0c\x0d\x0a
4332        \x09\x20\xa0\x0a\x0b\x0c\x0d\x0a
4333        \x09\x20\xa0\x0a\x0b\x0c
4334        ** Failers
4335        \x09\x20\xa0\x0a\x0b
4336    
4337    /\H{3,4}/
4338        XY  ABCDE
4339        XY  PQR ST
4340    
4341    /.\h{3,4}./
4342        XY  AB    PQRS
4343    
4344    /\h*X\h?\H+Y\H?Z/
4345        >XNNNYZ
4346        >  X NYQZ
4347        ** Failers
4348        >XYZ
4349        >  X NY Z
4350    
4351    /\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c/
4352        >XY\x0aZ\x0aA\x0bNN\x0c
4353        >\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
4354    
4355    /(foo)\Kbar/
4356        foobar
4357    
4358    /(foo)(\Kbar|baz)/
4359        foobar
4360        foobaz
4361    
4362    /(foo\Kbar)baz/
4363        foobarbaz
4364    
4365    /abc\K|def\K/g+
4366        Xabcdefghi
4367    
4368    /ab\Kc|de\Kf/g+
4369        Xabcdefghi
4370    
4371    /(?=C)/g+
4372        ABCDECBA
4373    
4374    /^abc\K/+
4375        abcdef
4376        ** Failers
4377        defabcxyz
4378    
4379    /^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-02}Z/
4380        ababababbbabZXXXX
4381    
4382    /(?<A>tom|bon)-\g{A}/
4383        tom-tom
4384        bon-bon
4385    
4386    /(^(a|b\g{-1}))/
4387        bacxxx
4388    
4389    /(?|(abc)|(xyz))\1/
4390        abcabc
4391        xyzxyz
4392        ** Failers
4393        abcxyz
4394        xyzabc
4395    
4396    /(?|(abc)|(xyz))(?1)/
4397        abcabc
4398        xyzabc
4399        ** Failers
4400        xyzxyz
4401    
4402    /^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/
4403        XYabcdY
4404    
4405    /^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/
4406        XYabcdY
4407    
4408    /^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/
4409        XYabcdY
4410    
4411    /(?'abc'\w+):\k<abc>{2}/
4412        a:aaxyz
4413        ab:ababxyz
4414        ** Failers
4415        a:axyz
4416        ab:abxyz
4417    
4418    /(?'abc'\w+):\g{abc}{2}/
4419        a:aaxyz
4420        ab:ababxyz
4421        ** Failers
4422        a:axyz
4423        ab:abxyz
4424    
4425    /^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)/x
4426        abd
4427        ce
4428    
4429    /^(a.)\g-1Z/
4430        aXaXZ
4431    
4432    /^(a.)\g{-1}Z/
4433        aXaXZ
4434    
4435    /^(?(DEFINE) (?<A> a) (?<B> b) )  (?&A) (?&B) /x
4436        abcd
4437    
4438    /(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT))
4439      (?(DEFINE)
4440      (?<NAME_PAT>[a-z]+)
4441      (?<ADDRESS_PAT>\d+)
4442      )/x
4443        metcalfe 33
4444    
4445    /(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}/
4446        1.2.3.4
4447        131.111.10.206
4448        10.0.0.0
4449        ** Failers
4450        10.6
4451        455.3.4.5
4452    
4453    /\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))/
4454        1.2.3.4
4455        131.111.10.206
4456        10.0.0.0
4457        ** Failers
4458        10.6
4459        455.3.4.5
4460    
4461    /^(\w++|\s++)*$/
4462        now is the time for all good men to come to the aid of the party
4463        *** Failers
4464        this is not a line with only words and spaces!
4465    
4466    /(\d++)(\w)/
4467        12345a
4468        *** Failers
4469        12345+
4470    
4471    /a++b/
4472        aaab
4473    
4474    /(a++b)/
4475        aaab
4476    
4477    /(a++)b/
4478        aaab
4479    
4480    /([^()]++|\([^()]*\))+/
4481        ((abc(ade)ufh()()x
4482    
4483    /\(([^()]++|\([^()]+\))+\)/
4484        (abc)
4485        (abc(def)xyz)
4486        *** Failers
4487        ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
4488    
4489    /^([^()]|\((?1)*\))*$/
4490        abc
4491        a(b)c
4492        a(b(c))d
4493        *** Failers)
4494        a(b(c)d
4495    
4496    /^>abc>([^()]|\((?1)*\))*<xyz<$/
4497       >abc>123<xyz<
4498       >abc>1(2)3<xyz<
4499       >abc>(1(2)3)<xyz<
4500    
4501    /^(?:((.)(?1)\2|)|((.)(?3)\4|.))$/i
4502        1221
4503        Satanoscillatemymetallicsonatas
4504        AmanaplanacanalPanama
4505        AblewasIereIsawElba
4506        *** Failers
4507        Thequickbrownfox
4508    
4509    /^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/
4510        12
4511        (((2+2)*-3)-7)
4512        -12
4513        *** Failers
4514        ((2+2)*-3)-7)
4515    
4516    /^(x(y|(?1){2})z)/
4517        xyz
4518        xxyzxyzz
4519        *** Failers
4520        xxyzz
4521        xxyzxyzxyzz
4522    
4523    /((< (?: (?(R) \d++  | [^<>]*+) | (?2)) * >))/x
4524        <>
4525        <abcd>
4526        <abc <123> hij>
4527        <abc <def> hij>
4528        <abc<>def>
4529        <abc<>
4530        *** Failers
4531        <abc
4532    
4533    /^a+(*FAIL)/
4534        aaaaaa
4535    
4536    /a+b?c+(*FAIL)/
4537        aaabccc
4538    
4539    /a+b?(*PRUNE)c+(*FAIL)/
4540        aaabccc
4541    
4542    /a+b?(*COMMIT)c+(*FAIL)/
4543        aaabccc
4544    
4545    /a+b?(*SKIP)c+(*FAIL)/
4546        aaabcccaaabccc
4547    
4548    /^(?:aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
4549        aaaxxxxxx
4550        aaa++++++
4551        bbbxxxxx
4552        bbb+++++
4553        cccxxxx
4554        ccc++++
4555        dddddddd
4556    
4557    /^(aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
4558        aaaxxxxxx
4559        aaa++++++
4560        bbbxxxxx
4561        bbb+++++
4562        cccxxxx
4563        ccc++++
4564        dddddddd
4565    
4566    /a+b?(*THEN)c+(*FAIL)/
4567        aaabccc
4568    
4569    /(A (A|B(*ACCEPT)|C) D)(E)/x
4570        AB
4571        ABX
4572        AADE
4573        ACDE
4574        ** Failers
4575        AD
4576    
4577    /^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$/i
4578        1221
4579        Satan, oscillate my metallic sonatas!
4580        A man, a plan, a canal: Panama!
4581        Able was I ere I saw Elba.
4582        *** Failers
4583        The quick brown fox
4584    
4585    /^((.)(?1)\2|.)$/
4586        a
4587        aba
4588        aabaa
4589        abcdcba
4590        pqaabaaqp
4591        ablewasiereisawelba
4592        rhubarb
4593        the quick brown fox
4594    
4595    /(a)(?<=b(?1))/
4596        baz
4597        ** Failers
4598        caz
4599    
4600    /(?<=b(?1))(a)/
4601        zbaaz
4602        ** Failers
4603        aaa
4604    
4605    /(?<X>a)(?<=b(?&X))/
4606        baz
4607    
4608    /^(?|(abc)|(def))\1/
4609        abcabc
4610        defdef
4611        ** Failers
4612        abcdef
4613        defabc
4614    
4615    /^(?|(abc)|(def))(?1)/
4616        abcabc
4617        defabc
4618        ** Failers
4619        defdef
4620        abcdef
4621    
4622    /(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |b(?<quote> (?<apostrophe>')|(?<realquote>")) ) (?('quote')[a-z]+|[0-9]+)/xJ
4623        a\"aaaaa
4624        b\"aaaaa
4625        ** Failers
4626        b\"11111
4627    
4628    /(?:(?1)|B)(A(*F)|C)/
4629        ABCD
4630        CCD
4631        ** Failers
4632        CAD
4633    
4634    /^(?:(?1)|B)(A(*F)|C)/
4635        CCD
4636        BCD
4637        ** Failers
4638        ABCD
4639        CAD
4640        BAD
4641    
4642    /(?:(?1)|B)(A(*ACCEPT)XX|C)D/
4643        AAD
4644        ACD
4645        BAD
4646        BCD
4647        BAX
4648        ** Failers
4649        ACX
4650        ABC
4651    
4652    /(?(DEFINE)(A))B(?1)C/
4653        BAC
4654    
4655    /(?(DEFINE)((A)\2))B(?1)C/
4656        BAAC
4657    
4658    /(?<pn> \( ( [^()]++ | (?&pn) )* \) )/x
4659        (ab(cd)ef)
4660    
4661    /^(?=a(*SKIP)b|ac)/
4662        ** Failers
4663        ac
4664    
4665    /^(?=a(*PRUNE)b)/
4666        ab
4667        ** Failers
4668        ac
4669    
4670    /^(?=a(*ACCEPT)b)/
4671        ac
4672    
4673    /(?>a\Kb)/
4674        ab
4675    
4676    /((?>a\Kb))/
4677        ab
4678    
4679    /(a\Kb)/
4680        ab
4681    
4682    /^a\Kcz|ac/
4683        ac
4684    
4685    /(?>a\Kbz|ab)/
4686        ab
4687    
4688    /^(?&t)(?(DEFINE)(?<t>a\Kb))$/
4689        ab
4690    
4691    /^([^()]|\((?1)*\))*$/
4692        a(b)c
4693        a(b(c)d)e
4694    
4695    /(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))/
4696        0
4697        00
4698        0000
4699    
4700    /(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))/
4701        0
4702        00
4703        0000
4704    
4705    /--- This one does fail, as expected, in Perl. It needs the complex item at the
4706         end of the pattern. A single letter instead of (B|D) makes it not fail,
4707         which I think is a Perl bug. --- /
4708    
4709    /A(*COMMIT)(B|D)/
4710        ACABX
4711    
4712    /--- Check the use of names for failure ---/
4713    
4714    /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
4715        ** Failers
4716        AC
4717        CB
4718    
4719    /--- Force no study, otherwise mark is not seen. The studied version is in
4720         test 2 because it isn't Perl-compatible. ---/
4721    
4722    /(*MARK:A)(*SKIP:B)(C|X)/KSS
4723        C
4724        D
4725    
4726    /^(A(*THEN:A)B|C(*THEN:B)D)/K
4727        ** Failers
4728        CB
4729    
4730    /^(?:A(*THEN:A)B|C(*THEN:B)D)/K
4731        CB
4732    
4733    /^(?>A(*THEN:A)B|C(*THEN:B)D)/K
4734        CB
4735    
4736    /--- This should succeed, as the skip causes bump to offset 1 (the mark). Note
4737    that we have to have something complicated such as (B|Z) at the end because,
4738    for Perl, a simple character somehow causes an unwanted optimization to mess
4739    with the handling of backtracking verbs. ---/
4740    
4741    /A(*MARK:A)A+(*SKIP:A)(B|Z) | AC/xK
4742        AAAC
4743    
4744    /--- Test skipping over a non-matching mark. ---/
4745    
4746    /A(*MARK:A)A+(*MARK:B)(*SKIP:A)(B|Z) | AC/xK
4747        AAAC
4748    
4749    /--- Check shorthand for MARK ---/
4750    
4751    /A(*:A)A+(*SKIP:A)(B|Z) | AC/xK
4752        AAAC
4753    
4754    /--- Don't loop! Force no study, otherwise mark is not seen. ---/
4755    
4756    /(*:A)A+(*SKIP:A)(B|Z)/KSS
4757        AAAC
4758    
4759    /--- This should succeed, as a non-existent skip name disables the skip ---/
4760    
4761    /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/xK
4762        AAAC
4763    
4764    /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC(*:B)/xK
4765        AAAC
4766    
4767    /--- COMMIT at the start of a pattern should act like an anchor. Again,
4768    however, we need the complication for Perl. ---/
4769    
4770    /(*COMMIT)(A|P)(B|P)(C|P)/
4771        ABCDEFG
4772        ** Failers
4773        DEFGABC
4774    
4775    /--- COMMIT inside an atomic group can't stop backtracking over the group. ---/
4776    
4777    /(\w+)(?>b(*COMMIT))\w{2}/
4778        abbb
4779    
4780    /(\w+)b(*COMMIT)\w{2}/
4781        abbb
4782    
4783    /--- Check opening parens in comment when seeking forward reference. ---/
4784    
4785    /(?&t)(?#()(?(DEFINE)(?<t>a))/
4786        bac
4787    
4788    /--- COMMIT should override THEN ---/
4789    
4790    /(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?/
4791      yes
4792    
4793    /(?>(*COMMIT)(yes|no)(*THEN)(*F))?/
4794      yes
4795    
4796    /b?(*SKIP)c/
4797        bc
4798        abc
4799    
4800    /(*SKIP)bc/
4801        a
4802    
4803    /(*SKIP)b/
4804        a
4805    
4806    /(?P<abn>(?P=abn)xxx|)+/
4807        xxx
4808    
4809    /(?i:([^b]))(?1)/
4810        aa
4811        aA
4812        ** Failers
4813        ab
4814        aB
4815        Ba
4816        ba
4817    
4818    /^(?&t)*+(?(DEFINE)(?<t>a))\w$/
4819        aaaaaaX
4820        ** Failers
4821        aaaaaa
4822    
4823    /^(?&t)*(?(DEFINE)(?<t>a))\w$/
4824        aaaaaaX
4825        aaaaaa
4826    
4827    /^(a)*+(\w)/
4828        aaaaX
4829        YZ
4830        ** Failers
4831        aaaa
4832    
4833    /^(?:a)*+(\w)/
4834        aaaaX
4835        YZ
4836        ** Failers
4837        aaaa
4838    
4839    /^(a)++(\w)/
4840        aaaaX
4841        ** Failers
4842        aaaa
4843        YZ
4844    
4845    /^(?:a)++(\w)/
4846        aaaaX
4847        ** Failers
4848        aaaa
4849        YZ
4850    
4851    /^(a)?+(\w)/
4852        aaaaX
4853        YZ
4854    
4855    /^(?:a)?+(\w)/
4856        aaaaX
4857        YZ
4858    
4859    /^(a){2,}+(\w)/
4860        aaaaX
4861        ** Failers
4862        aaa
4863        YZ
4864    
4865    /^(?:a){2,}+(\w)/
4866        aaaaX
4867        ** Failers
4868        aaa
4869        YZ
4870    
4871    /(a|)*(?1)b/
4872        b
4873        ab
4874        aab
4875    
4876    /(a)++(?1)b/
4877        ** Failers
4878        ab
4879        aab
4880    
4881    /(a)*+(?1)b/
4882        ** Failers
4883        ab
4884        aab
4885    
4886    /(?1)(?:(b)){0}/
4887        b
4888    
4889    /(foo ( \( ((?:(?> [^()]+ )|(?2))*) \) ) )/x
4890        foo(bar(baz)+baz(bop))
4891    
4892    /(A (A|B(*ACCEPT)|C) D)(E)/x
4893        AB
4894    
4895    /\A.*?(a|bc)/
4896        ba
4897    
4898    /\A.*?(?:a|bc)++/
4899        ba
4900    
4901    /\A.*?(a|bc)++/
4902        ba
4903    
4904    /\A.*?(?:a|bc|d)/
4905        ba
4906    
4907    /(?:(b))++/
4908        beetle
4909    
4910    /(?(?=(a(*ACCEPT)z))a)/
4911        a
4912    
4913    /^(a)(?1)+ab/
4914        aaaab
4915    
4916    /^(a)(?1)++ab/
4917        aaaab
4918    
4919    /^(?=a(*:M))aZ/K
4920        aZbc
4921    
4922    /^(?!(*:M)b)aZ/K
4923        aZbc
4924    
4925    /(?(DEFINE)(a))?b(?1)/
4926        backgammon
4927    
4928    /^\N+/
4929        abc\ndef
4930    
4931    /^\N{1,}/
4932        abc\ndef
4933    
4934    /(?(R)a+|(?R)b)/
4935        aaaabcde
4936    
4937    /(?(R)a+|((?R))b)/
4938        aaaabcde
4939    
4940    /((?(R)a+|(?1)b))/
4941        aaaabcde
4942    
4943    /((?(R1)a+|(?1)b))/
4944        aaaabcde
4945    
4946    /a(*:any
4947    name)/K
4948        abc
4949    
4950    /(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))/
4951        a
4952        ba
4953        bba
4954    
4955    /--- Checking revised (*THEN) handling ---/
4956    
4957    /--- Capture ---/
4958    
4959    /^.*? (a(*THEN)b) c/x
4960        aabc
4961    
4962    /^.*? (a(*THEN)b|(*F)) c/x
4963        aabc
4964    
4965    /^.*? ( (a(*THEN)b) | (*F) ) c/x
4966        aabc
4967    
4968    /^.*? ( (a(*THEN)b) ) c/x
4969        aabc
4970    
4971    /--- Non-capture ---/
4972    
4973    /^.*? (?:a(*THEN)b) c/x
4974        aabc
4975    
4976    /^.*? (?:a(*THEN)b|(*F)) c/x
4977        aabc
4978    
4979    /^.*? (?: (?:a(*THEN)b) | (*F) ) c/x
4980        aabc
4981    
4982    /^.*? (?: (?:a(*THEN)b) ) c/x
4983        aabc
4984    
4985    /--- Atomic ---/
4986    
4987    /^.*? (?>a(*THEN)b) c/x
4988        aabc
4989    
4990    /^.*? (?>a(*THEN)b|(*F)) c/x
4991        aabc
4992    
4993    /^.*? (?> (?>a(*THEN)b) | (*F) ) c/x
4994        aabc
4995    
4996    /^.*? (?> (?>a(*THEN)b) ) c/x
4997        aabc
4998    
4999    /--- Possessive capture ---/
5000    
5001    /^.*? (a(*THEN)b)++ c/x
5002        aabc
5003    
5004    /^.*? (a(*THEN)b|(*F))++ c/x
5005        aabc
5006    
5007    /^.*? ( (a(*THEN)b)++ | (*F) )++ c/x
5008        aabc
5009    
5010    /^.*? ( (a(*THEN)b)++ )++ c/x
5011        aabc
5012    
5013    /--- Possessive non-capture ---/
5014    
5015    /^.*? (?:a(*THEN)b)++ c/x
5016        aabc
5017    
5018    /^.*? (?:a(*THEN)b|(*F))++ c/x
5019        aabc
5020    
5021    /^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c/x
5022        aabc
5023    
5024    /^.*? (?: (?:a(*THEN)b)++ )++ c/x
5025        aabc
5026    
5027    /--- Condition assertion ---/
5028    
5029    /^(?(?=a(*THEN)b)ab|ac)/
5030        ac
5031    
5032    /--- Condition ---/
5033    
5034    /^.*?(?(?=a)a|b(*THEN)c)/
5035        ba
5036    
5037    /^.*?(?:(?(?=a)a|b(*THEN)c)|d)/
5038        ba
5039    
5040    /^.*?(?(?=a)a(*THEN)b|c)/
5041        ac
5042    
5043    /--- Assertion ---/
5044    
5045    /^.*(?=a(*THEN)b)/
5046        aabc
5047    
5048    /------------------------------/
5049    
5050    /(?>a(*:m))/imsxSK
5051        a
5052    
5053    /(?>(a)(*:m))/imsxSK
5054        a
5055    
5056    /(?<=a(*ACCEPT)b)c/
5057        xacd
5058    
5059    /(?<=(a(*ACCEPT)b))c/
5060        xacd
5061    
5062    /(?<=(a(*COMMIT)b))c/
5063        xabcd
5064        ** Failers
5065        xacd
5066    
5067    /(?<!a(*FAIL)b)c/
5068        xcd
5069        acd
5070    
5071    /(?<=a(*:N)b)c/K
5072        xabcd
5073    
5074    /(?<=a(*PRUNE)b)c/
5075        xabcd
5076    
5077    /(?<=a(*SKIP)b)c/
5078        xabcd
5079    
5080    /(?<=a(*THEN)b)c/
5081        xabcd
5082    
5083    /(a)(?2){2}(.)/
5084        abcd
5085    
5086    /(*MARK:A)(*PRUNE:B)(C|X)/KS
5087        C
5088        D
5089    
5090    /(*MARK:A)(*PRUNE:B)(C|X)/KSS
5091        C
5092        D
5093    
5094    /(*MARK:A)(*THEN:B)(C|X)/KS
5095        C
5096        D
5097    
5098    /(*MARK:A)(*THEN:B)(C|X)/KSY
5099        C
5100        D
5101    
5102    /(*MARK:A)(*THEN:B)(C|X)/KSS
5103        C
5104        D
5105    
5106    /--- This should fail, as the skip causes a bump to offset 3 (the skip) ---/
5107    
5108    /A(*MARK:A)A+(*SKIP)(B|Z) | AC/xK
5109        AAAC
5110    
5111    /--- Same --/
5112    
5113    /A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/xK
5114        AAAC
5115    
5116    /A(*:A)A+(*SKIP)(B|Z) | AC/xK
5117        AAAC
5118    
5119    /--- This should fail, as a null name is the same as no name ---/
5120    
5121    /A(*MARK:A)A+(*SKIP:)(B|Z) | AC/xK
5122        AAAC
5123    
5124    /--- A check on what happens after hitting a mark and them bumping along to
5125    something that does not even start. Perl reports tags after the failures here,
5126    though it does not when the individual letters are made into something
5127    more complicated. ---/
5128    
5129    /A(*:A)B|XX(*:B)Y/K
5130        AABC
5131        XXYZ
5132        ** Failers
5133        XAQQ
5134        XAQQXZZ
5135        AXQQQ
5136        AXXQQQ
5137    
5138    /^(A(*THEN:A)B|C(*THEN:B)D)/K
5139        AB
5140        CD
5141        ** Failers
5142        AC
5143        CB
5144    
5145    /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
5146        AB
5147        CD
5148        ** Failers
5149        AC
5150        CB
5151    
5152    /--- An empty name does not pass back an empty string. It is the same as if no
5153    name were given. ---/
5154    
5155    /^(A(*PRUNE:)B|C(*PRUNE:B)D)/K
5156        AB
5157        CD
5158    
5159    /--- PRUNE goes to next bumpalong; COMMIT does not. ---/
5160    
5161    /A(*PRUNE:A)B/K
5162        ACAB
5163    
5164    /--- Mark names can be duplicated ---/
5165    
5166    /A(*:A)B|X(*:A)Y/K
5167        AABC
5168        XXYZ
5169    
5170    /b(*:m)f|a(*:n)w/K
5171        aw
5172        ** Failers
5173        abc
5174    
5175    /b(*:m)f|aw/K
5176        abaw
5177        ** Failers
5178        abc
5179        abax
5180    
5181    /A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC/xK
5182        AAAC
5183    
5184    /a(*PRUNE:X)bc|qq/KY
5185        ** Failers
5186        axy
5187    
5188    /a(*THEN:X)bc|qq/KY
5189        ** Failers
5190        axy
5191    
5192    /(?=a(*MARK:A)b)..x/K
5193        abxy
5194        ** Failers
5195        abpq
5196    
5197    /(?=a(*MARK:A)b)..(*:Y)x/K
5198        abxy
5199        ** Failers
5200        abpq
5201    
5202    /(?=a(*PRUNE:A)b)..x/K
5203        abxy
5204        ** Failers
5205        abpq
5206    
5207    /(?=a(*PRUNE:A)b)..(*:Y)x/K
5208        abxy
5209        ** Failers
5210        abpq
5211    
5212    /(?=a(*THEN:A)b)..x/K
5213        abxy
5214        ** Failers
5215        abpq
5216    
5217    /(?=a(*THEN:A)b)..(*:Y)x/K
5218        abxy
5219        ** Failers
5220        abpq
5221    
5222    /(another)?(\1?)test/
5223        hello world test
5224    
5225    /(another)?(\1+)test/
5226        hello world test
5227    
5228    /(a(*COMMIT)b){0}a(?1)|aac/
5229        aac
5230    
5231    /((?:a?)*)*c/
5232      aac
5233    
5234    /((?>a?)*)*c/
5235      aac
5236    
5237    /(?>.*?a)(?<=ba)/
5238        aba
5239    
5240    /(?:.*?a)(?<=ba)/
5241        aba
5242    
5243    /.*?a(*PRUNE)b/
5244        aab
5245    
5246    /.*?a(*PRUNE)b/s
5247        aab
5248    
5249    /^a(*PRUNE)b/s
5250        aab
5251    
5252    /.*?a(*SKIP)b/
5253        aab
5254    
5255    /(?>.*?a)b/s
5256        aab
5257    
5258    /(?>.*?a)b/
5259        aab
5260    
5261    /(?>^a)b/s
5262        aab
5263    
5264    /(?>.*?)(?<=(abcd)|(wxyz))/
5265        alphabetabcd
5266        endingwxyz
5267    
5268    /(?>.*)(?<=(abcd)|(wxyz))/
5269        alphabetabcd
5270        endingwxyz
5271    
5272    "(?>.*)foo"
5273        abcdfooxyz
5274    
5275    "(?>.*?)foo"
5276        abcdfooxyz
5277    
5278    /(?:(a(*PRUNE)b)){0}(?:(?1)|ac)/
5279        ac
5280    
5281    /(?:(a(*SKIP)b)){0}(?:(?1)|ac)/
5282        ac
5283    
5284    /(?<=(*SKIP)ac)a/
5285        aa
5286    
5287    /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/xK
5288        AAAC
5289    
5290    /a(*SKIP:m)x|ac(*:n)(*SKIP:n)d|ac/K
5291        acacd
5292    
5293    /A(*SKIP:m)x|A(*SKIP:n)x|AB/K
5294        AB
5295    
5296    /((*SKIP:r)d){0}a(*SKIP:m)x|ac(*:n)|ac/K
5297        acacd
5298    
5299    /-- Tests that try to figure out how Perl works. My hypothesis is that the
5300        first verb that is backtracked onto is the one that acts. This seems to be
5301        the case almost all the time, but there is one exception that is perhaps a
5302        bug. --/
5303    
5304    /-- This matches "aaaac"; each PRUNE advances one character until the subject
5305        no longer starts with 5 'a's. --/
5306    
5307    /aaaaa(*PRUNE)b|a+c/
5308        aaaaaac
5309    
5310    /-- Putting SKIP in front of PRUNE makes no difference, as it is never
5311    backtracked onto, whether or not it has a label. --/
5312    
5313    /aaaaa(*SKIP)(*PRUNE)b|a+c/
5314        aaaaaac
5315    
5316    /aaaaa(*SKIP:N)(*PRUNE)b|a+c/
5317        aaaaaac
5318    
5319    /aaaa(*:N)a(*SKIP:N)(*PRUNE)b|a+c/
5320        aaaaaac
5321    
5322    /-- Putting THEN in front makes no difference. */
5323    
5324    /aaaaa(*THEN)(*PRUNE)b|a+c/
5325        aaaaaac
5326    
5327    /-- However, putting COMMIT in front of the prune changes it to "no match". I
5328        think this is inconsistent and possibly a bug. For the moment, running this
5329        test is moved out of the Perl-compatible file. --/
5330    
5331    /aaaaa(*COMMIT)(*PRUNE)b|a+c/
5332    
5333    
5334    /---- OK, lets play the same game again using SKIP instead of PRUNE. ----/
5335    
5336    /-- This matches "ac" because SKIP forces the next match to start on the
5337        sixth "a". --/
5338    
5339    /aaaaa(*SKIP)b|a+c/
5340        aaaaaac
5341    
5342    /-- Putting PRUNE in front makes no difference. --/
5343    
5344    /aaaaa(*PRUNE)(*SKIP)b|a+c/
5345        aaaaaac
5346    
5347    /-- Putting THEN in front makes no difference. --/
5348    
5349    /aaaaa(*THEN)(*SKIP)b|a+c/
5350        aaaaaac
5351    
5352    /-- In this case, neither does COMMIT. This still matches "ac". --/
5353    
5354    /aaaaa(*COMMIT)(*SKIP)b|a+c/
5355        aaaaaac
5356    
5357    /-- This gives "no match", as expected. --/
5358    
5359    /aaaaa(*COMMIT)b|a+c/
5360        aaaaaac
5361    
5362    
5363    /------ Tests using THEN ------/
5364    
5365    /-- This matches "aaaaaac", as expected. --/
5366    
5367    /aaaaa(*THEN)b|a+c/
5368        aaaaaac
5369    
5370    /-- Putting SKIP in front makes no difference. --/
5371    
5372    /aaaaa(*SKIP)(*THEN)b|a+c/
5373        aaaaaac
5374    
5375    /-- Putting PRUNE in front makes no difference. --/
5376    
5377    /aaaaa(*PRUNE)(*THEN)b|a+c/
5378        aaaaaac
5379    
5380    /-- Putting COMMIT in front makes no difference. --/
5381    
5382    /aaaaa(*COMMIT)(*THEN)b|a+c/
5383        aaaaaac
5384    
5385    /-- End of "priority" tests --/
5386    
5387    /aaaaa(*:m)(*PRUNE:m)(*SKIP:m)m|a+/
5388        aaaaaa
5389    
5390    /aaaaa(*:m)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/
5391        aaaaaa
5392    
5393    /aaaaa(*:n)(*PRUNE:m)(*SKIP:m)m|a+/
5394        aaaaaa
5395    
5396    /aaaaa(*:n)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/
5397        aaaaaa
5398    
5399    /a(*MARK:A)aa(*PRUNE:A)a(*SKIP:A)b|a+c/
5400        aaaac
5401    
5402    /a(*MARK:A)aa(*MARK:A)a(*SKIP:A)b|a+c/
5403        aaaac
5404    
5405    /aaa(*PRUNE:A)a(*SKIP:A)b|a+c/
5406        aaaac
5407    
5408    /aaa(*MARK:A)a(*SKIP:A)b|a+c/
5409        aaaac
5410    
5411    /a(*:m)a(*COMMIT)(*SKIP:m)b|a+c/K
5412        aaaaaac
5413    
5414    /.?(a|b(*THEN)c)/
5415        ba
5416    
5417    /(a(*COMMIT)b)c|abd/
5418        abc
5419        abd
5420    
5421    /(?=a(*COMMIT)b)abc|abd/
5422        abc
5423        abd
5424    
5425    /(?>a(*COMMIT)b)c|abd/
5426        abc
5427        abd
5428    
5429    /a(?=b(*COMMIT)c)[^d]|abd/
5430        abd
5431        abc
5432    
5433    /a(?=bc).|abd/
5434        abd
5435        abc
5436    
5437    /a(?>b(*COMMIT)c)d|abd/
5438        abceabd
5439    
5440    /a(?>bc)d|abd/
5441        abceabd
5442    
5443    /(?>a(*COMMIT)b)c|abd/
5444        abd
5445    
5446    /(?>a(*COMMIT)c)d|abd/
5447        abd
5448    
5449    /((?=a(*COMMIT)b)ab|ac){0}(?:(?1)|a(c))/
5450        ac
5451    
5452    /-- These tests were formerly in test 2, but changes in PCRE and Perl have
5453        made them compatible. --/
5454    
5455    /^(a)?(?(1)a|b)+$/
5456        *** Failers
5457        a
5458    
5459    /(?=a\Kb)ab/
5460        ab
5461    
5462    /(?!a\Kb)ac/
5463        ac
5464    
5465    /^abc(?<=b\Kc)d/
5466        abcd
5467    
5468    /^abc(?<!b\Kq)d/
5469        abcd
5470    
5471    
5472    /A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC/xK
5473        AAAC
5474    
5475    /^((abc|abcx)(*THEN)y|abcd)/
5476        abcd
5477        *** Failers
5478        abcxy
5479    
5480    /^((yes|no)(*THEN)(*F))?/
5481      yes
5482    
5483    /(A (.*)   C? (*THEN)  | A D) (*FAIL)/x
5484    AbcdCBefgBhiBqz
5485    
5486    /(A (.*)   C? (*THEN)  | A D) z/x
5487    AbcdCBefgBhiBqz
5488    
5489    /(A (.*)   C? (*THEN)  | A D) \s* (*FAIL)/x
5490    AbcdCBefgBhiBqz
5491    
5492    /(A (.*)   C? (*THEN)  | A D) \s* z/x
5493    AbcdCBefgBhiBqz
5494    
5495    /(A (.*)   (?:C|) (*THEN)  | A D) (*FAIL)/x
5496    AbcdCBefgBhiBqz
5497    
5498    /(A (.*)   (?:C|) (*THEN)  | A D) z/x
5499    AbcdCBefgBhiBqz
5500    
5501    /(A (.*)   C{0,6} (*THEN)  | A D) (*FAIL)/x
5502    AbcdCBefgBhiBqz
5503    
5504    /(A (.*)   C{0,6} (*THEN)  | A D) z/x
5505    AbcdCBefgBhiBqz
5506    
5507    /(A (.*)   (CE){0,6} (*THEN)  | A D) (*FAIL)/x
5508    AbcdCEBefgBhiBqz
5509    
5510    /(A (.*)   (CE){0,6} (*THEN)  | A D) z/x
5511    AbcdCEBefgBhiBqz
5512    
5513    /(A (.*)   (CE*){0,6} (*THEN)  | A D) (*FAIL)/x
5514    AbcdCBefgBhiBqz
5515    
5516    /(A (.*)   (CE*){0,6} (*THEN)  | A D) z/x
5517    AbcdCBefgBhiBqz
5518    
5519    /(?=a(*COMMIT)b|ac)ac|ac/
5520        ac
5521    
5522    /(?=a(*COMMIT)b|(ac)) ac | (a)c/x
5523        ac
5524    
5525    /--------/
5526    
5527    /(?(?!b(*THEN)a)bn|bnn)/
5528       bnn
5529    
5530    /(?!b(*SKIP)a)bn|bnn/
5531        bnn
5532    
5533    /(?(?!b(*SKIP)a)bn|bnn)/
5534       bnn
5535    
5536    /(?!b(*PRUNE)a)bn|bnn/
5537        bnn
5538    
5539    /(?(?!b(*PRUNE)a)bn|bnn)/
5540       bnn
5541    
5542    /(?!b(*COMMIT)a)bn|bnn/
5543        bnn
5544    
5545    /(?(?!b(*COMMIT)a)bn|bnn)/
5546       bnn
5547    
5548    /(?=b(*SKIP)a)bn|bnn/
5549        bnn
5550    
5551    /(?=b(*THEN)a)bn|bnn/
5552        bnn
5553    
5554     /^(?!a(*SKIP)b)/
5555         ac
5556    
5557     /^(?!a(*SKIP)b)../
5558         acd
5559    
5560    /(?!a(*SKIP)b)../
5561         acd
5562    
5563    /^(?(?!a(*SKIP)b))/
5564         ac
5565    
5566    /^(?!a(*PRUNE)b)../
5567         acd
5568    
5569    /(?!a(*PRUNE)b)../
5570         acd
5571    
5572     /(?!a(*COMMIT)b)ac|cd/
5573         ac
5574    
5575    /\A.*?(?:a|bc)/
5576        ba
5577    
5578    /^(A(*THEN)B|C(*THEN)D)/
5579        CD
5580    
5581    /(*:m(m)(?&y)(?(DEFINE)(?<y>b))/K
5582        abc
5583    
5584    /(*PRUNE:m(m)(?&y)(?(DEFINE)(?<y>b))/K
5585        abc
5586    
5587    /(*SKIP:m(m)(?&y)(?(DEFINE)(?<y>b))/K
5588        abc
5589    
5590    /(*THEN:m(m)(?&y)(?(DEFINE)(?<y>b))/K
5591        abc
5592    
5593    /^\d*\w{4}/
5594        1234
5595        123
5596    
5597    /^[^b]*\w{4}/
5598        aaaa
5599        aaa
5600    
5601    /^[^b]*\w{4}/i
5602        aaaa
5603        aaa
5604    
5605    /^a*\w{4}/
5606        aaaa
5607        aaa
5608    
5609    /^a*\w{4}/i
5610        aaaa
5611        aaa
5612    
5613    /(?(?=ab)ab)/+
5614        ca
5615        cd
5616    
5617    /(?:(?<n>foo)|(?<n>bar))\k<n>/J
5618        foofoo
5619        barbar
5620    
5621    /(?<n>A)(?:(?<n>foo)|(?<n>bar))\k<n>/J
5622        AfooA
5623        AbarA
5624        ** Failers
5625        Afoofoo
5626        Abarbar
5627    
5628    /^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
5629        1 IN SOA non-sp1 non-sp2(
5630    
5631    /^ (?:(?<A>A)|(?'B'B)(?<A>A)) (?('A')x) (?(<B>)y)$/xJ
5632        Ax
5633        BAxy
5634    
5635    /^A\xZ/
5636        A\0Z
5637    
5638    /^A\o{123}B/
5639        A\123B
5640    
5641  /-- End of testinput1 --/  /-- End of testinput1 --/

Legend:
Removed from v.602  
changed lines
  Added in v.1370

  ViewVC Help
Powered by ViewVC 1.1.5