"Moon, John" <[EMAIL PROTECTED]> writes:

> I have the follows code
> perl -e '
> @a=(q{a...x name=taga_1 #...d name=tagb_1 f...r name=tagc_1 xxnn},
> q{h...e name=taga_4 t...g name=tagb_4 k name=tagc_4 nn});
> $ndx = 0;
> foreach $ln (@a) { 
>       print "b4 = $ln\n";
>       $ln =~s/(name=.*)\d+/\1$ndx/g;
                      ^

There's your problem - the '*' is 'greedy' by default - in other words,
in the first example, the '.*' is matching:

taga_1 #...d name=tagb_1 f...r name=tagc_


You could, instead of '.', use \D (not-a-digit):

$ln =~s/(name=\D*)\d+/\1$ndx/g;


Which produces the output you want.

-RN

>       print "af = $ln\n";
>       $ndx++
>       }'
> Which produces: 
> b4 = a...x name=taga_1 #...d name=tagb_1 f...r name=tagc_1 xxnn
> af = a...x name=taga_1 #...d name=tagb_1 f...r name=tagc_0 xxnn
> b4 = h...e name=taga_4 t...g name=tagb_4 k name=tagc_4 nn
> af = h...e name=taga_4 t...g name=tagb_4 k name=tagc_1 nn
>
> I would like to produce:
>
> b4 = a...x name=taga_1 #...d name=tagb_1 f...r name=tagc_1 xxnn
> af = a...x name=taga_0 #...d name=tagb_0 f...r name=tagc_0 xxnn
> b4 = h...e name=taga_4 t...g name=tagb_4 k name=tagc_4 nn
> af = h...e name=taga_1 t...g name=tagb_1 k name=tagc_1 nn
>
> Any help will be greatly appreciated.
> jwm

-- 
Robin Norwood
Red Hat, Inc.

"The Sage does nothing, yet nothing remains undone."
-Lao Tzu, Te Tao Ching

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to