Fish: preg_replace - ich brech mir nen Ast :/

Hallo Forum,

ich möchte gerne einen String nach folgender Zeichenkette durchsuchen lassen: *gg* , also ein oder mehrere aufeinanderfolgende g's, eingerahmt von zwei Sternen, um diese durch <i>gg</i> zu ersetzen.

Seit Stunden ackere ich mich durch diese - für mich sehr komplizierte und schwer verständliche - Beschreibung der Syntax auf de3.php.net und komme zu keinem Ergebnis.

Könnte mir vielleicht freudlicherweise einer von Euch eine entsprechende Synatx zur Verfügung stellen, damit ich endlich mit meiner Seite weiterkomme? Dafür wäre ich sehr dankbar!

mit freundlichen Grüßen
Fish

  1. Hallo Fish,

    ich möchte gerne einen String nach folgender Zeichenkette durchsuchen lassen: *gg* , also ein oder mehrere aufeinanderfolgende g's, eingerahmt von zwei Sternen, um diese durch <i>gg</i> zu ersetzen.

    möchtest Du die gefundene Zeichenkette durch genau die von Dir angegebene Zeichenkette ersetzen oder soll die Anzahl der g's nach der Ersetzung die gleiche sein wie vorher? Davon hängt ab, welcher reguläre Ausdruck für Dein Vorhaben geeignet ist.

    Freundliche Grüße

    Vinzenz

    1. möchtest Du die gefundene Zeichenkette durch genau die von Dir angegebene Zeichenkette ersetzen oder soll die Anzahl der g's nach der Ersetzung die gleiche sein wie vorher? Davon hängt ab, welcher reguläre Ausdruck für Dein Vorhaben geeignet ist.

      Hallo Vinzenz,

      die Anzahl soll nachher die selbe sein wie vorher.

      Ich seh schon, Du bist der Lösung sicherlich viel näher dran als ich. :))

      Danke schön

      Gruß
      Fish

  2. Hallo Forum,

    ich möchte gerne einen String nach folgender Zeichenkette durchsuchen lassen: *gg* , also ein oder mehrere aufeinanderfolgende g's, eingerahmt von zwei Sternen, um diese durch <i>gg</i> zu ersetzen.

    Seit Stunden ackere ich mich durch diese - für mich sehr komplizierte und schwer verständliche - Beschreibung der Syntax auf de3.php.net und komme zu keinem Ergebnis.

    Könnte mir vielleicht freudlicherweise einer von Euch eine entsprechende Synatx zur Verfügung stellen, damit ich endlich mit meiner Seite weiterkomme? Dafür wäre ich sehr dankbar!

    mit freundlichen Grüßen
    Fish

    Versuch's mal so:

    $test = '*gg*';
    $test = str_replace("*gg*","<i>gg</i>", $test);
    echo $test. "\n";

    1. Versuch's mal so:

      $test = '*gg*';
      $test = str_replace("*gg*","<i>gg</i>", $test);
      echo $test. "\n";

      Hi Frank,

      ne, DAS wäre zu einfach ;-)

      ich weiß nicht von vornherein, wieviele g's der User macht. Das geht los beib einem g und hört theoretisch auf bei x Millonen :-)

      Die g's sind also variabel und können nicht als "fest" verarbeitet werden.

      Trozdem danke!

      Gruß
      Fish

    2. Hallo Frank,

      Du willst also einen Stern             \*
      gefolgt von einere beliebigen Anzahl   g+
      gefolgt von einem Stern                \*
      durch                                  <i>$1</i> ersetzen.

      Dann hast du demnach ein $pattern "/(\g+\)/", die Klammern um eine Backreferenz (= $1) zu erhalten und ein $replacement "<i>$1</i>".

      Gruß,

      Dieter

      1. Hallo Frank

        Sorry, das sollte natuerlich an Fish, nicht an dich gerichtet sein.

        Gruß,

        Dieter

      2. Hallo Dieter,

        Du willst also einen Stern             \*

        Hinweis: Der Stern ist ein Sonderzeichen und muss deswegen maskiert werden, siehe auch Maskierung von Zeichen in regulären Ausdrücken. (Ja, im verlinkten Artikel geht es um Perl, aber hier geht es ja auch um preg_replace).

        gefolgt von einere beliebigen Anzahl   g+
        gefolgt von einem Stern                \*
        durch                                  <i>$1</i> ersetzen.

        Dann hast du demnach ein $pattern "/(\g+\)/", die Klammern um eine Backreferenz (= $1) zu erhalten und ein $replacement "<i>$1</i>".

        Sollte die Klammerung nicht um g+ erfolgen, schließlich sollen die Sterne ja ersetzt werden?

        d.h. $pattern = "/\*(g+)\*/";

        Freundliche Grüße

        Vinzenz

        1. Hi Vinzenz,

          Sollte die Klammerung nicht um g+ erfolgen, schließlich sollen die Sterne ja ersetzt werden?

          Stimmt!

          Gruß,

          Dieter

      3. Dann hast du demnach ein $pattern "/(\g+\)/", die Klammern um eine Backreferenz (= $1) zu erhalten und ein $replacement "<i>$1</i>".

        Hi Dieter,

        vielen herzlich Dank! Das funktioniert einwandfrei. :))

        Gruß
        Fish