Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: backreferences
On Oct 15, 6:16pm, Ray Andrews wrote:
} Subject: Re: backreferences
}
} if [[ "$sstring" = (#b)([(^(edcba))]*)(edcba)(*) ]];
Umm, no. [(^(edcba))] is still a character class (open paren, caret,
e,d,c,b,a, close paren). Just (^(edcba)) without the square brackets.
And you have more parens then, so your $match[] indexes are wrong.
if [[ "$sstring" = (#b)((^(edcba))*)(edcba)(*) ]]
There are 5 sets of parens, and you care about $match[1], $match[4],
and $match[5]. $match[2] is the prefix of $match[1] that was not
consumed by the middle *, and $match[3] is an empty substring of
$match[2] (because it was excluded from matching). Count off the
open parens left to right to see this.
In fact you don't even need the middle * because (^edcba) will eat
an arbitrarily long string as long as it is not literally "edcba".
So you can reduce this to
if [[ "$sstring" = (#b)(^edcba)(edcba)(*) ]]
and then you're back to only needing $match[1,3].
Messages sorted by:
Reverse Date,
Date,
Thread,
Author