Gehirnknoten wegen Regex

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

  • Gehirnknoten wegen Regex

    Hi,

    irgendwie komm ich grad nich weiter.

    Ich möchte ein Dokument anhand selbst definierter Tags in mehrere "Seiten" aufteilen.

    Code:
    <page>Lorem ipsum dolor</page>
    
    <page>Lorem ipsum dolor</page>
    
    <page>Lorem ipsum dolor</page>
    Das ganze soll per RegEx geschehn...

    PHP-Code:
    //$text = siehe oben!

    $regex "#<page>(.*)</page>#is";
    $arr_match = array();

    preg_match_all($regex$text$arr_match);

    echo 
    "<pre>".print_r($arr_matchtrue)."</pre>"

    Nun gibt es aber das Problem das Alles innerhalb des ersten öffnenden page-Tags und des letzten (!) schließenden page-tags als match zurück kommt.

    Kann mir einer nen Tipp geben wie ich der Regex beibringe doch bitte nur alles (.*) ausser einem schließenden page-tag zu selecten?

    Vielen Dank.

  • #2
    modifier U benutzen

    Kommentar


    • #3
      Besten Dank - genau das wars....

      Kommentar


      • #4
        Hmm,

        misst - jetzt hab ich einen bei einer anderen Regex.

        Wenn es sowas in der Richtung schon gab, möge man mich auf den entsprechenden Thread verweisen.

        ich möchte ein bestimmtes Tag "selecten" und zwar mit allen attributen - diese Attribute können beliebig viele sein.

        PHP-Code:
        $text '<a href="http://www.example.com" target="_blank">tescht</a>';

        $regex '#<a ((.*)="(.*)")+>(.*)</a>#i';

        $arr_match = array();
        preg_match_all($regex$text$arr_match);
        echo 
        "<pre>".print_r($arr_matchtrue)."</pre>"
        Das Ergebnis sieht folgendermaßen aus:
        Code:
        Array
        (
            [0] => Array
                (
                    [0] => tescht
                )
        
            [1] => Array
                (
                    [0] => href="http://www.example.com" target="_blank"
                )
        
            [2] => Array
                (
                    [0] => href="http://www.example.com" target
                )
        
            [3] => Array
                (
                    [0] => _blank
                )
        
            [4] => Array
                (
                    [0] => tescht
                )
        
        )
        Anscheinend wird nur das letzte Attribut selected - nicht aber das erste. Ich dachte ich könnte durch einen Quantifier beim ersten Muster das ganze wiederholbar machen.

        Kann mich jemand drauf stoßen? Hab mit Sicherheit nen total simplen Denkfehler.

        Kommentar


        • #5
          ne
          du muss schon 2 regex machen.
          z.b.s

          PHP-Code:
          $TXT = <<<EOF
          <a href="http://www.example.com" target="_blank">tescht</a> 
          <a href="http://www.huhu" style="red">tesch2t 
          </a>
          noch was 
          EOF; 
          $pattern = '#<a([^>]+)>(.+?)</a>#is';
          PHP-Code:

          preg_match_all
          ($pattern$TXT$array);
          if(isset(
          $array[1])&& is_array($array[1])){ 
          $pattern='#([^\s\=]++)\s*=\s*(\'|\")([^\2]*)\2#sU';
          PHP-Code:
          foreach($array[1] as $k=>$v){
          preg_match_all($pattern,$v$array2);
              if(isset(
          $array2[1])){
                
          $atr=array();
                foreach(
          $array2[1] as $ka=>$va){
                  if(isset(
          $array2[$ka]))
                 
          $atr[$va] =$array2[3][$ka];
              }
            
          $array[1][$k]=$atr;    
            }
          }
          }
          // formatierte Ausgabe 
          echo '<pre>'print_r($arraytrue), '</pre>'
          Slava
          bituniverse.com

          Kommentar


          • #6
            Danke - genau das mach ich jetzt. Hatte gedacht ich könnte das vermeiden.

            Thnx

            Kommentar


            • #7
              prego, ich habe zwar keine ahnung, was du da treibst, aber hast du drüber nachgedacht, xslt einzusetzen? die daten scheinen alle wohl
              geformt zu sein - das kann man ausnutzen..

              Kommentar


              • #8
                Hi Penizilin - danke.

                Aber es geht darum selbst definierte Tags in nem Template parser entsprechenz zu ersetzen. Eine Sache ist das in Seiten aufteilen (erster Post) - zweite Sache ist die Attribute der selbst definierten Tags auszulesen. Das mit <a> war nur ein Beispiel.

                Dank euch trotzdem vielmals.

                Kommentar


                • #9
                  Original geschrieben von prego
                  Aber es geht darum selbst definierte Tags in nem Template parser entsprechenz zu ersetzen. Eine Sache ist das in Seiten aufteilen (erster Post) - zweite Sache ist die Attribute der selbst definierten Tags auszulesen. Das mit <a> war nur ein Beispiel.
                  Hmm das ist doch genau das einsatzgebiet von xslt. Naja ok
                  es geht nicht ums ersetzen aber um transformieren ins entsprechende
                  zielformat. In deinem fall ist das ja dann xhtml.
                  Ich würde das auch nochmal überdenken.

                  greets
                  (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

                  Kommentar


                  • #10
                    Im Endeffekt ist das normales html mit entsprechenden Tag Erweiterungen. Die sollten einfach nur ersetzt werden. Ich muss halt nur den Attributen entsprechend die DB befragen.

                    Da die Dokumente alle Valide sind (sein sollten ) wurde das vorher mit DomXML gemacht.
                    Ich war nur der Meinung das ein strpos (zum feststellen ob Tags vorhanden sind) mit einer anschließenden Regex schneller sind.

                    Oder lieg ich da komplett daneben?

                    Kommentar


                    • #11
                      kann sein, dass es langsamer ist, dafür musst du schon selbst ein paar tests aufstellen, die dir konkrete aufgaben lösen und die zeit messen.

                      wichtiger ist vielleicht, dass die lösung skalierbarer und wartbarer wird, als das regexp-gemetzel... überlege dir, ob du damit nicht ein hohes maßes an flexibilität gegen ein paar bedeutungslose millisekunden eintauschst.

                      Kommentar


                      • #12
                        Es wird nicht erwartet das noch mehrere Tags dazu kommen, aber wenn dann werde ich es denke ich xslt/simplexml/etc.

                        Danke für euere Anregungen...

                        Kommentar

                        Lädt...
                        X