Preg Match All bei HTML Tags liefert kein Ergebniss

Starfox2007

Mitglied
Hi zusammen,

Ich will momentan eine HTML Seite auslesen um diese in der Datenbank zu speichern, leider liefert mir Preg Match All nur ein ; und keine weitere Fehlermeldung.




Code:
<td class="column1">Text:</td>
  </tr>
  <tr>
    <td class="column2">1:<img style="border:none;" src="./images/1.gif" width="28" height="28" alt="" title="" />Bild1<br />
2:<img style="border:none;" src="./images/2.gif" width="28" height="28" alt="" title="" />Bild2<br />
3:<img style="border:none;" src="./images/3.gif" width="28" height="28" alt="" title="" />Bild3</td>


PHP:
preg_match_all(
    '#<td class="column1">(.*?)</td>\s*'.
    '<td class="column2">(.*?)</td>#i',
    $table,
    $matches,
    PREG_SET_ORDER
);
 
Das hier klappt für mich:
PHP:
preg_match_all('#<td class="column1">(.*?)</td>.*<td class="column2">(.*?)</td>#si', $table, $matches, PREG_SET_ORDER);
 
Jap das funktioniert soweit, nur habe ich wohl oben vergessen zu erwähnen das es nicht nur 1 Datensatz ist sondern mehrere.

Wie kann ich damit mehrere auslesen, bisher wird mir so nur immer der 1te Datensatz ausgelesen.

so sieht der jetzige Code aus:

PHP:
function prepareQueryValues( array $matches )
{
    $query = '';
    foreach( $matches as $match ) {
        $query.= '(\''.mysql_real_escape_string( $match[1] ).'\',';
        $query.= '\''.mysql_real_escape_string( $match[2] ).'\'),';
		
    }

    return substr( $query, 0, - 1 ).';';
}

preg_match_all(
    '#<td class="column1">(.*?)</td>/s*'.
    '<td class="column2">(.*?)</td>#si',
    $table,
    $matches,
    PREG_SET_ORDER
);


$query.= prepareQueryValues( $matches );

echo "" .$query. "\n";
 
Zuletzt bearbeitet:
Wie soll denn dein Query am Ende aussehen? Führe außerdem mal ein
PHP:
echo '<pre>';
var_dump($matches);
echo '</pre>';
durch, damit siehst du wie dein $matches Array überhaupt aussieht.
 
Alles zwischen <td class="column1"></td>
und <td class="column2"></td>

brauche ich so wie es dort steht, also auch mit HTML Code.
Das ganze will ich dann in eine Mysql Datenbank automatisiert einfügen.

:Edit: das Array ist leer wenn ich var_dump($matches); ausführe <pre>array(0) {
}
</pre>;

Das Preg Match funktioniert für <td class="column1"> da hier nur Text vorhanden ist, sobald ich aber <td class="column2"> mit hinzu nehme ist das Array Leer weil hier HTML Code vorhanden ist.
 
Zuletzt bearbeitet:
Also wenn es nur um den Code da oben geht, kannst du auch nur preg_match nehmen
PHP:
$regex = '#<td class="column1">(.*?)</td>.*<td class="column2">(.*?)</td>#si';
preg_match($regex, $str, $match);
echo $match[1];
echo $match[2];
 
Zurück