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

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

  ViewVC Help
Powered by ViewVC 1.1.5