Mirko Schenk: Komplexe Ersetzungen

Hallo!

Ich will in einem Programm Teile aus einem String ersetzen. Aber für s/// ist die Sache imho etwas zu kompliziert, weil noch diverse Sachen abgefragt werden sollen, von denen das Ersetzungsergebnis abhängig ist.
Gibt es irgendeine Möglichkeit, eine gefundene Teilzeichenfolge mit "normalen" Perl (also mit ifs usw.) auszuwerten und zu ersetzen? Das Manual hat mich nicht viel weiter gebracht, anscheinend denke ich noch nicht binär genug... ;)
Oder gibt es irgendwelche Variablen, in denen Start- und Endeposition des gefundenen Patterns gespeichert werden? In einem Beispiel auf "perlre" wird "pos" verwendet, will aber bei mir nicht funktionieren (und sieht mir auch nicht nach einer Variable aus), perlvar schweigt sich aus, und index($string,$1) (nach $string =~ /(....)/) sollte doch eigentlich überflüssig sein (warum zweimal suchen?)...

Ciao,
Mirko

  1. Hallo!

    OK... Fehler gefunden: pos braucht als Parameter den Namen des durchsuchten Strings, also bei "$dings =~ m/xyz/g" "pos($dings)" und liefert dann die Endposition, was mit dann zusammen mit length($1) reicht...

    Ciao,
    Mirko

  2. Hallo Mirko,

    wenn du im regulären Ausdruck die Teile die du im Ersetzungstext benoetigst, in runde Klammern setzt, dann kannst du die gefundenen Zeichenfolgen mit $1, $2 usw. im Ersetzungstext ansprechen (Du mußt die oeffnenden Klammern von links zaehlen um auf den Namen der Variablen zu kommen).

    Ich hatte ca. 35 Zeilen zum Suchen/Ersetzen einer bestimmten Zeichenfolge (ohne regulaere Ausdruecke).
    Jetzt hab' ich mich mit den regulaeren Ausdruecken beschaeftigt. Die o.g. Funktion ist nun nur noch zwei Zeilen lang. (Wahrscheinlich geht's i einer)

    Gruss
      Manne