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

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

  ViewVC Help
Powered by ViewVC 1.1.5