Mediumtext mit preg_match durchsuchbar?

Themenmixer

Aktives Mitglied
Hallo!

Ich habe mal ein kleines Programmierproblem.
Aus einer MySQL-DB erhalte ich über eine Abfrage mehrere Sätze mit Mediumtext-Feldern.
Diese Mediumtext-Felder möchte ich nun nach Tags durchsuchen: z.B. die DL-Liste.
Ich dachte mir, dass preg_match da ganz toll ist und habe auch bereits die RegExp erstellt:
CODE preg_match("/<dl>(.*?)<\/dl>/im",$my_mediumtextfeld,$my_liste)


Das sollte doch eigentlich funktionieren, denn

CODE preg_match("/<dl>(.*?)<\/dl>/im","abc<dl>blablabla</dl>xyz,$my_list)
klappt ausgezeichnet und gibt mit $my_list[0] den kompletten DL-Tag samt Inhalt raus - genau das was ich brauche!

Aber es klappt nicht auf den obigen String. preg_match läuft ins Leere wenn es ein mehrzeiliges Mediumtext-Feld durchsuchen soll. Ich verstehe es nicht. Was mache ich falsch?

UPDATE: Es sieht so aus, als würde preg_match daran scheitern, dass das Ende von pattern, der RegExp, eine oder mehrere Zeilen vom Anfang getrennt ist ...

Danke schonmal im Voraus und viele Grüße vom Bodensee
Jörg
 
war jetzt selbst erstaunt, dass ich es auf Anhieb nicht hinbekommen habe, und habe selbst nochmal nachschauen müssen - es fehlte das "s"Flag

CODE preg_match("/<dl>(.*?)<\/dl>/ims","abc<dl>blablabla</dl>xyz",$my_list);


vg,
martin
 
Leider nicht.

Ich hole mir folgendes Zeuch aus einer MySQL-Tabelle:
CODE SELECT post_content AS my_posting FROM sourcetable
Sourcetable hat die Kollation "latin1_swedish_ci" (vielleicht ist das ja der Knackpunkt); post_content ist vom Type "Mediumtext".
Ich fetche das Ergebnisarray wobei

CODE $my_mediumtextfeld = abfragearray["my_posting"]

wird und will dann mit

CODE
if (preg_match("/<dl>(.*?)<\/dl>/is",$my_contentstring,$my_image)) {
echo $my_image[0]."<br />\n";
}


die List-Elemente rausziehen und erstmal einfach ausgeben.

Selbst mit dem s-Flag gehts aber nicht. Ich vermute mal, dass vielleicht die Kollation der Table "Schuld" ist? Aber da kenne ich mich nicht aus.
Ich habe auch schon versucht mittels

CODE str_replace("\r\n","",$my_mediumtextfeld)

die Zeilenumbrüche in $my_mediumtextfeld zu killen, aber auch das hat nichts gefruchtet.
 
Die Kollation dürfte es nicht sein - die gibt nur die Suchlogik vor.

Ich habe jetzt keine spontane Antwort, wenn ich Du wäre würde ich die Sache eben kurz via Shell und print_r nach jedem Schritt debuggen.
 
versuchs so:

preg_match("/<dl>(.*)<\/dl>/iUms", $my_contentstring, $my_image)
 
AAARRRGGGHHHH!

Ich hab den Fehler und es mal wieder ein typischer Fall von "Born to be blöd."

Meine RegExp hatte einen simplen Fehler: meine Listen-Elemente beginnen nicht mit einem <dl> sondern haben auch eine CSS-Klasse, so dass der Start-Tag so aussieht:
<dl class ....>

Damit rennt
CODE preg_match("/<dl>(.*?)<\/dl>/is",$my_contentstring,$my_image)

natürlich ins Leere, aber wenn ich den kleinen, aber feinen Unterschied

CODE preg_match("/<dl(.*?)<\/dl>/is",$my_contentstring,$my_image)

einbaue, flutscht es wie sau.

Sorry, Martin, war mein Fehler ... wie so oft. :)
Aber Danke für deine Mühe.

PS: Es ist erstaunlich auf welch hirnrissige Ideen man bei so einer Fehlersuche kommt .... *grins*
 
Zurück
Oben