Ralf: Suchmuster

Hallihallo!

Ich bin grad ziemlich am Verzweifeln, weil ich es mit den Suchmustern anscheinend nicht auf die Reihe kriege.
Mein Ziel ist es, für die Abizeitung Kommentare aus unserem Forum (phpBB) auszulesen, also sozusagen nur den Inhalt eines Posts.

Ein Quelltextausschnitt:
.... ~~~html tr>
  <td class="post-top2 postbody"><!-- google_ad_section_start -->wir kennen uns schon seit wir klein sind und haben schon viele geburtstage, urlaube, höhen und tiefen zusammen erlebt... werd Dich wohl nicht vergessen!<img src="images/smiles/icon_smile.gif" alt="Smile" border="0" /><!-- google_ad_section_end --></td></tr>
 </table></td> </tr> <tr>

  
 <td align="left" valign="bottom" class="post-bottom2"><table width="100%" cellspacing="0" cellp...  
  <td class="post-top2 postbody"><!-- google_ad_section_start -->Es ist schwierig mit ihr klar zu kommen. <br /><br />  
Wir zanken öfters, aber wenn ich drüber nachdenke kann ich ihr nicht böse sein.<br /><br />(wP)<!-- google_ad_section_end --></td>  
 </tr>  
 </table>

Die Kommentare stehen also zwischen "<td class="post-top2 postbody"><!-- google_ad_section_start -->" und "<!-- google_ad_section_end --></td>", danach hab ich versucht ein Suchmuster aufzubauen und per php die Ergebnisse in ein array "treffer" zu schreiben:
preg_match_all('!(\<td.class\=\"post\-top2.postbody\"\>\<\!\-\-.google\_ad\_section\_start.\-\-\>).*(\<\!\-\-.google\_ad\_section\_end.\-\-\>\<\/td\>)!',$code,$treffer,PREG_PATTERN_ORDER);

Es funktioniert aber nicht :-( Kopiere ich einen Ausschnitt, der zwei Kommentare enthält als $code, gibt $treffer[0][0] einen aus, sonst scheint kein "Platz" im array was zu enthalten, kopiere ich den kompletten Quellcode der Seite rein, geht garnix..

Vielen Dank schonmal,
   Ralf

  1. Hello,

    Wenn die Sache immer so sauber aussieht:

    $start = '<td class="post-top2 postbody"><!-- google_ad_section_start -->';

    $ende = '<!-- google_ad_section_end --></td>';

    Die Kommentare stehen also zwischen "<td class="post-top2 postbody"><!-- google_ad_section_start -->" und "<!-- google_ad_section_end --></td>", danach hab ich versucht ein Suchmuster aufzubauen

    Du kannst die Aufgabe mit einfachen Stringfunktionen lösen.
    mit

    $_treffer_start = explode($start, $text);

    http://www.php.net/manual/en/function.explode.php9

    findest teilst Du den gesamten Text auf am Startstring.
    Nun musst Du die Arrayelemente nur noch am $ende abschneiden.

    foreach($_treffer_start as $treffer)
        {
            $endpos = strpos($treffer, $ende);
            if ($endpos !== false)
            {
                echo substr($treffer, 0, $endpos);
            }
            else
            {
                ## keine Ende drin, entscheide selber, was zu tun ist
            }
        }

    http://www.php.net/manual/en/function.strpos.php
    http://www.php.net/manual/en/function.substr.php

    Wenn der Text multibyte (z.B. UTF-8) codiert ist und nicht single-byte (z.B. ISO 8859-1), dann musst Du die entsprechednen Multibyte-Funktionen benutzten.

    Liebe Grüße aus Syburg bei Dortmund

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hallo.
      Die Antwort kam ja mal flott und sie funktioniert mit ein paar Umbauten wunderbar!
      Frage mich dennoch, wieso meine Suchmuster nicht funktionierten...
      Naja, hauptsache es geht jetzt :-)
      Vielen Dank!
      Grüße, Ralf

      1. Hello,

        Frage mich dennoch, wieso meine Suchmuster nicht funktionierten...

        Du hast da allerhand escaped. Das ist gar nicht notwendig.

        preg_match_all ist mWn per default ungreedy.
        So könnte es also gehen:

        $start = '<td class="post-top2 postbody"><!-- google_ad_section_start -->';
            $ende = '<!-- google_ad_section_end --></td>';

        $pattern = "~(?:$start).*(?:$ende)~m";
            $anzahl = preg_match_all ( $pattern, $text, $_matches );

        echo "<pre>\r\n";
            echo htmlspecialchars(print_r($_matches,1));
            echo "</pre>\r\n";

        Liebe Grüße aus Syburg bei Dortmund

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
  2. Hallo,

    Ich bin grad ziemlich am Verzweifeln, weil ich es mit den Suchmustern anscheinend nicht auf die Reihe kriege.

    ich kann mich des Eindrucks nicht erwehren, dass du gerade versuchst, aus Erdnussbutter wieder Erdnüsse zu züchten.

    Mein Ziel ist es, für die Abizeitung Kommentare aus unserem Forum (phpBB) auszulesen, also sozusagen nur den Inhalt eines Posts.
    .... ~~~html

    tr>

    <td class="post-top2 postbody"><!-- google_ad_section_start -->wir kennen uns schon seit wir klein sind und haben schon viele geburtstage, urlaube, höhen und tiefen zusammen erlebt... werd Dich wohl nicht vergessen!<img src="images/smiles/icon_smile.gif" alt="Smile" border="0" /><!-- google_ad_section_end --></td></tr>
    </table></td> </tr> <tr>

      
    Warum versuchst du, die Inhalte aus dem generierten HTML-Quelltext zurückzugewinnen, anstatt die Quelle direkt anzuzapfen? Es dürfte wesentlich einfacher sein, die Texte direkt aus der Datenbakn/Flatfile (oder was auch immer) auszulesen, anstatt erst HTML daraus zu generieren und dann die Daten wieder daraus zu isolieren.  
      
    So long,  
     Martin  
    
    -- 
    In Ägypten haben früher 150000 Leute 35 Jahre lang an einer Pyramide gearbeitet. Aber bei uns arbeiten doppelt so viele Leute doppelt so lange allein an der Baugenehmigung.  
      (Dieter Nuhr, deutscher Kabarettist)