preg_match mit komischen Ergebnissen

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

  • preg_match mit komischen Ergebnissen

    Hiho

    also ich suche im folgendem html-Fragment

    Code:
    ...
    <tr>
    					<th colspan="6">Ressourcen</th>
    				</tr>
    				<tr>
    					<td colspan="3">Arbeiter</td>
    					<td colspan="3">76.215</td>
    				</tr>
    				<tr>
    					<td colspan="3">verfügbare Arbeitskräfte</td>
    					<td colspan="3">1.484</td>
    				</tr>
    				<tr>
    					<td colspan="3">Energie</td>
    					<td colspan="3">428.670</td>
    				</tr>
    				<tr>
    					<td colspan="3">Eisen</td>
    					<td colspan="3">101.452</td>
    				</tr>
    				<tr>
    					<td colspan="3">Silizium</td>
    					<td colspan="3">166.882</td>
    				</tr>
    				<tr>
    					<td colspan="3">Kohlenstoff</td>
    					<td colspan="3">26.567</td>
    				</tr>
    ...
    ich versuche folgenden php-Code

    PHP-Code:
    $startcode="%<td";
    $endcode="</td>%s";
    //for($x=1;$x<20;$x++)
    //{
    preg_match("$startcode(.*)$endcode"$inhalt$was_raus_kommt);

    echo 
    "hl: ".$was_raus_kommt[1];
    //}
    ?> 
    ich kriege dann dieses Ergebnis:

    hl: colspan=3>Arbeiter51.520verfügbare Arbeitskräfte2.618Energie23.736Eisen115.271Silizium108.612Kohlenstoff142.045Wasser14.892Sauerstoff22 .346Wasserstoff273.560 usw.

    Meine Frage ist jetzt, wie er dazu kommt, denn ich hab ja den Modifier s gesetzt und wieso schreibt er nicht jedesmal wieder colspan=3 davor ???

    wenn ich jetzt den $startcode ein bisschen abänder, sagen wir mal ich häng noch " colspan" hinten hin findet er gar nichts mehr, kann mir das wer erklären ???

    thx schomal

    cya
    Gagi

  • #2
    Re: preg_match mit komischen Ergebnissen

    Original geschrieben von Gagi
    ich kriege dann dieses Ergebnis
    und das stammt aus dem QUELLTEXT ?
    Kissolino.com

    Kommentar


    • #3
      es wird dann genau so angezeigt wenn ich die site aufrufe

      wenn ichs nicht anders wüsste, würde ich sagen du bist vom Namen her mein Bruder *g*
      Zuletzt geändert von Gagi; 24.05.2005, 21:33.

      Kommentar


      • #4
        Original geschrieben von Gagi
        es wird dann genau so angezeigt wenn ich die site aufrufe
        warum schreibe ich quelltext GROSS?

        ich möchte nicht wissen, was du ANGEZEIGT bekommst, sondern was im QUELLTEXT steht.
        Kissolino.com

        Kommentar


        • #5
          hab doch oben schon geschriebn was im QUELLTEXT steht, ich dachte du beziehst dich auf ERGEBNIS

          Kommentar


          • #6
            komisch. wenn ich deinen code ^^ teste, steht in der AUSGABE
            Code:
            hl: colspan="3">Arbeiter 76.215 verfügbare Arbeitskräfte 1.484 
            Energie 428.670 Eisen 101.452 Silizium 166.882 Kohlenstoff 26.567
            und im QUELLTEXT
            Code:
            hl:  colspan="3">Arbeiter</td>
            					<td colspan="3">76.215</td>
            				</tr>
            				<tr>
            					<td colspan="3">verfügbare Arbeitskräfte</td>
            					<td colspan="3">1.484</td>
            				</tr>
            				<tr>
            					<td colspan="3">Energie</td>
            					<td colspan="3">428.670</td>
            				</tr>
            				<tr>
            					<td colspan="3">Eisen</td>
            					<td colspan="3">101.452</td>
            				</tr>
            				<tr>
            					<td colspan="3">Silizium</td>
            					<td colspan="3">166.882</td>
            				</tr>
            				<tr>
            					<td colspan="3">Kohlenstoff</td>
            					<td colspan="3">26.567
            ... ich würds ja mal mit preg_match_all() und ungreedy versuchen
            Kissolino.com

            Kommentar


            • #7
              Also wenn du jetzt auf die unterschiedlichen werte anspielst, tut mir leid hab was falsches kopiert, aber vom aufbau is es genau gleich, nur die zahlen sind halt anderst

              was meinst du mit ungreedy ???

              bei preg_match_all krieg ich nur "array" zurück

              Kommentar


              • #8
                Original geschrieben von Gagi
                Also wenn du jetzt auf die unterschiedlichen werte anspielst, tut mir leid hab was falsches kopiert, aber vom aufbau is es genau gleich, nur die zahlen sind halt anderst
                häh?
                was meinst du mit ungreedy ???
                schau dir die modifier an, "ungreedy" heisst wörtlich ungierig
                bei preg_match_all krieg ich nur "array" zurück
                ersetze echo durch print_r()

                du musst hier schon mitarbeiten. hier haben die wenigsten lust, fertige lösungen auf dem silbertablett zu servieren. in den tutorials findest du auch noch einiges zu regex. schau mal da rein.
                Kissolino.com

                Kommentar


                • #9
                  wenn du dir die Zahlen vom Quellcod anguckst und die Zahlen von der Ausgabe wirst feststellen dass die anders sind, das hab ich gemeint.

                  Sorry wusste nicht das es noch mehr gibt, hab in einem Tutorial von euch nur 3 gesehen, darum hab ich gedacht es gibt nicht mehr. Ich werde aber aus der Erklärung von greedy im Handbuch trotzdem nicht schlau, könntest es mir kurz erklären was es bedeutet ???


                  Also mit print_r krieg ich zwar das "colspan" weg, aber ne wirklich Erklärung dafür warum alles hintereinander kommt obwohl ich s oder u gesetzt habe ist das nicht, hab ich eigentlich den modifier richtig gesetzt ???

                  thx schonmal

                  Kommentar


                  • #10
                    lass mich raten: du hast den code irgendwo abgepinnt, ohne zu verstehen, was passiert. anyway.

                    preg_match()/*_all() sind erstmal "gierig", d.h. es wird der grösstmögliche bereich erfasst. im fall von <td> ... </td> werden alle öffnenden und schliessenden tags zwischen dem ersten und letzten treffer ignoriert bzw. umfasst.

                    "ungreedy" (modifier U) unterdrückt das. das heisst, der kleinstmögl. bereich wird erfasst. während preg_match() nach dem ersten vorkommen aussteigt, packt preg_match_all() alle vorkommen/treffer in ein array.

                    grob erklärt (bin kein regex-perte).

                    wenn ich dein beispiel etwas abändere, erhalte ich ein völlig brauchbares ergebnis:
                    PHP-Code:
                    <?php
                    $t 
                    '<tr>
                            <th colspan="6">Ressourcen</th>
                            </tr>
                            <tr>
                                <td colspan="3">Arbeiter</td>
                                <td colspan="3">76.215</td>
                            </tr>
                            <tr>
                                <td colspan="3">verfügbare Arbeitskräfte</td>
                                <td colspan="3">1.484</td>
                            </tr>
                            <tr>
                                <td colspan="3">Energie</td>
                                <td colspan="3">428.670</td>
                            </tr>
                            <tr>
                                <td colspan="3">Eisen</td>
                                <td colspan="3">101.452</td>
                            </tr>
                            <tr>
                                <td colspan="3">Silizium</td>
                                <td colspan="3">166.882</td>
                            </tr>
                            <tr>
                                <td colspan="3">Kohlenstoff</td>
                                <td colspan="3">26.567</td>
                            </tr>'
                    ;

                    $startcode="%<td";
                    $endcode="</td>%U";

                    preg_match_all($startcode.'(.*)'.$endcode$t$was_raus_kommt);
                    echo 
                    '<pre>';
                    print_r($was_raus_kommt);
                    echo 
                    '</pre>';
                    ?>
                    mach was draus.
                    Kissolino.com

                    Kommentar


                    • #11
                      Also erstmal danke, dass du versuchst mir zu helfen

                      bei deinem Code krieg ich jetzt folgenden Ergebnis:

                      Ressourcen Arbeiter 76.215 verfügbare Arbeitskräfte 1.484 Energie 428.670 Eisen 101.452 Silizium 166.882 Kohlenstoff 26.567 '; $startcode="%

                      ';
                      print_r($was_raus_kommt);
                      echo '

                      '; ?>

                      im Prinzip krieg ich auch recht passable Ergebnisse, aber da die Werte danach noch in ne Datenbank sollen, hab ich eben das Problem, das ich se so net weiterverarbeiten kann.

                      Haben möchte ich eigentlich, dass ich 2 Werte auslese und diese dann in die Datenbank eintrage , damit ich das dann für alle Werte mit einer for-Schleife machen kann.

                      Was ich einfach nicht verstehe ist warum er nicht Zeilweise danach sucht, was ja eigentlich der Modifier s machen sollte. find das alles sehr vewirrend.

                      Und nein ich hab den Code nicht abgepinnt, ich weiß wie es funktionieren müsste, aber das tut es leider nicht so wie es soll

                      Kommentar


                      • #12
                        Also danke nochmal für die Hilfe, hab meine Fehler gefunden hab den Modifier ungreedy klein geschrieben anstatt groß, hätt ich mir gleich denken können

                        aber trotzdem danke für die Hilfe

                        Kommentar


                        • #13
                          Jetzt brauch ich wohl doch wieder hilfe dazu, es klappt zwar dass alles richtig ausgelsen wird, aber beim 55. Element im Array hört er einfach auf, obwohl es keinen unterschied gibt im HTML code, gibts dafür irgendeine erklärung ????

                          Kommentar

                          Lädt...
                          X