[erledigt] Regulärer Ausdruck



  • Hallo,

    ich habe z.B. folgenden String:

    blubb $blubb [[blabla$name blubb $x blabla]] blubbdidai [[wer:$y]] blubb $Fisch.
    

    Ich möchte, dass alle Strings die mit $ anfangen und von ein oder Mehreren Buchstaben und zahlen gefolg werden, ersetzten. Aber es sollen nur die ersetzt werden, die zwischen [[ und ]] stehen. Also $name, $x und $y, aber nicht $blubb und $Fisch.

    /\$[_a-zA-Z0-9]+/
    

    Das ersetz mit aber eben auch die außerhalb von [[ und ]].

    /[[(?:.*)\$[_a-zA-Z0-9]+(?:.*)]]/
    

    Das findet z.B. $name, aber nicht $x.

    Kann mir jemand helfen?

    Ach ja, ich möchten das Suchmuster im zusammenhang mit der Funktion preg_replace in PHP verwenden.

    Grüßle
    Jan



  • Hallo,

    da du ja deinen Post nun als [erledigt] markiert hast, wäre es sicherlich schön für andere, die vlt. durch die Suchfunktion einmal auf deinen Post aufmerksam werden könnten, auch die von dir gefundene Lösung einsehen zu können! Vlt. bist du ja so nett, und erläuterst für diese kommenden Forenbenutzer einmal kurz deine Lösung 🙂



  • Hi,

    ok, das kann ich natürlich machen. Ich bin zu dem Schluss gekommen, dass es für mich nicht möglich ist, solch einen Regulären Ausdruck zu finde, weil ich mich damit einfach nicht genug auskenne. Ich habe das dann in zwei Schritten gemacht. Die Teile zwischen [[ und ]] sondiert und dort dann die Ersetzung durchgeführt.

    Ich habe noch ein weiteres Ziel gehabt, und zwar, dass wenn man ein Slash vor das Dollarzeichen setzt, die "Variable" nicht umgewandelt wird.

    Also bei "bla$bla [[lala blubbblabla/blubb blabla /haha]]...", dass $haha nicht umgewandelt wird.

    $string='bla$bla [[lala $blubb blabla /$haha]]...';
    
    $count=preg_match_all('/[[(.*?)]]/', $string, $treffer); // Die Teile zwischen [[ und ]] finden
    $treffer[]=preg_replace('/(?<!\/)\$([_a-z0-9]+)/i', 'ersetzten mit', $treffer[0]); // Die "Variablen" ersetzten, denen nicht ein Slash vorangeht
    $treffer[2]=preg_replace('/\/\$/', '$', $treffer[2]); // Slashs vor Dollarzeichen werden entfernt
    
    for($i=0; $i<$count; ++$i)
      $string=str_replace($treffer[0][$i], $treffer[2][$i], $string); // Ersetzung der Teile [[ ... ]] im ursprünglichen String
    

    Man könnte noch gleiche [[...]] Teile rausfiltern, damit dafür nur einmal die Funktion str_replace() aufgerufen wird,

    Bis jetzt hat das bei mir alles funktioniert. Aber vlt. gibts ja noch ein paar Schwachstellen...

    Grüßle
    Jan


Anmelden zum Antworten