Ramprasad wrote: > > if I have > my $str = 'aw bcdefaw e a rt zzz kjkjkjaw qa' ; > > If I wish to replace everything between 'a' and 'zzz' With 'TXT' > I do > > $str=~s/a[^a]+zzz/aTXTzzz/; > This works fine. > > Now if I wish to replace everything between 'aw' and 'zzz' with 'TXT' > I am not able to use > > $str=~s/aw[^(aw)]+zzz/awTXTzzz/; > > I know I can use > $str=~s/^(.*)aw.*?zzz/$1awTXTzzz/s; > > But this seems to be a very untidy way beacuse In my real program $str > is an entire file in a string and could be a very long one > > Is there a better way
You can use positive look-behind and positive look-ahead: $ perl -e' my $str = q/aw bcdefaw e a rt zzz kjkjkjaw qa/; print "$str\n"; $str =~ s/(?<=\ba\b).*?(?=\bzzz\b)/TXT/; print "$str\n"; ' aw bcdefaw e a rt zzz kjkjkjaw qa aw bcdefaw e aTXTzzz kjkjkjaw qa perldoc perlre John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]