regexp, kontextsensitives suchen und ersetzen
seth
- programmiertechnik
hi!
wie kann ich mit regulaeren ausdruecken realisieren "ersetze alle a, auf die nicht direkt b folgt, durch c"?
im moment mache ich das (in perl) so:
$s=~s/a([^b])|a$/c$1/g;
$s=~s/a([^b])/c$1/g;
mit der ersten zeile werden alle 'a' ersetzt, denen nicht direkt ein 'b' folgt, mit der ausnahme, dass in einer reihe aufeinanderfolgender 'a' nur jedes zweite ersetzt wird, beginnend mit dem ersten. ausserdem wird ein 'a', falls es am ende steht, ebenfalls ersetzt.
mit der zweiten zeile werden dann die restlichen 'a' ersetzt.
aber das ist programmiertechnisch nicht das gelbe vom ei, vermute ich.
wie macht man das nun "richtig"?
prost
seth
ps. sorry, falls diese frage hier schon oefters gestellt und beantwortet wurde, aber ich habe mit hilfe der suche nichts dazu gefunden.
Hallo seth,
wie kann ich mit regulaeren ausdruecken realisieren "ersetze alle a, auf die nicht direkt b folgt, durch c"?
$text =~ s/a(?!b)/c/g;
Siehe auch http://www.perldoc.com/perl5.6/pod/perlre.html#(-!pattern).
Christian