I've attached the extended description. It includes a trick to work-around the unintuitive behavior of S. It looks as follows: http://psprint.blinkenshell.org/S_flag.png I think that the way the S flag works is a bit of an inconsistency, Because ${str%%X##**} would not stop at the first from the right match, it would try other matches starting from the right and go on up to the final first from the left X. I think that (S) shouldn't change this, but on the other hand should ${(S)str%%X##} match the first three X? Rather not, as it would resemble ## then... Intuitively, however, it should match all the three right X. On Thu, 19 Dec 2019 at 16:30, Daniel Shahaf wrote: > > Sebastian Gniazdowski wrote on Wed, 18 Dec 2019 20:44 +00:00: > > Or rather not a bug… It seems that it's the result of how % searches > > the substrings from the end – it stops at the first match, i.e.: after > > finding a first X from the right. > > Could we improve the documentation of (S), then? -- Sebastian Gniazdowski News: https://twitter.com/ZdharmaI IRC: https://kiwiirc.com/client/chat.freenode.net:+6697/#zplugin Blog: http://zdharma.org