preg_replace

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • preg_replace

    ich will folgendes ersetzen [Irgendwas] zu <irgendwas>

    mein Code:
    PHP-Code:
    $text '[table][tr][td]1[/td][td]2[/td][/tr][/table]';
    $text preg_replace ('/\[(.*)\]/i'"<$1>" $text );
    echo 
    $text
    Allerdings bekomm ich da als ausgabe:
    [code]
    <table][tr][td]1[/td][td]2[/td][/tr][/table>
    [/coder]
    wie muss ich das umschreiben, damit er jedes [...] in <...> ersetzt?
    ich versteh das suchmuster net ganz ...
    Signatur-Text ...

  • #2
    mit
    PHP-Code:
    $text preg_replace ('#\[(.*)\](.*)\[/(.*?)\]#Uis'"<$1>$2</$3>" $text ); 
    komme ich dem also schon näher. allerdings ist die ausgabe:

    Code:
    <table>[tr][td]1</td][td]2[/td][/tr][/table>
    wieso wird das nicht auf alles angewendet?
    Signatur-Text ...

    Kommentar


    • #3
      mhmm mit
      Code:
      #(.*)\[(.*)\](.*)\[/(.*)\](.*)#Uis', "<$2>$3</$4>" , $text
      erhalte ich
      Code:
      <table>[tr][td]Text1</td><td>Text2</td></tr></table>
      kann mir nicht jemand helfen?
      Signatur-Text ...

      Kommentar


      • #4
        Original geschrieben von dani_o
        ich will folgendes ersetzen [Irgendwas] zu <irgendwas>
        und warum hantierst du dann mit regex? verwende doch einfach str_replace()

        Kommentar


        • #5
          weil "Irgenwas" einaml "b" ist dann mal "a" dann mal "table" ...
          Beiträge gelesen

          was iss wenn mal nur [ verwendet wird? darf ja nicht umgewandelt werden!
          Signatur-Text ...

          Kommentar


          • #6
            (.*) ist ein gieriges pattern. d.h. dein beispiel sucht die erste [, nimmt dann den ganzen text dazwischen bis zur letzten ].

            du musst nur (.*) durch (.*?) ersetzen (was dann ein nicht-gieriges pattern is).

            Kommentar


            • #7
              Original geschrieben von MarkusW
              (.*) ist ein gieriges pattern. d.h. dein beispiel sucht die erste [, nimmt dann den ganzen text dazwischen bis zur letzten ].

              du musst nur (.*) durch (.*?) ersetzen (was dann ein nicht-gieriges pattern is).
              ahja und
              PHP-Code:
              $text preg_replace ('#(.*?)\[(.*?)\](.*?)\[/(.*?)\](.*)#Uis'"<$2>$3</$4>" $text ); 
              ergibt dann
              Code:
              </tr></table>
              Signatur-Text ...

              Kommentar


              • #8
                Original geschrieben von dani_o
                weil "Irgenwas" einaml "b" ist dann mal "a" dann mal "table" ...
                Beiträge gelesen
                ja gelesen.
                ich meinte auch die klammern zu ersetzen - das ganze ist zwar ziemlich sinnlos, falls es ein bbcode-parser werden soll, aber so hast du es nun mal beschrieben.

                Kommentar


                • #9
                  jap soll ein parser werden - so dass direkt html nicht möglich ist aber die befehle per [befehl][/befehl] eingefügt werden können ...
                  Signatur-Text ...

                  Kommentar


                  • #10
                    du hast da was falsch verstanden:
                    preg_replace ('/[(.*)]/i', "<$1>" , $text );
                    -> preg_replace ('/[(.*?)]/', "<$1>" , $text );
                    und schon geht das ganze

                    Kommentar


                    • #11
                      Original geschrieben von MarkusW
                      du hast da was falsch verstanden:
                      preg_replace ('/[(.*)]/i', "<$1>" , $text );
                      -> preg_replace ('/[(.*?)]/', "<$1>" , $text );
                      und schon geht das ganze
                      öhm - Ausgabe:
                      Code:
                      [table][tr][td]Feld 1[/td][td]Feld 2[/td][/tr][/table]
                      iss meiner meinung nach nicht wirklich funktionell
                      Signatur-Text ...

                      Kommentar


                      • #12
                        mal der Code:

                        PHP-Code:
                        <?php 
                        $text 
                        "<script></script>[table][tr][td][/td]1[td][/td]2[/tr][/table]";
                        $text htmlentities($text);
                        $text preg_replace ('/[(.*?)]/'"<$1>" $text );

                        echo 
                        $text;
                        ?>
                        teste mal - funzt nicht ...
                        Signatur-Text ...

                        Kommentar


                        • #13
                          das stimmt natürlich aber das liegt daran das ich das pattern aus deinem 1. posting kopiert hab und das forum hier ja immer die backslashes schluckt
                          du musst vor [ und ] noch nen backslash setzten

                          ich erachte das übrigens als deinen fehler da kann man schon selber draufkommen

                          Kommentar


                          • #14
                            dann kannst du dich doch direkt auf die gültigen tags beschränken. also für den öffnenden tag:
                            \[(befehl1|befehl2|befehl3...)\]

                            Kommentar


                            • #15
                              Original geschrieben von 3DMax
                              dann kannst du dich doch direkt auf die gültigen tags beschränken. also für den öffnenden tag:
                              \[(befehl1|befehl2|befehl3...)\]
                              will ich aber ja nicht
                              Signatur-Text ...

                              Kommentar

                              Lädt...
                              X