globales suchen und ersetzen mit ausgabe
seth
- perl
gudn tach!
ich weiss nicht, _wie_ ich nach der problemloesung suchen soll. deswegen frage jetzt mal hier nach.
gegeben sei ein string $str
, bei dem mit hilfe der regulaeren ausdruecke $findRE
und $replaceRE
gewisse teilzeichenketten global ersetzt werden sollen. soweit so gut, das liesse sich mit
eval('$str=~s/'.$findRE.'/'.$replaceRE.'/g');
bewerkstelligen.
jetzt sollen aber noch zusaetzlich alle aenderungen (also alle gefundenen zeichenketten und ihre substitute) auf dem bildschirm ausgegeben werden. tja, aber wie geht das gescheit?
ich habe mir zwar eine loesung dazu ueberlegt, aber die ist eigentlich viel zu umstaendlich, doof und gefaellt mir nicht:
my $str_new='';
my $found_str;
my $len;
my $old_pos=0;
my $after_matched;
while($str=~/$findRE/g){
$found_str=$&;
$after_matched=$'; # wird nur am schluss benoetigt
$len=length($found_str);
$str_new.=substr($str, $old_pos, pos($str)-$len-$old_pos);
$old_pos=pos($str);
print 'orig: '.$found_str."\n";
eval('$found_str=~s/'.$findRE.'/'.$replaceRE.'/');
print 'new: '.$found_str."\n";
$str_new.=$found_str;
}
$str=$str_new.$after_matched;
da gibt's doch bestimmt ganz tolle elegante perl-wege fuer, oder?
prost
seth