hilfe bei Regulären Ausdruck

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

  • hilfe bei Regulären Ausdruck

    ich möchte den text der zwischen den beiden kommentaren ist rausfischen und den blocknamen selber.
    also am besten als Array wo einmal der blockname und der inhalt des blocks drinsteht. kann mir da jemand weiterhelfen ?

    blablablablabla
    blablablablabla
    <!-- START blockname1 -->
    diesen Text möchte ich haben
    <!-- END blockname1 -->
    blablablablabla
    blablablablabla
    <!-- START blockname2 -->
    diesen Text möchte ich auch haben
    <!-- END blockname2 -->
    blablablablabla
    blablablablabla

    alle beispiele die ich gefunden habe benutzen irgendie noch $this->bla usw. das kapier ich net wirklich und ich hab mir auch schcon das tutotial durchgelsen aber bin auch nochnet so schlau draß geworden.

  • #2
    PHP-Code:
    $regexp '%(.*)?<!-- START (.*?) -->(.*)<!-- END \\2 -->(.*)%sU';
    $blocks = array();
    if (
    preg_match_all($regexp$text$matches))
    {
      foreach (
    $matches[3] as $i=>$m)
        
    $blocks[trim($matches[2][$i])] = $m;
      foreach(
    $blocks as $k=>$v)
        echo 
    "$k: '$v'<br>";
    }
    else
      echo 
    'no match'
    Bei mehreren Blöcken mit gleichem Namen wird der letzte gespeichert.
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      dnake, aber eine kurze verständnis frage, warum müssen bei foreach aufeinmal die anweisungen nicht mehr in geschweiften klammern stehen !?
      hast du sie vergessen oder brauch man sie net ?

      Kommentar


      • #4
        Die geschweiften Klammern sind dazu da, mehrere Anweisungen zu einem Block zusammen zu fassen. Da bei den foreach jeweils nur eine Anweisung steht, sind die Klammern überflüssig.
        mein Sport: mein Frühstück: meine Arbeit:

        Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

        Kommentar


        • #5
          Original geschrieben von Titus
          Die geschweiften Klammern sind dazu da, mehrere Anweisungen zu einem Block zusammen zu fassen. Da bei den foreach jeweils nur eine Anweisung steht, sind die Klammern überflüssig.
          nötig sind sie nicht, wenn der anweisungblock nur aus einer einzigen anweisung besteht.

          sauberer programmierstil ist es aber, sie auch dann trotzdem zu setzen - spätestens wenn man später mal eine anweisung in den block einfügt, macht sich das bezahlt, weil man dann nicht vergessen kann, dass man klammern setzen muss, und sich einen wolf sucht, weil es nicht so funzt wie man sich das vorgestellt hatte ;-)
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            danke wieder was dazugelernt

            die zu matchen klappt jetzt auch wunderbar, aber die ergebnisse zu ersetzen mit preg_replace() will einfach nicht klappen.

            hat jemand auch nen lössungsvorschlag wie man die ersetzen kann ?

            was auch sehr hilfreich wäre wenn jemand mal nen link zu einem tutotial hätte wo es auch viele beispile für allemöglichen fälle gibt.

            Kommentar


            • #7
              *nachobenschieb*

              Kommentar


              • #8
                Was willst du denn ersetzen? bisher hast du nur vom "rausfischen" geredet.
                mein Sport: mein Frühstück: meine Arbeit:

                Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                Kommentar


                • #9
                  <!-- START blockname1 -->
                  diesen Text möchte ich haben
                  <!-- END blockname1 -->

                  ich möchte das er dan nach dem vorher rausgefischen block mit dem passendem blocknamen sucht und den inhalt zwischen dein beiden blöcken durch einen anderen ersetzt

                  Kommentar


                  • #10
                    nix einfacher als das ...
                    PHP-Code:
                    function block_replace($blockname$replace$string)
                    {
                      
                    $exp preg_quote($blockname);
                      
                    $regexp "%<!-- START $exp -->(.*)<!-- END $exp -->%sU";
                      return 
                    preg_replace ($regexp$replace$string);
                      );

                    Wenn die Blockklammern stehen bleiben sollen, musst du die um den $replace-String rum bauen.

                    Und um das ganze zu verstehen, schau mal im Handbuch unter preg_replace nach und lies anshließend Sky´s Tutorial zu regulären Ausdrücken.
                    mein Sport: mein Frühstück: meine Arbeit:

                    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                    Kommentar


                    • #11
                      danke titus, klapt auch wunderbar bis auf das der jetzt den rest der nicht im block war überall backslasches dran macht wie z.B. hier :
                      <td width=\"36\">

                      wie kann ich das den unterbinden ?

                      Kommentar


                      • #12
                        nanü?

                        php.ini: magic_quotes_runtime ausschalten
                        (müsste daran liegen)

                        und/oder

                        anschließend ein strip_slashes drüber laufen lassen. Das hat natürlich den Nachteil, dass evtl. auch gewünschte Backslashes entfernt werden.

                        bzw ...

                        sind die Backslashes vor dem ereg_replace auch drin? dann schalte magic_quotes_gpc (auch php.ini) aus.
                        mein Sport: mein Frühstück: meine Arbeit:

                        Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                        Kommentar


                        • #13
                          magic_quotes_runtime ist bei mir off.

                          wenn das das html in ne variable leade und ausgabe ist es noch ganz normal, erst wenn ich mit deiner function ersetze komemn die backslasches in den rest des html templates aber der ersetze inhalt der blöcke ist ja komischerise nicht davon betroffen

                          edit :
                          nen stripslashes hat geholfen aber trotzdem wundere ich mich wo die herkommen
                          Zuletzt geändert von Radium2k; 06.01.2003, 20:28.

                          Kommentar


                          • #14
                            Original geschrieben von Radium2k
                            ... aber trotzdem wundere ich mich wo die herkommen
                            nicht nur du ... in PHP 4.1.2 unter Win98 habe ich (zumindest in der DOS-Box) keine Probleme ...

                            magic_quotes_runtime=Off
                            hat aber auch keine Auswirkungen ...

                            versuch´s trotzdem mal hiermit:
                            PHP-Code:
                            function block_replace($blockname$replace$string)
                            {
                              
                            $a "<!-- START $blockname -->"$pa preg_quote($a);
                              
                            $z "<!-- END $blockname -->"$pz preg_quote($z);
                              return 
                            preg_replace ("/$pa(.*)$pz/sU""$a$replace$z"$string);

                            mein Sport: mein Frühstück: meine Arbeit:

                            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                            Kommentar

                            Lädt...
                            X