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

Diff of /code/trunk/testdata/testoutput1

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

revision 472 by ph10, Fri Dec 11 16:42:50 2009 UTC revision 1365 by ph10, Sun Oct 6 18:33:56 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 3752  No match Line 3753  No match
3753      foobarbaz      foobarbaz
3754  No match  No match
3755    
3756  /The case of aaaaaa is missed out below because I think Perl 5.005_02 gets/  /The cases of aaaa and aaaaaa are missed out below because Perl does things/
3757  /it wrong; it sets $1 to aaa rather than aa. Compare the following test,/  /differently. We know that odd, and maybe incorrect, things happen with/
3758  No match  No match
3759  /where it does set $1 to aa when matching aaaaaa./  /recursive references in Perl, as far as 5.11.3 - see some stuff in test #2./
3760  No match  No match
3761    
3762  /^(a\1?){4}$/  /^(a\1?){4}$/
# Line 3765  No match Line 3766  No match
3766  No match  No match
3767      aaa      aaa
3768  No match  No match
     aaaa  
  0: aaaa  
  1: a  
3769      aaaaa      aaaaa
3770   0: aaaaa   0: aaaaa
3771   1: a   1: a
# Line 6008  No match Line 6006  No match
6006    
6007  /[\s]+/  /[\s]+/
6008      > \x09\x0a\x0c\x0d\x0b<      > \x09\x0a\x0c\x0d\x0b<
6009   0:  \x09\x0a\x0c\x0d   0:  \x09\x0a\x0c\x0d\x0b
6010    
6011  /\s+/  /\s+/
6012      > \x09\x0a\x0c\x0d\x0b<      > \x09\x0a\x0c\x0d\x0b<
6013   0:  \x09\x0a\x0c\x0d   0:  \x09\x0a\x0c\x0d\x0b
6014    
6015  /a b/x  /a b/x
6016      ab      ab
6017  No match   0: ab
6018    
6019  /(?!\A)x/m  /(?!\A)x/m
6020    a\nxb\n    a\nxb\n
# Line 6162  No match Line 6160  No match
6160   1: bc   1: bc
6161   2: bc   2: bc
6162    
6163  /-- 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
6164  /-- 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
6165  No match      an internal component. --/
 /-- an internal component. --/  
 No match  
6166    
6167  /^(?!:)                       # colon disallowed at start  /^(?!:)                       # colon disallowed at start
6168    (?:                         # start of item    (?:                         # start of item
# Line 6661  No match Line 6657  No match
6657      XABX      XABX
6658  No match  No match
6659    
6660    /[\x00-\xff\s]+/
6661        \x0a\x0b\x0c\x0d
6662     0: \x0a\x0b\x0c\x0d
6663    
6664    /^\c/
6665        ?
6666     0: ?
6667    
6668    /(abc)\1/i
6669       abc
6670    No match
6671    
6672    /(abc)\1/
6673       abc
6674    No match
6675    
6676    /[^a]*/i
6677        12abc
6678     0: 12
6679        12ABC
6680     0: 12
6681    
6682    /[^a]*+/i
6683        12abc
6684     0: 12
6685        12ABC
6686     0: 12
6687    
6688    /[^a]*?X/i
6689        ** Failers
6690    No match
6691        12abc
6692    No match
6693        12ABC
6694    No match
6695    
6696    /[^a]+?X/i
6697        ** Failers
6698    No match
6699        12abc
6700    No match
6701        12ABC
6702    No match
6703    
6704    /[^a]?X/i
6705        12aXbcX
6706     0: X
6707        12AXBCX
6708     0: X
6709        BCX
6710     0: CX
6711    
6712    /[^a]??X/i
6713        12aXbcX
6714     0: X
6715        12AXBCX
6716     0: X
6717        BCX
6718     0: CX
6719    
6720    /[^a]?+X/i
6721        12aXbcX
6722     0: cX
6723        12AXBCX
6724     0: CX
6725        BCX
6726     0: CX
6727    
6728    /[^a]{2,3}/i
6729        abcdef
6730     0: bcd
6731        ABCDEF
6732     0: BCD
6733    
6734    /[^a]{2,3}?/i
6735        abcdef
6736     0: bc
6737        ABCDEF
6738     0: BC
6739    
6740    /[^a]{2,3}+/i
6741        abcdef
6742     0: bcd
6743        ABCDEF
6744     0: BCD
6745    
6746    /((a|)+)+Z/
6747        Z
6748     0: Z
6749     1:
6750     2:
6751    
6752    /(a)b|(a)c/
6753        ac
6754     0: ac
6755     1: <unset>
6756     2: a
6757    
6758    /(?>(a))b|(a)c/
6759        ac
6760     0: ac
6761     1: <unset>
6762     2: a
6763    
6764    /(?=(a))ab|(a)c/
6765        ac
6766     0: ac
6767     1: <unset>
6768     2: a
6769    
6770    /((?>(a))b|(a)c)/
6771        ac
6772     0: ac
6773     1: ac
6774     2: <unset>
6775     3: a
6776    
6777    /((?>(a))b|(a)c)++/
6778        ac
6779     0: ac
6780     1: ac
6781     2: <unset>
6782     3: a
6783    
6784    /(?:(?>(a))b|(a)c)++/
6785        ac
6786     0: ac
6787     1: <unset>
6788     2: a
6789    
6790    /(?=(?>(a))b|(a)c)(..)/
6791        ac
6792     0: ac
6793     1: <unset>
6794     2: a
6795     3: ac
6796    
6797    /(?>(?>(a))b|(a)c)/
6798        ac
6799     0: ac
6800     1: <unset>
6801     2: a
6802    
6803    /(?:(?>([ab])))+a=/+
6804        =ba=
6805     0: ba=
6806     0+
6807     1: b
6808    
6809    /(?>([ab]))+a=/+
6810        =ba=
6811     0: ba=
6812     0+
6813     1: b
6814    
6815    /((?>(a+)b)+(aabab))/
6816        aaaabaaabaabab
6817     0: aaaabaaabaabab
6818     1: aaaabaaabaabab
6819     2: aaa
6820     3: aabab
6821    
6822    /(?>a+|ab)+?c/
6823        aabc
6824    No match
6825    
6826    /(?>a+|ab)+c/
6827        aabc
6828    No match
6829    
6830    /(?:a+|ab)+c/
6831        aabc
6832     0: aabc
6833    
6834    /(?(?=(a))a)/
6835        a
6836     0: a
6837     1: a
6838    
6839    /(?(?=(a))a)(b)/
6840        ab
6841     0: ab
6842     1: a
6843     2: b
6844    
6845    /^(?:a|ab)++c/
6846        aaaabc
6847    No match
6848    
6849    /^(?>a|ab)++c/
6850        aaaabc
6851    No match
6852    
6853    /^(?:a|ab)+c/
6854        aaaabc
6855     0: aaaabc
6856    
6857    /(?=abc){3}abc/+
6858        abcabcabc
6859     0: abc
6860     0+ abcabc
6861        ** Failers
6862    No match
6863        xyz
6864    No match
6865    
6866    /(?=abc)+abc/+
6867        abcabcabc
6868     0: abc
6869     0+ abcabc
6870        ** Failers
6871    No match
6872        xyz
6873    No match
6874    
6875    /(?=abc)++abc/+
6876        abcabcabc
6877     0: abc
6878     0+ abcabc
6879        ** Failers
6880    No match
6881        xyz
6882    No match
6883    
6884    /(?=abc){0}xyz/
6885        xyz
6886     0: xyz
6887    
6888    /(?=abc){1}xyz/
6889        ** Failers
6890    No match
6891        xyz
6892    No match
6893    
6894    /(?=(a))?./
6895        ab
6896     0: a
6897     1: a
6898        bc
6899     0: b
6900    
6901    /(?=(a))??./
6902        ab
6903     0: a
6904        bc
6905     0: b
6906    
6907    /^(?=(?1))?[az]([abc])d/
6908        abd
6909     0: abd
6910     1: b
6911        zcdxx
6912     0: zcd
6913     1: c
6914    
6915    /^(?!a){0}\w+/
6916        aaaaa
6917     0: aaaaa
6918    
6919    /(?<=(abc))?xyz/
6920        abcxyz
6921     0: xyz
6922     1: abc
6923        pqrxyz
6924     0: xyz
6925    
6926    /^[\g<a>]+/
6927        ggg<<<aaa>>>
6928     0: ggg<<<aaa>>>
6929        ** Failers
6930    No match
6931        \\ga
6932    No match
6933    
6934    /^[\ga]+/
6935        gggagagaxyz
6936     0: gggagaga
6937    
6938    /^[:a[:digit:]]+/
6939        aaaa444:::Z
6940     0: aaaa444:::
6941    
6942    /^[:a[:digit:]:b]+/
6943        aaaa444:::bbbZ
6944     0: aaaa444:::bbb
6945    
6946    /[:a]xxx[b:]/
6947         :xxx:
6948     0: :xxx:
6949    
6950    /(?<=a{2})b/i
6951        xaabc
6952     0: b
6953        ** Failers
6954    No match
6955        xabc
6956    No match
6957    
6958    /(?<!a{2})b/i
6959        xabc
6960     0: b
6961        ** Failers
6962    No match
6963        xaabc
6964    No match
6965    
6966    /(?<=a\h)c/
6967        xa c
6968     0: c
6969    
6970    /(?<=[^a]{2})b/
6971        axxbc
6972     0: b
6973        aAAbc
6974     0: b
6975        ** Failers
6976    No match
6977        xaabc
6978    No match
6979    
6980    /(?<=[^a]{2})b/i
6981        axxbc
6982     0: b
6983        ** Failers
6984    No match
6985        aAAbc
6986    No match
6987        xaabc
6988    No match
6989    
6990    /(?<=a\H)c/
6991        abc
6992     0: c
6993    
6994    /(?<=a\V)c/
6995        abc
6996     0: c
6997    
6998    /(?<=a\v)c/
6999        a\nc
7000     0: c
7001    
7002    /(?(?=c)c|d)++Y/
7003        XcccddYX
7004     0: cccddY
7005    
7006    /(?(?=c)c|d)*+Y/
7007        XcccddYX
7008     0: cccddY
7009    
7010    /^(a{2,3}){2,}+a/
7011        aaaaaaa
7012     0: aaaaaaa
7013     1: aaa
7014        ** Failers
7015    No match
7016        aaaaaa
7017    No match
7018        aaaaaaaaa
7019    No match
7020    
7021    /^(a{2,3})++a/
7022        ** Failers
7023    No match
7024        aaaaaa
7025    No match
7026    
7027    /^(a{2,3})*+a/
7028        ** Failers
7029    No match
7030        aaaaaa
7031    No match
7032    
7033    /ab\Cde/
7034        abXde
7035     0: abXde
7036    
7037    /(?<=ab\Cde)X/
7038        abZdeX
7039     0: X
7040    
7041    /a[\CD]b/
7042        aCb
7043     0: aCb
7044        aDb
7045     0: aDb
7046    
7047    /a[\C-X]b/
7048        aJb
7049     0: aJb
7050    
7051    /\H\h\V\v/
7052        X X\x0a
7053     0: X X\x0a
7054        X\x09X\x0b
7055     0: X\x09X\x0b
7056        ** Failers
7057    No match
7058        \xa0 X\x0a
7059    No match
7060    
7061    /\H*\h+\V?\v{3,4}/
7062        \x09\x20\xa0X\x0a\x0b\x0c\x0d\x0a
7063     0: \x09 \xa0X\x0a\x0b\x0c\x0d
7064        \x09\x20\xa0\x0a\x0b\x0c\x0d\x0a
7065     0: \x09 \xa0\x0a\x0b\x0c\x0d
7066        \x09\x20\xa0\x0a\x0b\x0c
7067     0: \x09 \xa0\x0a\x0b\x0c
7068        ** Failers
7069    No match
7070        \x09\x20\xa0\x0a\x0b
7071    No match
7072    
7073    /\H{3,4}/
7074        XY  ABCDE
7075     0: ABCD
7076        XY  PQR ST
7077     0: PQR
7078    
7079    /.\h{3,4}./
7080        XY  AB    PQRS
7081     0: B    P
7082    
7083    /\h*X\h?\H+Y\H?Z/
7084        >XNNNYZ
7085     0: XNNNYZ
7086        >  X NYQZ
7087     0:   X NYQZ
7088        ** Failers
7089    No match
7090        >XYZ
7091    No match
7092        >  X NY Z
7093    No match
7094    
7095    /\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c/
7096        >XY\x0aZ\x0aA\x0bNN\x0c
7097     0: XY\x0aZ\x0aA\x0bNN\x0c
7098        >\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
7099     0: \x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
7100    
7101    /(foo)\Kbar/
7102        foobar
7103     0: bar
7104     1: foo
7105    
7106    /(foo)(\Kbar|baz)/
7107        foobar
7108     0: bar
7109     1: foo
7110     2: bar
7111        foobaz
7112     0: foobaz
7113     1: foo
7114     2: baz
7115    
7116    /(foo\Kbar)baz/
7117        foobarbaz
7118     0: barbaz
7119     1: foobar
7120    
7121    /abc\K|def\K/g+
7122        Xabcdefghi
7123     0:
7124     0+ defghi
7125     0:
7126     0+ ghi
7127    
7128    /ab\Kc|de\Kf/g+
7129        Xabcdefghi
7130     0: c
7131     0+ defghi
7132     0: f
7133     0+ ghi
7134    
7135    /(?=C)/g+
7136        ABCDECBA
7137     0:
7138     0+ CDECBA
7139     0:
7140     0+ CBA
7141    
7142    /^abc\K/+
7143        abcdef
7144     0:
7145     0+ def
7146        ** Failers
7147    No match
7148        defabcxyz
7149    No match
7150    
7151    /^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-02}Z/
7152        ababababbbabZXXXX
7153     0: ababababbbabZ
7154     1: ab
7155     2: b
7156    
7157    /(?<A>tom|bon)-\g{A}/
7158        tom-tom
7159     0: tom-tom
7160     1: tom
7161        bon-bon
7162     0: bon-bon
7163     1: bon
7164    
7165    /(^(a|b\g{-1}))/
7166        bacxxx
7167    No match
7168    
7169    /(?|(abc)|(xyz))\1/
7170        abcabc
7171     0: abcabc
7172     1: abc
7173        xyzxyz
7174     0: xyzxyz
7175     1: xyz
7176        ** Failers
7177    No match
7178        abcxyz
7179    No match
7180        xyzabc
7181    No match
7182    
7183    /(?|(abc)|(xyz))(?1)/
7184        abcabc
7185     0: abcabc
7186     1: abc
7187        xyzabc
7188     0: xyzabc
7189     1: xyz
7190        ** Failers
7191    No match
7192        xyzxyz
7193    No match
7194    
7195    /^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/
7196        XYabcdY
7197     0: XYabcdY
7198     1: a
7199     2: b
7200     3: c
7201     4: d
7202     5: Y
7203    
7204    /^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/
7205        XYabcdY
7206     0: XYabcdY
7207     1: a
7208     2: b
7209     3: <unset>
7210     4: <unset>
7211     5: c
7212     6: d
7213     7: Y
7214    
7215    /^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/
7216        XYabcdY
7217     0: XYabcdY
7218     1: a
7219     2: b
7220     3: <unset>
7221     4: <unset>
7222     5: c
7223     6: d
7224     7: Y
7225    
7226    /(?'abc'\w+):\k<abc>{2}/
7227        a:aaxyz
7228     0: a:aa
7229     1: a
7230        ab:ababxyz
7231     0: ab:abab
7232     1: ab
7233        ** Failers
7234    No match
7235        a:axyz
7236    No match
7237        ab:abxyz
7238    No match
7239    
7240    /(?'abc'\w+):\g{abc}{2}/
7241        a:aaxyz
7242     0: a:aa
7243     1: a
7244        ab:ababxyz
7245     0: ab:abab
7246     1: ab
7247        ** Failers
7248    No match
7249        a:axyz
7250    No match
7251        ab:abxyz
7252    No match
7253    
7254    /^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)/x
7255        abd
7256     0: abd
7257     1: a
7258        ce
7259     0: ce
7260    
7261    /^(a.)\g-1Z/
7262        aXaXZ
7263     0: aXaXZ
7264     1: aX
7265    
7266    /^(a.)\g{-1}Z/
7267        aXaXZ
7268     0: aXaXZ
7269     1: aX
7270    
7271    /^(?(DEFINE) (?<A> a) (?<B> b) )  (?&A) (?&B) /x
7272        abcd
7273     0: ab
7274    
7275    /(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT))
7276      (?(DEFINE)
7277      (?<NAME_PAT>[a-z]+)
7278      (?<ADDRESS_PAT>\d+)
7279      )/x
7280        metcalfe 33
7281     0: metcalfe 33
7282     1: metcalfe
7283     2: 33
7284    
7285    /(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}/
7286        1.2.3.4
7287     0: 1.2.3.4
7288     1: <unset>
7289     2: .4
7290        131.111.10.206
7291     0: 131.111.10.206
7292     1: <unset>
7293     2: .206
7294        10.0.0.0
7295     0: 10.0.0.0
7296     1: <unset>
7297     2: .0
7298        ** Failers
7299    No match
7300        10.6
7301    No match
7302        455.3.4.5
7303    No match
7304    
7305    /\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))/
7306        1.2.3.4
7307     0: 1.2.3.4
7308     1: .4
7309        131.111.10.206
7310     0: 131.111.10.206
7311     1: .206
7312        10.0.0.0
7313     0: 10.0.0.0
7314     1: .0
7315        ** Failers
7316    No match
7317        10.6
7318    No match
7319        455.3.4.5
7320    No match
7321    
7322    /^(\w++|\s++)*$/
7323        now is the time for all good men to come to the aid of the party
7324     0: now is the time for all good men to come to the aid of the party
7325     1: party
7326        *** Failers
7327    No match
7328        this is not a line with only words and spaces!
7329    No match
7330    
7331    /(\d++)(\w)/
7332        12345a
7333     0: 12345a
7334     1: 12345
7335     2: a
7336        *** Failers
7337    No match
7338        12345+
7339    No match
7340    
7341    /a++b/
7342        aaab
7343     0: aaab
7344    
7345    /(a++b)/
7346        aaab
7347     0: aaab
7348     1: aaab
7349    
7350    /(a++)b/
7351        aaab
7352     0: aaab
7353     1: aaa
7354    
7355    /([^()]++|\([^()]*\))+/
7356        ((abc(ade)ufh()()x
7357     0: abc(ade)ufh()()x
7358     1: x
7359    
7360    /\(([^()]++|\([^()]+\))+\)/
7361        (abc)
7362     0: (abc)
7363     1: abc
7364        (abc(def)xyz)
7365     0: (abc(def)xyz)
7366     1: xyz
7367        *** Failers
7368    No match
7369        ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
7370    No match
7371    
7372    /^([^()]|\((?1)*\))*$/
7373        abc
7374     0: abc
7375     1: c
7376        a(b)c
7377     0: a(b)c
7378     1: c
7379        a(b(c))d
7380     0: a(b(c))d
7381     1: d
7382        *** Failers)
7383    No match
7384        a(b(c)d
7385    No match
7386    
7387    /^>abc>([^()]|\((?1)*\))*<xyz<$/
7388       >abc>123<xyz<
7389     0: >abc>123<xyz<
7390     1: 3
7391       >abc>1(2)3<xyz<
7392     0: >abc>1(2)3<xyz<
7393     1: 3
7394       >abc>(1(2)3)<xyz<
7395     0: >abc>(1(2)3)<xyz<
7396     1: (1(2)3)
7397    
7398    /^(?:((.)(?1)\2|)|((.)(?3)\4|.))$/i
7399        1221
7400     0: 1221
7401     1: 1221
7402     2: 1
7403        Satanoscillatemymetallicsonatas
7404     0: Satanoscillatemymetallicsonatas
7405     1: <unset>
7406     2: <unset>
7407     3: Satanoscillatemymetallicsonatas
7408     4: S
7409        AmanaplanacanalPanama
7410     0: AmanaplanacanalPanama
7411     1: <unset>
7412     2: <unset>
7413     3: AmanaplanacanalPanama
7414     4: A
7415        AblewasIereIsawElba
7416     0: AblewasIereIsawElba
7417     1: <unset>
7418     2: <unset>
7419     3: AblewasIereIsawElba
7420     4: A
7421        *** Failers
7422    No match
7423        Thequickbrownfox
7424    No match
7425    
7426    /^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/
7427        12
7428     0: 12
7429     1: 12
7430        (((2+2)*-3)-7)
7431     0: (((2+2)*-3)-7)
7432     1: (((2+2)*-3)-7)
7433     2: -
7434        -12
7435     0: -12
7436     1: -12
7437        *** Failers
7438    No match
7439        ((2+2)*-3)-7)
7440    No match
7441    
7442    /^(x(y|(?1){2})z)/
7443        xyz
7444     0: xyz
7445     1: xyz
7446     2: y
7447        xxyzxyzz
7448     0: xxyzxyzz
7449     1: xxyzxyzz
7450     2: xyzxyz
7451        *** Failers
7452    No match
7453        xxyzz
7454    No match
7455        xxyzxyzxyzz
7456    No match
7457    
7458    /((< (?: (?(R) \d++  | [^<>]*+) | (?2)) * >))/x
7459        <>
7460     0: <>
7461     1: <>
7462     2: <>
7463        <abcd>
7464     0: <abcd>
7465     1: <abcd>
7466     2: <abcd>
7467        <abc <123> hij>
7468     0: <abc <123> hij>
7469     1: <abc <123> hij>
7470     2: <abc <123> hij>
7471        <abc <def> hij>
7472     0: <def>
7473     1: <def>
7474     2: <def>
7475        <abc<>def>
7476     0: <abc<>def>
7477     1: <abc<>def>
7478     2: <abc<>def>
7479        <abc<>
7480     0: <>
7481     1: <>
7482     2: <>
7483        *** Failers
7484    No match
7485        <abc
7486    No match
7487    
7488    /^a+(*FAIL)/
7489        aaaaaa
7490    No match
7491    
7492    /a+b?c+(*FAIL)/
7493        aaabccc
7494    No match
7495    
7496    /a+b?(*PRUNE)c+(*FAIL)/
7497        aaabccc
7498    No match
7499    
7500    /a+b?(*COMMIT)c+(*FAIL)/
7501        aaabccc
7502    No match
7503    
7504    /a+b?(*SKIP)c+(*FAIL)/
7505        aaabcccaaabccc
7506    No match
7507    
7508    /^(?:aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
7509        aaaxxxxxx
7510     0: aaaxxxxxx
7511        aaa++++++
7512     0: aaa
7513        bbbxxxxx
7514     0: bbbxxxxx
7515        bbb+++++
7516     0: bbb
7517        cccxxxx
7518     0: cccxxxx
7519        ccc++++
7520     0: ccc
7521        dddddddd
7522     0: ddd
7523    
7524    /^(aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
7525        aaaxxxxxx
7526     0: aaaxxxxxx
7527     1: aaaxxxxxx
7528        aaa++++++
7529     0: aaa
7530     1: aaa
7531        bbbxxxxx
7532     0: bbbxxxxx
7533     1: bbbxxxxx
7534        bbb+++++
7535     0: bbb
7536     1: bbb
7537        cccxxxx
7538     0: cccxxxx
7539     1: cccxxxx
7540        ccc++++
7541     0: ccc
7542     1: ccc
7543        dddddddd
7544     0: ddd
7545     1: ddd
7546    
7547    /a+b?(*THEN)c+(*FAIL)/
7548        aaabccc
7549    No match
7550    
7551    /(A (A|B(*ACCEPT)|C) D)(E)/x
7552        AB
7553     0: AB
7554     1: AB
7555     2: B
7556        ABX
7557     0: AB
7558     1: AB
7559     2: B
7560        AADE
7561     0: AADE
7562     1: AAD
7563     2: A
7564     3: E
7565        ACDE
7566     0: ACDE
7567     1: ACD
7568     2: C
7569     3: E
7570        ** Failers
7571    No match
7572        AD
7573    No match
7574    
7575    /^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$/i
7576        1221
7577     0: 1221
7578     1: 1221
7579     2: 1
7580        Satan, oscillate my metallic sonatas!
7581     0: Satan, oscillate my metallic sonatas!
7582     1: <unset>
7583     2: <unset>
7584     3: Satan, oscillate my metallic sonatas
7585     4: S
7586        A man, a plan, a canal: Panama!
7587     0: A man, a plan, a canal: Panama!
7588     1: <unset>
7589     2: <unset>
7590     3: A man, a plan, a canal: Panama
7591     4: A
7592        Able was I ere I saw Elba.
7593     0: Able was I ere I saw Elba.
7594     1: <unset>
7595     2: <unset>
7596     3: Able was I ere I saw Elba
7597     4: A
7598        *** Failers
7599    No match
7600        The quick brown fox
7601    No match
7602    
7603    /^((.)(?1)\2|.)$/
7604        a
7605     0: a
7606     1: a
7607        aba
7608     0: aba
7609     1: aba
7610     2: a
7611        aabaa
7612     0: aabaa
7613     1: aabaa
7614     2: a
7615        abcdcba
7616     0: abcdcba
7617     1: abcdcba
7618     2: a
7619        pqaabaaqp
7620     0: pqaabaaqp
7621     1: pqaabaaqp
7622     2: p
7623        ablewasiereisawelba
7624     0: ablewasiereisawelba
7625     1: ablewasiereisawelba
7626     2: a
7627        rhubarb
7628    No match
7629        the quick brown fox
7630    No match
7631    
7632    /(a)(?<=b(?1))/
7633        baz
7634     0: a
7635     1: a
7636        ** Failers
7637    No match
7638        caz
7639    No match
7640    
7641    /(?<=b(?1))(a)/
7642        zbaaz
7643     0: a
7644     1: a
7645        ** Failers
7646    No match
7647        aaa
7648    No match
7649    
7650    /(?<X>a)(?<=b(?&X))/
7651        baz
7652     0: a
7653     1: a
7654    
7655    /^(?|(abc)|(def))\1/
7656        abcabc
7657     0: abcabc
7658     1: abc
7659        defdef
7660     0: defdef
7661     1: def
7662        ** Failers
7663    No match
7664        abcdef
7665    No match
7666        defabc
7667    No match
7668    
7669    /^(?|(abc)|(def))(?1)/
7670        abcabc
7671     0: abcabc
7672     1: abc
7673        defabc
7674     0: defabc
7675     1: def
7676        ** Failers
7677    No match
7678        defdef
7679    No match
7680        abcdef
7681    No match
7682    
7683    /(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |b(?<quote> (?<apostrophe>')|(?<realquote>")) ) (?('quote')[a-z]+|[0-9]+)/xJ
7684        a\"aaaaa
7685     0: a"aaaaa
7686     1: "
7687     2: <unset>
7688     3: "
7689        b\"aaaaa
7690     0: b"aaaaa
7691     1: <unset>
7692     2: <unset>
7693     3: <unset>
7694     4: "
7695     5: <unset>
7696     6: "
7697        ** Failers
7698    No match
7699        b\"11111
7700    No match
7701    
7702    /(?:(?1)|B)(A(*F)|C)/
7703        ABCD
7704     0: BC
7705     1: C
7706        CCD
7707     0: CC
7708     1: C
7709        ** Failers
7710    No match
7711        CAD
7712    No match
7713    
7714    /^(?:(?1)|B)(A(*F)|C)/
7715        CCD
7716     0: CC
7717     1: C
7718        BCD
7719     0: BC
7720     1: C
7721        ** Failers
7722    No match
7723        ABCD
7724    No match
7725        CAD
7726    No match
7727        BAD
7728    No match
7729    
7730    /(?:(?1)|B)(A(*ACCEPT)XX|C)D/
7731        AAD
7732     0: AA
7733     1: A
7734        ACD
7735     0: ACD
7736     1: C
7737        BAD
7738     0: BA
7739     1: A
7740        BCD
7741     0: BCD
7742     1: C
7743        BAX
7744     0: BA
7745     1: A
7746        ** Failers
7747    No match
7748        ACX
7749    No match
7750        ABC
7751    No match
7752    
7753    /(?(DEFINE)(A))B(?1)C/
7754        BAC
7755     0: BAC
7756    
7757    /(?(DEFINE)((A)\2))B(?1)C/
7758        BAAC
7759     0: BAAC
7760    
7761    /(?<pn> \( ( [^()]++ | (?&pn) )* \) )/x
7762        (ab(cd)ef)
7763     0: (ab(cd)ef)
7764     1: (ab(cd)ef)
7765     2: ef
7766    
7767    /^(?=a(*SKIP)b|ac)/
7768        ** Failers
7769    No match
7770        ac
7771    No match
7772    
7773    /^(?=a(*PRUNE)b)/
7774        ab
7775     0:
7776        ** Failers
7777    No match
7778        ac
7779    No match
7780    
7781    /^(?=a(*ACCEPT)b)/
7782        ac
7783     0:
7784    
7785    /(?>a\Kb)/
7786        ab
7787     0: b
7788    
7789    /((?>a\Kb))/
7790        ab
7791     0: b
7792     1: ab
7793    
7794    /(a\Kb)/
7795        ab
7796     0: b
7797     1: ab
7798    
7799    /^a\Kcz|ac/
7800        ac
7801     0: ac
7802    
7803    /(?>a\Kbz|ab)/
7804        ab
7805     0: ab
7806    
7807    /^(?&t)(?(DEFINE)(?<t>a\Kb))$/
7808        ab
7809     0: b
7810    
7811    /^([^()]|\((?1)*\))*$/
7812        a(b)c
7813     0: a(b)c
7814     1: c
7815        a(b(c)d)e
7816     0: a(b(c)d)e
7817     1: e
7818    
7819    /(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))/
7820        0
7821     0: 0
7822     1: 0
7823        00
7824     0: 00
7825     1: 00
7826     2: 0
7827        0000
7828     0: 0000
7829     1: 0000
7830     2: 0
7831    
7832    /(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))/
7833        0
7834     0: 0
7835     1: 0
7836     2: 0
7837        00
7838     0: 0
7839     1: 0
7840     2: 0
7841        0000
7842     0: 0
7843     1: 0
7844     2: 0
7845    
7846    /--- This one does fail, as expected, in Perl. It needs the complex item at the
7847         end of the pattern. A single letter instead of (B|D) makes it not fail,
7848         which I think is a Perl bug. --- /
7849    
7850    /A(*COMMIT)(B|D)/
7851        ACABX
7852    No match
7853    
7854    /--- Check the use of names for failure ---/
7855    
7856    /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
7857        ** Failers
7858    No match
7859        AC
7860    No match, mark = A
7861        CB
7862    No match, mark = B
7863    
7864    /--- Force no study, otherwise mark is not seen. The studied version is in
7865         test 2 because it isn't Perl-compatible. ---/
7866    
7867    /(*MARK:A)(*SKIP:B)(C|X)/KSS
7868        C
7869     0: C
7870     1: C
7871    MK: A
7872        D
7873    No match, mark = A
7874    
7875    /^(A(*THEN:A)B|C(*THEN:B)D)/K
7876        ** Failers
7877    No match
7878        CB
7879    No match, mark = B
7880    
7881    /^(?:A(*THEN:A)B|C(*THEN:B)D)/K
7882        CB
7883    No match, mark = B
7884    
7885    /^(?>A(*THEN:A)B|C(*THEN:B)D)/K
7886        CB
7887    No match, mark = B
7888    
7889    /--- This should succeed, as the skip causes bump to offset 1 (the mark). Note
7890    that we have to have something complicated such as (B|Z) at the end because,
7891    for Perl, a simple character somehow causes an unwanted optimization to mess
7892    with the handling of backtracking verbs. ---/
7893    
7894    /A(*MARK:A)A+(*SKIP:A)(B|Z) | AC/xK
7895        AAAC
7896     0: AC
7897    
7898    /--- Test skipping over a non-matching mark. ---/
7899    
7900    /A(*MARK:A)A+(*MARK:B)(*SKIP:A)(B|Z) | AC/xK
7901        AAAC
7902     0: AC
7903    
7904    /--- Check shorthand for MARK ---/
7905    
7906    /A(*:A)A+(*SKIP:A)(B|Z) | AC/xK
7907        AAAC
7908     0: AC
7909    
7910    /--- Don't loop! Force no study, otherwise mark is not seen. ---/
7911    
7912    /(*:A)A+(*SKIP:A)(B|Z)/KSS
7913        AAAC
7914    No match, mark = A
7915    
7916    /--- This should succeed, as a non-existent skip name disables the skip ---/
7917    
7918    /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/xK
7919        AAAC
7920     0: AC
7921    
7922    /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC(*:B)/xK
7923        AAAC
7924     0: AC
7925    MK: B
7926    
7927    /--- COMMIT at the start of a pattern should act like an anchor. Again,
7928    however, we need the complication for Perl. ---/
7929    
7930    /(*COMMIT)(A|P)(B|P)(C|P)/
7931        ABCDEFG
7932     0: ABC
7933     1: A
7934     2: B
7935     3: C
7936        ** Failers
7937    No match
7938        DEFGABC
7939    No match
7940    
7941    /--- COMMIT inside an atomic group can't stop backtracking over the group. ---/
7942    
7943    /(\w+)(?>b(*COMMIT))\w{2}/
7944        abbb
7945     0: abbb
7946     1: a
7947    
7948    /(\w+)b(*COMMIT)\w{2}/
7949        abbb
7950    No match
7951    
7952    /--- Check opening parens in comment when seeking forward reference. ---/
7953    
7954    /(?&t)(?#()(?(DEFINE)(?<t>a))/
7955        bac
7956     0: a
7957    
7958    /--- COMMIT should override THEN ---/
7959    
7960    /(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?/
7961      yes
7962    No match
7963    
7964    /(?>(*COMMIT)(yes|no)(*THEN)(*F))?/
7965      yes
7966    No match
7967    
7968    /b?(*SKIP)c/
7969        bc
7970     0: bc
7971        abc
7972     0: bc
7973    
7974    /(*SKIP)bc/
7975        a
7976    No match
7977    
7978    /(*SKIP)b/
7979        a
7980    No match
7981    
7982    /(?P<abn>(?P=abn)xxx|)+/
7983        xxx
7984     0:
7985     1:
7986    
7987    /(?i:([^b]))(?1)/
7988        aa
7989     0: aa
7990     1: a
7991        aA
7992     0: aA
7993     1: a
7994        ** Failers
7995     0: **
7996     1: *
7997        ab
7998    No match
7999        aB
8000    No match
8001        Ba
8002    No match
8003        ba
8004    No match
8005    
8006    /^(?&t)*+(?(DEFINE)(?<t>a))\w$/
8007        aaaaaaX
8008     0: aaaaaaX
8009        ** Failers
8010    No match
8011        aaaaaa
8012    No match
8013    
8014    /^(?&t)*(?(DEFINE)(?<t>a))\w$/
8015        aaaaaaX
8016     0: aaaaaaX
8017        aaaaaa
8018     0: aaaaaa
8019    
8020    /^(a)*+(\w)/
8021        aaaaX
8022     0: aaaaX
8023     1: a
8024     2: X
8025        YZ
8026     0: Y
8027     1: <unset>
8028     2: Y
8029        ** Failers
8030    No match
8031        aaaa
8032    No match
8033    
8034    /^(?:a)*+(\w)/
8035        aaaaX
8036     0: aaaaX
8037     1: X
8038        YZ
8039     0: Y
8040     1: Y
8041        ** Failers
8042    No match
8043        aaaa
8044    No match
8045    
8046    /^(a)++(\w)/
8047        aaaaX
8048     0: aaaaX
8049     1: a
8050     2: X
8051        ** Failers
8052    No match
8053        aaaa
8054    No match
8055        YZ
8056    No match
8057    
8058    /^(?:a)++(\w)/
8059        aaaaX
8060     0: aaaaX
8061     1: X
8062        ** Failers
8063    No match
8064        aaaa
8065    No match
8066        YZ
8067    No match
8068    
8069    /^(a)?+(\w)/
8070        aaaaX
8071     0: aa
8072     1: a
8073     2: a
8074        YZ
8075     0: Y
8076     1: <unset>
8077     2: Y
8078    
8079    /^(?:a)?+(\w)/
8080        aaaaX
8081     0: aa
8082     1: a
8083        YZ
8084     0: Y
8085     1: Y
8086    
8087    /^(a){2,}+(\w)/
8088        aaaaX
8089     0: aaaaX
8090     1: a
8091     2: X
8092        ** Failers
8093    No match
8094        aaa
8095    No match
8096        YZ
8097    No match
8098    
8099    /^(?:a){2,}+(\w)/
8100        aaaaX
8101     0: aaaaX
8102     1: X
8103        ** Failers
8104    No match
8105        aaa
8106    No match
8107        YZ
8108    No match
8109    
8110    /(a|)*(?1)b/
8111        b
8112     0: b
8113     1:
8114        ab
8115     0: ab
8116     1:
8117        aab
8118     0: aab
8119     1:
8120    
8121    /(a)++(?1)b/
8122        ** Failers
8123    No match
8124        ab
8125    No match
8126        aab
8127    No match
8128    
8129    /(a)*+(?1)b/
8130        ** Failers
8131    No match
8132        ab
8133    No match
8134        aab
8135    No match
8136    
8137    /(?1)(?:(b)){0}/
8138        b
8139     0: b
8140    
8141    /(foo ( \( ((?:(?> [^()]+ )|(?2))*) \) ) )/x
8142        foo(bar(baz)+baz(bop))
8143     0: foo(bar(baz)+baz(bop))
8144     1: foo(bar(baz)+baz(bop))
8145     2: (bar(baz)+baz(bop))
8146     3: bar(baz)+baz(bop)
8147    
8148    /(A (A|B(*ACCEPT)|C) D)(E)/x
8149        AB
8150     0: AB
8151     1: AB
8152     2: B
8153    
8154    /\A.*?(a|bc)/
8155        ba
8156     0: ba
8157     1: a
8158    
8159    /\A.*?(?:a|bc)++/
8160        ba
8161     0: ba
8162    
8163    /\A.*?(a|bc)++/
8164        ba
8165     0: ba
8166     1: a
8167    
8168    /\A.*?(?:a|bc|d)/
8169        ba
8170     0: ba
8171    
8172    /(?:(b))++/
8173        beetle
8174     0: b
8175     1: b
8176    
8177    /(?(?=(a(*ACCEPT)z))a)/
8178        a
8179     0: a
8180     1: a
8181    
8182    /^(a)(?1)+ab/
8183        aaaab
8184     0: aaaab
8185     1: a
8186    
8187    /^(a)(?1)++ab/
8188        aaaab
8189    No match
8190    
8191    /^(?=a(*:M))aZ/K
8192        aZbc
8193     0: aZ
8194    MK: M
8195    
8196    /^(?!(*:M)b)aZ/K
8197        aZbc
8198     0: aZ
8199    
8200    /(?(DEFINE)(a))?b(?1)/
8201        backgammon
8202     0: ba
8203    
8204    /^\N+/
8205        abc\ndef
8206     0: abc
8207    
8208    /^\N{1,}/
8209        abc\ndef
8210     0: abc
8211    
8212    /(?(R)a+|(?R)b)/
8213        aaaabcde
8214     0: aaaab
8215    
8216    /(?(R)a+|((?R))b)/
8217        aaaabcde
8218     0: aaaab
8219     1: aaaa
8220    
8221    /((?(R)a+|(?1)b))/
8222        aaaabcde
8223     0: aaaab
8224     1: aaaab
8225    
8226    /((?(R1)a+|(?1)b))/
8227        aaaabcde
8228     0: aaaab
8229     1: aaaab
8230    
8231    /a(*:any
8232    name)/K
8233        abc
8234     0: a
8235    MK: any \x0aname
8236    
8237    /(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))/
8238        a
8239     0: a
8240        ba
8241     0: a
8242        bba
8243     0: a
8244    
8245    /--- Checking revised (*THEN) handling ---/
8246    
8247    /--- Capture ---/
8248    
8249    /^.*? (a(*THEN)b) c/x
8250        aabc
8251    No match
8252    
8253    /^.*? (a(*THEN)b|(*F)) c/x
8254        aabc
8255     0: aabc
8256     1: ab
8257    
8258    /^.*? ( (a(*THEN)b) | (*F) ) c/x
8259        aabc
8260     0: aabc
8261     1: ab
8262     2: ab
8263    
8264    /^.*? ( (a(*THEN)b) ) c/x
8265        aabc
8266    No match
8267    
8268    /--- Non-capture ---/
8269    
8270    /^.*? (?:a(*THEN)b) c/x
8271        aabc
8272    No match
8273    
8274    /^.*? (?:a(*THEN)b|(*F)) c/x
8275        aabc
8276     0: aabc
8277    
8278    /^.*? (?: (?:a(*THEN)b) | (*F) ) c/x
8279        aabc
8280     0: aabc
8281    
8282    /^.*? (?: (?:a(*THEN)b) ) c/x
8283        aabc
8284    No match
8285    
8286    /--- Atomic ---/
8287    
8288    /^.*? (?>a(*THEN)b) c/x
8289        aabc
8290    No match
8291    
8292    /^.*? (?>a(*THEN)b|(*F)) c/x
8293        aabc
8294     0: aabc
8295    
8296    /^.*? (?> (?>a(*THEN)b) | (*F) ) c/x
8297        aabc
8298     0: aabc
8299    
8300    /^.*? (?> (?>a(*THEN)b) ) c/x
8301        aabc
8302    No match
8303    
8304    /--- Possessive capture ---/
8305    
8306    /^.*? (a(*THEN)b)++ c/x
8307        aabc
8308    No match
8309    
8310    /^.*? (a(*THEN)b|(*F))++ c/x
8311        aabc
8312     0: aabc
8313     1: ab
8314    
8315    /^.*? ( (a(*THEN)b)++ | (*F) )++ c/x
8316        aabc
8317     0: aabc
8318     1: ab
8319     2: ab
8320    
8321    /^.*? ( (a(*THEN)b)++ )++ c/x
8322        aabc
8323    No match
8324    
8325    /--- Possessive non-capture ---/
8326    
8327    /^.*? (?:a(*THEN)b)++ c/x
8328        aabc
8329    No match
8330    
8331    /^.*? (?:a(*THEN)b|(*F))++ c/x
8332        aabc
8333     0: aabc
8334    
8335    /^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c/x
8336        aabc
8337     0: aabc
8338    
8339    /^.*? (?: (?:a(*THEN)b)++ )++ c/x
8340        aabc
8341    No match
8342    
8343    /--- Condition assertion ---/
8344    
8345    /^(?(?=a(*THEN)b)ab|ac)/
8346        ac
8347     0: ac
8348    
8349    /--- Condition ---/
8350    
8351    /^.*?(?(?=a)a|b(*THEN)c)/
8352        ba
8353    No match
8354    
8355    /^.*?(?:(?(?=a)a|b(*THEN)c)|d)/
8356        ba
8357     0: ba
8358    
8359    /^.*?(?(?=a)a(*THEN)b|c)/
8360        ac
8361    No match
8362    
8363    /--- Assertion ---/
8364    
8365    /^.*(?=a(*THEN)b)/
8366        aabc
8367     0: a
8368    
8369    /------------------------------/
8370    
8371    /(?>a(*:m))/imsxSK
8372        a
8373     0: a
8374    MK: m
8375    
8376    /(?>(a)(*:m))/imsxSK
8377        a
8378     0: a
8379     1: a
8380    MK: m
8381    
8382    /(?<=a(*ACCEPT)b)c/
8383        xacd
8384     0: c
8385    
8386    /(?<=(a(*ACCEPT)b))c/
8387        xacd
8388     0: c
8389     1: a
8390    
8391    /(?<=(a(*COMMIT)b))c/
8392        xabcd
8393     0: c
8394     1: ab
8395        ** Failers
8396    No match
8397        xacd
8398    No match
8399    
8400    /(?<!a(*FAIL)b)c/
8401        xcd
8402     0: c
8403        acd
8404     0: c
8405    
8406    /(?<=a(*:N)b)c/K
8407        xabcd
8408     0: c
8409    MK: N
8410    
8411    /(?<=a(*PRUNE)b)c/
8412        xabcd
8413     0: c
8414    
8415    /(?<=a(*SKIP)b)c/
8416        xabcd
8417     0: c
8418    
8419    /(?<=a(*THEN)b)c/
8420        xabcd
8421     0: c
8422    
8423    /(a)(?2){2}(.)/
8424        abcd
8425     0: abcd
8426     1: a
8427     2: d
8428    
8429    /(*MARK:A)(*PRUNE:B)(C|X)/KS
8430        C
8431     0: C
8432     1: C
8433    MK: B
8434        D
8435    No match, mark = B
8436    
8437    /(*MARK:A)(*PRUNE:B)(C|X)/KSS
8438        C
8439     0: C
8440     1: C
8441    MK: B
8442        D
8443    No match, mark = B
8444    
8445    /(*MARK:A)(*THEN:B)(C|X)/KS
8446        C
8447     0: C
8448     1: C
8449    MK: B
8450        D
8451    No match, mark = B
8452    
8453    /(*MARK:A)(*THEN:B)(C|X)/KSY
8454        C
8455     0: C
8456     1: C
8457    MK: B
8458        D
8459    No match, mark = B
8460    
8461    /(*MARK:A)(*THEN:B)(C|X)/KSS
8462        C
8463     0: C
8464     1: C
8465    MK: B
8466        D
8467    No match, mark = B
8468    
8469    /--- This should fail, as the skip causes a bump to offset 3 (the skip) ---/
8470    
8471    /A(*MARK:A)A+(*SKIP)(B|Z) | AC/xK
8472        AAAC
8473    No match, mark = A
8474    
8475    /--- Same --/
8476    
8477    /A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/xK
8478        AAAC
8479    No match, mark = B
8480    
8481    /A(*:A)A+(*SKIP)(B|Z) | AC/xK
8482        AAAC
8483    No match, mark = A
8484    
8485    /--- This should fail, as a null name is the same as no name ---/
8486    
8487    /A(*MARK:A)A+(*SKIP:)(B|Z) | AC/xK
8488        AAAC
8489    No match, mark = A
8490    
8491    /--- A check on what happens after hitting a mark and them bumping along to
8492    something that does not even start. Perl reports tags after the failures here,
8493    though it does not when the individual letters are made into something
8494    more complicated. ---/
8495    
8496    /A(*:A)B|XX(*:B)Y/K
8497        AABC
8498     0: AB
8499    MK: A
8500        XXYZ
8501     0: XXY
8502    MK: B
8503        ** Failers
8504    No match
8505        XAQQ
8506    No match, mark = A
8507        XAQQXZZ
8508    No match, mark = A
8509        AXQQQ
8510    No match, mark = A
8511        AXXQQQ
8512    No match, mark = B
8513    
8514    /^(A(*THEN:A)B|C(*THEN:B)D)/K
8515        AB
8516     0: AB
8517     1: AB
8518    MK: A
8519        CD
8520     0: CD
8521     1: CD
8522    MK: B
8523        ** Failers
8524    No match
8525        AC
8526    No match, mark = A
8527        CB
8528    No match, mark = B
8529    
8530    /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
8531        AB
8532     0: AB
8533     1: AB
8534    MK: A
8535        CD
8536     0: CD
8537     1: CD
8538    MK: B
8539        ** Failers
8540    No match
8541        AC
8542    No match, mark = A
8543        CB
8544    No match, mark = B
8545    
8546    /--- An empty name does not pass back an empty string. It is the same as if no
8547    name were given. ---/
8548    
8549    /^(A(*PRUNE:)B|C(*PRUNE:B)D)/K
8550        AB
8551     0: AB
8552     1: AB
8553        CD
8554     0: CD
8555     1: CD
8556    MK: B
8557    
8558    /--- PRUNE goes to next bumpalong; COMMIT does not. ---/
8559    
8560    /A(*PRUNE:A)B/K
8561        ACAB
8562     0: AB
8563    MK: A
8564    
8565    /--- Mark names can be duplicated ---/
8566    
8567    /A(*:A)B|X(*:A)Y/K
8568        AABC
8569     0: AB
8570    MK: A
8571        XXYZ
8572     0: XY
8573    MK: A
8574    
8575    /b(*:m)f|a(*:n)w/K
8576        aw
8577     0: aw
8578    MK: n
8579        ** Failers
8580    No match, mark = n
8581        abc
8582    No match, mark = m
8583    
8584    /b(*:m)f|aw/K
8585        abaw
8586     0: aw
8587        ** Failers
8588    No match
8589        abc
8590    No match, mark = m
8591        abax
8592    No match, mark = m
8593    
8594    /A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC/xK
8595        AAAC
8596     0: AAC
8597    
8598    /a(*PRUNE:X)bc|qq/KY
8599        ** Failers
8600    No match, mark = X
8601        axy
8602    No match, mark = X
8603    
8604    /a(*THEN:X)bc|qq/KY
8605        ** Failers
8606    No match, mark = X
8607        axy
8608    No match, mark = X
8609    
8610    /(?=a(*MARK:A)b)..x/K
8611        abxy
8612     0: abx
8613    MK: A
8614        ** Failers
8615    No match
8616        abpq
8617    No match
8618    
8619    /(?=a(*MARK:A)b)..(*:Y)x/K
8620        abxy
8621     0: abx
8622    MK: Y
8623        ** Failers
8624    No match
8625        abpq
8626    No match
8627    
8628    /(?=a(*PRUNE:A)b)..x/K
8629        abxy
8630     0: abx
8631    MK: A
8632        ** Failers
8633    No match
8634        abpq
8635    No match
8636    
8637    /(?=a(*PRUNE:A)b)..(*:Y)x/K
8638        abxy
8639     0: abx
8640    MK: Y
8641        ** Failers
8642    No match
8643        abpq
8644    No match
8645    
8646    /(?=a(*THEN:A)b)..x/K
8647        abxy
8648     0: abx
8649    MK: A
8650        ** Failers
8651    No match
8652        abpq
8653    No match
8654    
8655    /(?=a(*THEN:A)b)..(*:Y)x/K
8656        abxy
8657     0: abx
8658    MK: Y
8659        ** Failers
8660    No match
8661        abpq
8662    No match
8663    
8664    /(another)?(\1?)test/
8665        hello world test
8666     0: test
8667     1: <unset>
8668     2:
8669    
8670    /(another)?(\1+)test/
8671        hello world test
8672    No match
8673    
8674    /(a(*COMMIT)b){0}a(?1)|aac/
8675        aac
8676     0: aac
8677    
8678    /((?:a?)*)*c/
8679      aac
8680     0: aac
8681     1:
8682    
8683    /((?>a?)*)*c/
8684      aac
8685     0: aac
8686     1:
8687    
8688    /(?>.*?a)(?<=ba)/
8689        aba
8690     0: ba
8691    
8692    /(?:.*?a)(?<=ba)/
8693        aba
8694     0: aba
8695    
8696    /.*?a(*PRUNE)b/
8697        aab
8698     0: ab
8699    
8700    /.*?a(*PRUNE)b/s
8701        aab
8702     0: ab
8703    
8704    /^a(*PRUNE)b/s
8705        aab
8706    No match
8707    
8708    /.*?a(*SKIP)b/
8709        aab
8710     0: ab
8711    
8712    /(?>.*?a)b/s
8713        aab
8714     0: ab
8715    
8716    /(?>.*?a)b/
8717        aab
8718     0: ab
8719    
8720    /(?>^a)b/s
8721        aab
8722    No match
8723    
8724    /(?>.*?)(?<=(abcd)|(wxyz))/
8725        alphabetabcd
8726     0:
8727     1: abcd
8728        endingwxyz
8729     0:
8730     1: <unset>
8731     2: wxyz
8732    
8733    /(?>.*)(?<=(abcd)|(wxyz))/
8734        alphabetabcd
8735     0: alphabetabcd
8736     1: abcd
8737        endingwxyz
8738     0: endingwxyz
8739     1: <unset>
8740     2: wxyz
8741    
8742    "(?>.*)foo"
8743        abcdfooxyz
8744    No match
8745    
8746    "(?>.*?)foo"
8747        abcdfooxyz
8748     0: foo
8749    
8750    /(?:(a(*PRUNE)b)){0}(?:(?1)|ac)/
8751        ac
8752     0: ac
8753    
8754    /(?:(a(*SKIP)b)){0}(?:(?1)|ac)/
8755        ac
8756     0: ac
8757    
8758    /(?<=(*SKIP)ac)a/
8759        aa
8760    No match
8761    
8762    /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/xK
8763        AAAC
8764     0: AC
8765    
8766    /a(*SKIP:m)x|ac(*:n)(*SKIP:n)d|ac/K
8767        acacd
8768     0: acd
8769    MK: n
8770    
8771    /A(*SKIP:m)x|A(*SKIP:n)x|AB/K
8772        AB
8773     0: AB
8774    
8775    /((*SKIP:r)d){0}a(*SKIP:m)x|ac(*:n)|ac/K
8776        acacd
8777     0: ac
8778    MK: n
8779    
8780    /-- Tests that try to figure out how Perl works. My hypothesis is that the
8781        first verb that is backtracked onto is the one that acts. This seems to be
8782        the case almost all the time, but there is one exception that is perhaps a
8783        bug. --/
8784    
8785    /-- This matches "aaaac"; each PRUNE advances one character until the subject
8786        no longer starts with 5 'a's. --/
8787    
8788    /aaaaa(*PRUNE)b|a+c/
8789        aaaaaac
8790     0: aaaac
8791    
8792    /-- Putting SKIP in front of PRUNE makes no difference, as it is never
8793    backtracked onto, whether or not it has a label. --/
8794    
8795    /aaaaa(*SKIP)(*PRUNE)b|a+c/
8796        aaaaaac
8797     0: aaaac
8798    
8799    /aaaaa(*SKIP:N)(*PRUNE)b|a+c/
8800        aaaaaac
8801     0: aaaac
8802    
8803    /aaaa(*:N)a(*SKIP:N)(*PRUNE)b|a+c/
8804        aaaaaac
8805     0: aaaac
8806    
8807    /-- Putting THEN in front makes no difference. */
8808    
8809    /aaaaa(*THEN)(*PRUNE)b|a+c/
8810        aaaaaac
8811     0: aaaac
8812    
8813    /-- However, putting COMMIT in front of the prune changes it to "no match". I
8814        think this is inconsistent and possibly a bug. For the moment, running this
8815        test is moved out of the Perl-compatible file. --/
8816    
8817    /aaaaa(*COMMIT)(*PRUNE)b|a+c/
8818    
8819    
8820    /---- OK, lets play the same game again using SKIP instead of PRUNE. ----/
8821    
8822    /-- This matches "ac" because SKIP forces the next match to start on the
8823        sixth "a". --/
8824    
8825    /aaaaa(*SKIP)b|a+c/
8826        aaaaaac
8827     0: ac
8828    
8829    /-- Putting PRUNE in front makes no difference. --/
8830    
8831    /aaaaa(*PRUNE)(*SKIP)b|a+c/
8832        aaaaaac
8833     0: ac
8834    
8835    /-- Putting THEN in front makes no difference. --/
8836    
8837    /aaaaa(*THEN)(*SKIP)b|a+c/
8838        aaaaaac
8839     0: ac
8840    
8841    /-- In this case, neither does COMMIT. This still matches "ac". --/
8842    
8843    /aaaaa(*COMMIT)(*SKIP)b|a+c/
8844        aaaaaac
8845     0: ac
8846    
8847    /-- This gives "no match", as expected. --/
8848    
8849    /aaaaa(*COMMIT)b|a+c/
8850        aaaaaac
8851    No match
8852    
8853    
8854    /------ Tests using THEN ------/
8855    
8856    /-- This matches "aaaaaac", as expected. --/
8857    
8858    /aaaaa(*THEN)b|a+c/
8859        aaaaaac
8860     0: aaaaaac
8861    
8862    /-- Putting SKIP in front makes no difference. --/
8863    
8864    /aaaaa(*SKIP)(*THEN)b|a+c/
8865        aaaaaac
8866     0: aaaaaac
8867    
8868    /-- Putting PRUNE in front makes no difference. --/
8869    
8870    /aaaaa(*PRUNE)(*THEN)b|a+c/
8871        aaaaaac
8872     0: aaaaaac
8873    
8874    /-- Putting COMMIT in front makes no difference. --/
8875    
8876    /aaaaa(*COMMIT)(*THEN)b|a+c/
8877        aaaaaac
8878     0: aaaaaac
8879    
8880    /-- End of "priority" tests --/
8881    
8882    /aaaaa(*:m)(*PRUNE:m)(*SKIP:m)m|a+/
8883        aaaaaa
8884     0: a
8885    
8886    /aaaaa(*:m)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/
8887        aaaaaa
8888     0: a
8889    
8890    /aaaaa(*:n)(*PRUNE:m)(*SKIP:m)m|a+/
8891        aaaaaa
8892     0: aaaa
8893    
8894    /aaaaa(*:n)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/
8895        aaaaaa
8896     0: a
8897    
8898    /a(*MARK:A)aa(*PRUNE:A)a(*SKIP:A)b|a+c/
8899        aaaac
8900     0: aac
8901    
8902    /a(*MARK:A)aa(*MARK:A)a(*SKIP:A)b|a+c/
8903        aaaac
8904     0: ac
8905    
8906    /aaa(*PRUNE:A)a(*SKIP:A)b|a+c/
8907        aaaac
8908     0: aac
8909    
8910    /aaa(*MARK:A)a(*SKIP:A)b|a+c/
8911        aaaac
8912     0: ac
8913    
8914    /a(*:m)a(*COMMIT)(*SKIP:m)b|a+c/K
8915        aaaaaac
8916     0: ac
8917    
8918    /.?(a|b(*THEN)c)/
8919        ba
8920     0: ba
8921     1: a
8922    
8923    /(a(*COMMIT)b)c|abd/
8924        abc
8925     0: abc
8926     1: ab
8927        abd
8928    No match
8929    
8930    /(?=a(*COMMIT)b)abc|abd/
8931        abc
8932     0: abc
8933        abd
8934     0: abd
8935    
8936    /(?>a(*COMMIT)b)c|abd/
8937        abc
8938     0: abc
8939        abd
8940     0: abd
8941    
8942    /a(?=b(*COMMIT)c)[^d]|abd/
8943        abd
8944    No match
8945        abc
8946     0: ab
8947    
8948    /a(?=bc).|abd/
8949        abd
8950     0: abd
8951        abc
8952     0: ab
8953    
8954    /a(?>b(*COMMIT)c)d|abd/
8955        abceabd
8956    No match
8957    
8958    /a(?>bc)d|abd/
8959        abceabd
8960     0: abd
8961    
8962    /(?>a(*COMMIT)b)c|abd/
8963        abd
8964     0: abd
8965    
8966    /(?>a(*COMMIT)c)d|abd/
8967        abd
8968    No match
8969    
8970    /((?=a(*COMMIT)b)ab|ac){0}(?:(?1)|a(c))/
8971        ac
8972     0: ac
8973     1: <unset>
8974     2: c
8975    
8976    /-- These tests were formerly in test 2, but changes in PCRE and Perl have
8977        made them compatible. --/
8978    
8979    /^(a)?(?(1)a|b)+$/
8980        *** Failers
8981    No match
8982        a
8983    No match
8984    
8985    /(?=a\Kb)ab/
8986        ab
8987     0: b
8988    
8989    /(?!a\Kb)ac/
8990        ac
8991     0: ac
8992    
8993    /^abc(?<=b\Kc)d/
8994        abcd
8995     0: cd
8996    
8997    /^abc(?<!b\Kq)d/
8998        abcd
8999     0: abcd
9000    
9001    
9002    /A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC/xK
9003        AAAC
9004    No match, mark = A
9005    
9006    /^((abc|abcx)(*THEN)y|abcd)/
9007        abcd
9008     0: abcd
9009     1: abcd
9010        *** Failers
9011    No match
9012        abcxy
9013    No match
9014    
9015    /^((yes|no)(*THEN)(*F))?/
9016      yes
9017    No match
9018    
9019    /(A (.*)   C? (*THEN)  | A D) (*FAIL)/x
9020    AbcdCBefgBhiBqz
9021    No match
9022    
9023    /(A (.*)   C? (*THEN)  | A D) z/x
9024    AbcdCBefgBhiBqz
9025    No match
9026    
9027    /(A (.*)   C? (*THEN)  | A D) \s* (*FAIL)/x
9028    AbcdCBefgBhiBqz
9029    No match
9030    
9031    /(A (.*)   C? (*THEN)  | A D) \s* z/x
9032    AbcdCBefgBhiBqz
9033    No match
9034    
9035    /(A (.*)   (?:C|) (*THEN)  | A D) (*FAIL)/x
9036    AbcdCBefgBhiBqz
9037    No match
9038    
9039    /(A (.*)   (?:C|) (*THEN)  | A D) z/x
9040    AbcdCBefgBhiBqz
9041    No match
9042    
9043    /(A (.*)   C{0,6} (*THEN)  | A D) (*FAIL)/x
9044    AbcdCBefgBhiBqz
9045    No match
9046    
9047    /(A (.*)   C{0,6} (*THEN)  | A D) z/x
9048    AbcdCBefgBhiBqz
9049    No match
9050    
9051    /(A (.*)   (CE){0,6} (*THEN)  | A D) (*FAIL)/x
9052    AbcdCEBefgBhiBqz
9053    No match
9054    
9055    /(A (.*)   (CE){0,6} (*THEN)  | A D) z/x
9056    AbcdCEBefgBhiBqz
9057    No match
9058    
9059    /(A (.*)   (CE*){0,6} (*THEN)  | A D) (*FAIL)/x
9060    AbcdCBefgBhiBqz
9061    No match
9062    
9063    /(A (.*)   (CE*){0,6} (*THEN)  | A D) z/x
9064    AbcdCBefgBhiBqz
9065    No match
9066    
9067    /(?=a(*COMMIT)b|ac)ac|ac/
9068        ac
9069    No match
9070    
9071    /(?=a(*COMMIT)b|(ac)) ac | (a)c/x
9072        ac
9073    No match
9074    
9075    /--------/
9076    
9077    /(?(?!b(*THEN)a)bn|bnn)/
9078       bnn
9079     0: bn
9080    
9081    /(?!b(*SKIP)a)bn|bnn/
9082        bnn
9083     0: bn
9084    
9085    /(?(?!b(*SKIP)a)bn|bnn)/
9086       bnn
9087     0: bn
9088    
9089    /(?!b(*PRUNE)a)bn|bnn/
9090        bnn
9091     0: bn
9092    
9093    /(?(?!b(*PRUNE)a)bn|bnn)/
9094       bnn
9095     0: bn
9096    
9097    /(?!b(*COMMIT)a)bn|bnn/
9098        bnn
9099     0: bn
9100    
9101    /(?(?!b(*COMMIT)a)bn|bnn)/
9102       bnn
9103     0: bn
9104    
9105    /(?=b(*SKIP)a)bn|bnn/
9106        bnn
9107    No match
9108    
9109    /(?=b(*THEN)a)bn|bnn/
9110        bnn
9111     0: bnn
9112    
9113     /^(?!a(*SKIP)b)/
9114         ac
9115     0:
9116    
9117     /^(?!a(*SKIP)b)../
9118         acd
9119     0: ac
9120    
9121    /(?!a(*SKIP)b)../
9122         acd
9123     0: ac
9124    
9125    /^(?(?!a(*SKIP)b))/
9126         ac
9127     0:
9128    
9129    /^(?!a(*PRUNE)b)../
9130         acd
9131     0: ac
9132    
9133    /(?!a(*PRUNE)b)../
9134         acd
9135     0: ac
9136    
9137     /(?!a(*COMMIT)b)ac|cd/
9138         ac
9139     0: ac
9140    
9141    /\A.*?(?:a|bc)/
9142        ba
9143     0: ba
9144    
9145    /^(A(*THEN)B|C(*THEN)D)/
9146        CD
9147     0: CD
9148     1: CD
9149    
9150    /(*:m(m)(?&y)(?(DEFINE)(?<y>b))/K
9151        abc
9152     0: b
9153    MK: m(m
9154    
9155    /(*PRUNE:m(m)(?&y)(?(DEFINE)(?<y>b))/K
9156        abc
9157     0: b
9158    MK: m(m
9159    
9160    /(*SKIP:m(m)(?&y)(?(DEFINE)(?<y>b))/K
9161        abc
9162     0: b
9163    
9164    /(*THEN:m(m)(?&y)(?(DEFINE)(?<y>b))/K
9165        abc
9166     0: b
9167    MK: m(m
9168    
9169    /^\d*\w{4}/
9170        1234
9171     0: 1234
9172        123
9173    No match
9174    
9175    /^[^b]*\w{4}/
9176        aaaa
9177     0: aaaa
9178        aaa
9179    No match
9180    
9181    /^[^b]*\w{4}/i
9182        aaaa
9183     0: aaaa
9184        aaa
9185    No match
9186    
9187    /^a*\w{4}/
9188        aaaa
9189     0: aaaa
9190        aaa
9191    No match
9192    
9193    /^a*\w{4}/i
9194        aaaa
9195     0: aaaa
9196        aaa
9197    No match
9198    
9199    /(?(?=ab)ab)/+
9200        ca
9201     0:
9202     0+ ca
9203        cd
9204     0:
9205     0+ cd
9206    
9207    /(?:(?<n>foo)|(?<n>bar))\k<n>/J
9208        foofoo
9209     0: foofoo
9210     1: foo
9211        barbar
9212     0: barbar
9213     1: <unset>
9214     2: bar
9215    
9216    /(?<n>A)(?:(?<n>foo)|(?<n>bar))\k<n>/J
9217        AfooA
9218     0: AfooA
9219     1: A
9220     2: foo
9221        AbarA
9222     0: AbarA
9223     1: A
9224     2: <unset>
9225     3: bar
9226        ** Failers
9227    No match
9228        Afoofoo
9229    No match
9230        Abarbar
9231    No match
9232    
9233    /^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
9234        1 IN SOA non-sp1 non-sp2(
9235     0: 1 IN SOA non-sp1 non-sp2(
9236     1: 1
9237     2: non-sp1
9238     3: non-sp2
9239    
9240    /^ (?:(?<A>A)|(?'B'B)(?<A>A)) (?('A')x) (?(<B>)y)$/xJ
9241        Ax
9242     0: Ax
9243     1: A
9244        BAxy
9245     0: BAxy
9246     1: <unset>
9247     2: B
9248     3: A
9249    
9250  /-- End of testinput1 --/  /-- End of testinput1 --/

Legend:
Removed from v.472  
changed lines
  Added in v.1365

  ViewVC Help
Powered by ViewVC 1.1.5