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

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

  ViewVC Help
Powered by ViewVC 1.1.5