Jackson: preg_replace() Funktion

Hi,
folgender PHP Code:
$beschreibung = preg_replace("[b][/b]","<b></b>",$beschreibung);
bringt folgenden Fehler:
Warning: preg_replace() [function.preg-replace]: Unknown modifier '[' in ...

Meine Vermutung, ich muss die "[" igendwie mit "" oder "/" ... ja wie nennt man das eigentlich? Ich habe das mal gewusst, habe es aber leider wieder vergessen. Ich hoffe ihr könnt mir sagen was ich da machen muss.

Gruß
Jackson

  1. Hi,

    $beschreibung = preg_replace("[b][/b]","<b></b>",$beschreibung);
    bringt folgenden Fehler:
    Warning: preg_replace() [function.preg-replace]: Unknown modifier '[' in ...

    Meine Vermutung, ich muss die "[" igendwie mit "" oder "/" ... ja wie nennt man das eigentlich?

    Sonderzeichen ihre Sonderbedeutung zu nehmen, bezeichnet man im allgemeinen als Maskieren/Escapen.
    Und dazu nimmt man auch in diesem Fall einen vorgestellten Backslash.
    Wobei zu beachten ist, dass dieser im Kontext PHP-String ebenfalls das Maskierungszeichen darstellt - also ggf. mehrfach zu escapen ist.

    Ich habe das mal gewusst, habe es aber leider wieder vergessen. Ich hoffe ihr könnt mir sagen was ich da machen muss.

    Im Manual nachlesen, und zwar bitte vor dem Fragen.
    http://www.php.net/manual/en/regexp.reference.backslash.php

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    1. Sonderzeichen ihre Sonderbedeutung zu nehmen, bezeichnet man im allgemeinen als Maskieren/Escapen.
      Und dazu nimmt man auch in diesem Fall einen vorgestellten Backslash.
      Wobei zu beachten ist, dass dieser im Kontext PHP-String ebenfalls das Maskierungszeichen darstellt - also ggf. mehrfach zu escapen ist.

      Escapen, danke das war das Wort wonach ich gesucht habe. Werde das morgen mal ausprobieren. Normalerweise hätte ich in php.net gesucht, aber ich wusste nicht wonach ich suchen sollte.

      Gruß
      Jackson

      1. Hi,

        Escapen, danke das war das Wort wonach ich gesucht habe. Werde das morgen mal ausprobieren. Normalerweise hätte ich in php.net gesucht, aber ich wusste nicht wonach ich suchen sollte.

        Du wusstest aber, dass du was zum Thema reguläre Ausdrücke nachlesen wollst - und in dem Kapitel darüber war die gesuchte Info nun auch nicht unauffindbar, wenn man sich ein bisschen umschaut.

        MfG ChrisB

        --
        “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
        1. Hi,

          Du wusstest aber, dass du was zum Thema reguläre Ausdrücke nachlesen wollst - und in dem Kapitel darüber war die gesuchte Info nun auch nicht unauffindbar, wenn man sich ein bisschen umschaut.

          Nein, dass wusste ich nicht, ich dachte das geht ohne reguläre Ausdrücke.

          Trotzdem danke an dich und an alle anderen für die Tipps und die wertvollen Info-Seiten.

          Gruß
          Jackson

          1. Hi,

            Nein, dass wusste ich nicht, ich dachte das geht ohne reguläre Ausdrücke.

            Wieso hast du dann von Anfang an preg_replace im Titel erwähnt und im Beispielcode benutzt?

            MfG ChrisB

            --
            “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
            1. Hi,

              Wieso hast du dann von Anfang an preg_replace im Titel erwähnt und im Beispielcode benutzt?

              Weil ich das damit machen muss / will. In php.net steht zwar auch das das mit RegEx geht, aber ich dachte man könnte die Funktion auch ohne RegEx benutzen, dass geht - wie ich jetzt weiß - aber nicht.

              Gruß
              Jackson

  2. Hi!

    Hi,
    folgender PHP Code:
    $beschreibung = preg_replace("[b][/b]","<b></b>",$beschreibung);
    bringt folgenden Fehler:

    Warning: preg_replace() [function.preg-replace]: Unknown modifier '[' in ...

    Meine Vermutung, ich muss die "[" igendwie mit "" oder "/" ... ja wie nennt man das eigentlich?

    Die eckige Klammer irgendwie mit Backslash escapen weil sie innerhalb des Suchmusters ein Metazeichen/Funktionszeichen darstellt.

    Meine Vermutung, du hast keine Begrenzer (delimiter) für deinen regulären Ausdruck verwendet.

    Man verwendet diese, um das Suchmuster von möglichen Modifiern abzutrennen. Such dir welche aus. ZB / oder ~

    Man möchte also alle [b] und [/b] ersetzen durch <b> und </b>

      
    $beschreibung = preg_replace('~\[(/)?b\]~i','<b\1>',$beschreibung);  
    
    

    Da die eckigen Klammern eben Metazeichen bzw Funktionszeichen innerhalb des regulären Ausdrucks sind, müssen diese durch einen Backslash escaped werden.

    Wir suchen also eine öffnende eckige Klammer.
    Gefolgt von einem oder keinem Slash - Quantifier ? bedeutet 0 oder 1.
    Gefolgt von einem kleinen b.
    Gefolgt von einer schließenden eckigen Klammer.
    Der Slash wird innerhalb runder Klammern rückreferenziert und dann in die Ersetzung eingefügt.
    Ein möglicher Modifier wär hier zB das i nach dem Begrenzer für case insensitive (groß/klein egal)

    Index der Klammerungen: 0 = gesamter Ausruck, 1 = Inhalt des ersten runden Klammerpaars usw.

    Am besten mal einlesen, wenn man es öfter benötigt, Finde gut zB:
    www.regular-expressions.info

    Viel Erfolg,
    Jonny 5

    1. '<b\1>'

      oops, der gehört in der Ersetzung dann natürlich vor das b

      '<\1b>'

    2. 'ǝɯɐu$ ıɥ

      Am besten mal einlesen, wenn man es öfter benötigt, Finde gut zB:
      www.regular-expressions.info

      das könnte auch helfen: http://regexp-evaluator.de/evaluator/
      ssnɹƃ
      ʍopɐɥs

      --
      I like children. If they're properly cooked.
      - W.C. Fields