Anzeige - [Interessiert an einer Anzeige?]
(?) Tags raten (?) (edit)
 
Reply to this topicStart new topicStart Poll
> Mediumtext mit preg_match durchsuchbar?
Themenmixer
Geschrieben am: Mi 30.04.2008, 20:19
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 98
Mitglied seit: 5.01.2006


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


--------------------
Weihnachtssprüche - Der Name ist Programm!
Lebkuchen-Rezepte.de - Lebkuchenrezepte
Der Stundenzeiger - Das Weblog rund um die Uhr
Top
PMEmail PosterUsers Website
Top
 
 
Martin J
#2 Geschrieben am: Mi 30.04.2008, 20:58 (+00:38)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 61
Mitglied seit: 25.05.2007


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
Top
PMEmail Poster
Top
 
Themenmixer
#3 Geschrieben am: Mi 30.04.2008, 21:48 (+00:50)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 98
Mitglied seit: 5.01.2006


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.


--------------------
Weihnachtssprüche - Der Name ist Programm!
Lebkuchen-Rezepte.de - Lebkuchenrezepte
Der Stundenzeiger - Das Weblog rund um die Uhr
Top
PMEmail PosterUsers Website
Top
 
Martin J
#4 Geschrieben am: Mi 30.04.2008, 22:01 (+00:13)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 61
Mitglied seit: 25.05.2007


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.
Top
PMEmail Poster
Top
 
pl_90
#5 Geschrieben am: Mi 30.04.2008, 22:18 (+00:16)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 236
Mitglied seit: 29.03.2007


versuchs so:

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


--------------------
Top
PMUsers Website
Top
 
Themenmixer
#6 Geschrieben am: Mi 30.04.2008, 22:18 (+00:00)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 98
Mitglied seit: 5.01.2006


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*


--------------------
Weihnachtssprüche - Der Name ist Programm!
Lebkuchen-Rezepte.de - Lebkuchenrezepte
Der Stundenzeiger - Das Weblog rund um die Uhr
Top
PMEmail PosterUsers Website
Top
 
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
Trackback-Url: http://www.ayom.com/track/t/24243

Topic Options Reply to this topicStart new topicStart Poll

 


> Ähnliche Themen
PHP: preg_match() oder ereg()? Josh 1480 4 Do 12.06.2008, 10:29




Anzeige - [Interessiert an einer Anzeige?]



Anzeigen




cyon Webhosting



[Interessiert an einer Anzeige?]