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

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

  ViewVC Help
Powered by ViewVC 1.1.5