One method might be to calculate where the match of your capture finishes, calculate where the capture started, and replace that portion of the string directly using substr.
Example code:
use strict; my $val = 'http://adserver.adtech.de/' . '?addyn|2.0|323|91793|1|277|target=_blank'; my $re = qr/ .*\|.*\|.*\|.*\|.*\| (.*) (?=\|.*) # look-ahead /x; if ( $val =~ m/$re/g ) { print( "found: \"$1\"\n" ); print( "pos is: " . scalar( pos( $val ) ) . "\n" ); print( "behind pos is: \"" . substr( $val, pos( $val ) - length( $1 ), length( $1 ) ) . "\"\n" ); # perform substitution here using calculated offsets substr( $val, pos( $val ) - length( $1 ), length( $1 ) ) = "moo"; print( "$val\n" ); }
The problem is that you have to use a look-ahead to prevent the pos function returning the end of the entire regexp match.. The other problem is that you have to use the /g (global) flag on your match to ensure the position is calculated.
This code replaces the "277" with the word "moo". Try it!
In reply to Re: Replace part of a regex match
by monarch
in thread Replace part of a regex match
by krisravn
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |