[Chicago-talk] \1 vs $1
Steven Lembark
lembark at wrkhors.com
Thu Nov 4 02:25:52 CST 2004
-- Andy_Bach at wiwb.uscourts.gov
> I just read a post:
>> ... and \1 is deprecated for $1.
>
> and having stumbled over this recently, I was a little suprised to hear
> of the deprecation. What I'd found was \1 isn't the same as $1, in that
> s/(.)\1//;
>
> deletes duplicate chars, while;
> s/(.)$1//;
>
> depends upon the value of $1 - which, in this case'd be set *before* the
> subst got invoked! On the right hand side, $1 is what we expect but \1
> also can change during the course of a regex evaluation - as the
> parser/matcher works, \1 will take on different values during
> backtracking etc - though, in the end \1 is the same as $1.
>
> Er, am I all wet here?
Forgot your umbrella again?
There are some matches that cannot be made without
the regex self-matching. These are used heavily in
parsing delimeted text where the delimeter cannot
be hard-coded or where iterating the regex.
As a trivial case, you can find a block of text
delimeted by a non-word character in the first
position and replace it and the closing copy of
it with, say, the original text and a tab:
s{^(\W)(.+?)\1}{$2\t};
Without the "\1" on the left side you couln't write
a match againsed what had already been found.
Another way to look at it is that "\1" is part of
the initial matching regex, not its outcome, which
are $1 and $2 in this case.
--
Steven Lembark 85-09 90th Street
Workhorse Computing Woodhaven, NY 11421
lembark at wrkhors.com 1 888 359 3508
More information about the Chicago-talk
mailing list