seth: regexp, kontextsensitives suchen und ersetzen

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.

  1. 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

    --
    Hast Du einen Beitrag? Nur her damit!
    http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
    SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
    sh:) fo:) ch:] rl:( br:> n4:& ie:% mo:) va:) de:] zu:) fl:( js:| ss:) ls:[