in reply to Replace part of a regex match
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!
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Replace part of a regex match
by monarch (Priest) on Dec 24, 2008 at 06:09 UTC |