From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24580 invoked from network); 9 Aug 1999 17:10:57 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 9 Aug 1999 17:10:57 -0000 Received: (qmail 24908 invoked by alias); 9 Aug 1999 17:10:39 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 7409 Received: (qmail 24901 invoked from network); 9 Aug 1999 17:10:37 -0000 From: "Bart Schaefer" Message-Id: <990809171032.ZM29546@candle.brasslantern.com> Date: Mon, 9 Aug 1999 17:10:32 +0000 In-Reply-To: <000901bee22f$f13b05b0$21c9ca95@mow.siemens.ru> Comments: In reply to "Andrej Borsenkow" "RE: Extended glob patterns in ${...#..} RE: Un-patch: new pattern matching code" (Aug 9, 10:25am) References: <000901bee22f$f13b05b0$21c9ca95@mow.siemens.ru> X-Mailer: Z-Mail (5.0.0 30July97) To: "Zsh hackers list" Subject: Re: Extended glob patterns in ${...#..} RE: Un-patch: new pattern matching code MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Aug 9, 10:25am, Andrej Borsenkow wrote: } Subject: RE: Extended glob patterns in ${...#..} RE: Un-patch: new pattern } } > Since a closure can match the empty string, the shortest matched portion } > is nothing. However, asking for the longest match definitely doesn't work: } > } > zagzig<9> print ${(SM)foo##*} } > ab12xy } > zagzig<10> print ${(SM)foo##([[:digit:]])#} } > } > zagzig<11> } } Believe it or not, it does work today. I have no idea, what went wrong } yesterday (I thought, it was the problem of flag order ...): I think it's the difference between .6 and .6-pws-1 (I find myself wishing Peter had chosen a different suffix this time; it's going to be confusing especially during archive searches to decide which base version is meant when someone refers to psw-N). } But still, this one is probably unexpected: } } bor@itsrm2:~%> print ${(MSI:2:)foo##[[:digit:]]#} } 2 } } The first is O.K. ... and the third is O.K., but the second? I believe, } this is a clear bug. The ``S'' flag must consider only non-overlapped } matches (the same way, sed works). The (S) flag has recognized overlapping matches for as long as it exsisted. Remember, it means on "match within a substring" (it effectively turns off the implicit start-anchor of # or end-anchor of %). I think what you mean is that the (I::) flag should skip the overlapping matches. I suppose it could be proclaimed a bug fix, but consider the example below -- don't you WANT overlapping matches in that instance? I don't know how heavily the (I::) flag is employed by 3.0.x users, but some differences have already been introduced; with x="a1_b_a2_c_a3_d" the two look like: ====================================+======================================== zsh-3.0.6: print ${(MS)x##a*} | zsh-3.1.6-pws-1: print ${(MS)x##a*} a1_b_a2_c_a3_d | a1_b_a2_c_a3_d zsh-3.0.6: print ${(MSI:2:)x##a*} | zsh-3.1.6-pws-1: print ${(MSI:2:)x##a*} a1_b_a2_c_a3_ | a2_c_a3_d zsh-3.0.6: print ${(MSI:3:)x##a*} | zsh-3.1.6-pws-1: print ${(MSI:3:)x##a*} a1_b_a2_c_a3 | a3_d zsh-3.0.6: print ${(MSI:4:)x##a*} | zsh-3.1.6-pws-1: print ${(MSI:4:)x##a*} a1_b_a2_c_a | zsh-3.0.6: print ${(SMI:5:)x##a*} | zsh-3.1.6-pws-1: print ${(SMI:5:)x##a*} a1_b_a2_c | ====================================+======================================== Note that 3.0.6 is using overlapping matches and counting from the longest to the shortest starting at the right, whereas 3.1.6-pws-1 is counting from the left (which I admit is more intuitive, but it is skipping a lot of possible matches that way without skipping all of them). 3.0.6 rambles on: 1 = a1_b_a2_c_a3_d 2 = a1_b_a2_c_a3_ 3 = a1_b_a2_c_a3 4 = a1_b_a2_c_a 5 = a1_b_a2_c_ 6 = a1_b_a2_c 7 = a2_c_a3_d 8 = a1_b_a2_ 9 = a2_c_a3_ 10 = a1_b_a2 11 = a2_c_a3 12 = a1_b_a 13 = a2_c_a 14 = a1_b_ 15 = a2_c_ 16 = a1_b 17 = a2_c 18 = a3_d 19 = a1_ 20 = a2_ 21 = a3_ 22 = a1 23 = a2 24 = a3 25 = a 26 = a 27 = a This is a pretty significant difference in behavior. -- Bart Schaefer Brass Lantern Enterprises http://www.well.com/user/barts http://www.brasslantern.com