Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: backreferences
On 10/15/2015 07:30 PM, Bart Schaefer wrote:
On Oct 15, 6:16pm, Ray Andrews wrote:
} Subject: Re: backreferences
}
} if [[ "$sstring" = (#b)([(^(edcba))]*)(edcba)(*) ]];
Umm, no.
But ... but ... it worked. So it works for the wrong reason then you
say. Ok
the right answer for the wrong reason could do a great deal of damage so
thanks for rescuing me.
[(^(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.
At the moment I'm quite confounded. So '(b#)' is looking at every set
of '()' even
when nested and even when 'doing something else'? (That is to say even when
they are doing other syntax work?) I may be doing something wrong but using
the above my output is:
one abcde
two edcba
three abcde
four
five
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".
Well, that's the original question.
So you can reduce this to
if [[ "$sstring" = (#b)(^edcba)(edcba)(*) ]]
and then you're back to only needing $match[1,3].
God knows. But your simplified command works fine too, and I'll
take it on faith. I've never seen any sort of 'any number of characters'
sort of thing look other than:
[....]*
... so you can see where I'd go astray there. Ok, so
^(edcba)
is individual character matches and
(^edcba)
is anything up to "edcba" ... which is exactly what I wanted. Let's leave
my other effort to the devil--I don't even want to understand it.
Messages sorted by:
Reverse Date,
Date,
Thread,
Author