phpbar.de logo

Mailinglisten-Archive

[php] Sorry noch mal RegExp mit Bild-Tags

[php] Sorry noch mal RegExp mit Bild-Tags

Tim Hildebrandt TConnect at gmx.net
Fre Jun 4 12:25:42 CEST 2004


Hallo liebe Liste,

leider haben die bisher angebotenen Verfahren nicht korrekt gearbeitet,
daher stelle ich noch mal mein momentanes Problem hier rein in der Hoffnung,
dass sich ein RegExp-Guru meiner erbarmt:

Ich habe einen HTML-Text mit IMG-Tags. Dieser Text ist irgendwie geartet,
mal lang, mal kurz aber mit ziemlich hoher Wahrscheinlichkeit auch mit
anderen Tags wie <b> oder <br>. In diesem Text befinden sich IMG-Tags, die
druch die ID-Eigenschaft eindeutig werden. Hier ein Beispiel:

----------------------------------------------------------------
S nam magus de permetior, <b>arx</b> ars Cito Crucio reduco pax 
progenierum ejulo, alarius lex gestum, saepio una pars 
hio diu Latro cui quod summittere suppellex Suavis 
perlustro. <IMG id=1 src="datei.jpg" border=0> Nam Devotio reddo 
vi <IMG id=2 src="datei.jpg" border=0>specialissimus cum aut 
prodico curo Hospitium Diu fragro Quin <p>honestas res ut 
hos Abstergo Cupido</p> hic Discerpo. uro obnubilo 
<b>jus roto sis pulmo sollers.</b>
----------------------------------------------------------------

Beim Speichern dieses Textes ist aus einer Datenbank-Abfrage bekannt, welche
Bild-ID's sich im Text befinden müssen. Ich muß also nicht mehr rätseln oder
nach irgendwelchen TAG's suchen, die _irgendeine_ ID haben, sondern ich
könnte jetzt eigentlich gezielt austauschen. Wenn ich das korrekte
Suchmuster hätte. Problematisch ist, dass nach der SRC-Eigenschaft noch
beliebig andere Eigenschaften stehen können, so z.B. border, align etc. Ich
betrachte jetzt mal nur die erste Zeile in der Rückgabe meiner SQL-Query, in
der die ID = 1 ist:

Aus der DB setze ich $bild_id = 1

$pattern = "/<IMG[^>](.*?)" . $bild_id . "(.*?)>/miU";
$variabel = "<!--bid=" . $bild_id . "-->";

Im Worten: Suche alles, was mit <IMG anfängt, dann irgendwie (nur nicht mit
>) weitergeht, dann eine (aus der DB bekannte) ID enthält, dann wieder
irgendwie weitergeht und schließlich mit einem > endet.


Wenn ich diese Pattern mal mit preg_match($pattern, &text, $match) aufrufe,
erhalte ich folgende Array-Werte:

$match[0]: <IMG id=1 src="datei.jpg" border=0> Nam Devotio reddo 
vi <IMG id=2 src="datei.jpg" border=0>

$match[1]: id=

$match[2]: src="datei.jpg" border=0> Nam Devotio reddo 
vi <IMG id=2 src="datei.jpg" border=0


Da ich ja die Datenbank-Tabelle durchlaufe und pro Zeile immer nur genau
eine Bild-ID matchen möchte, würde ich also eigentlich immer nur $match[0] =
"<IMG id=2 src="datei.jpg" border=0>"; erwarten, wobei die ID im jeweiligen
Fall die ID ist, die ich aus der Tabelle auslese.


Wie bekomme ich das hin? Meine Versuche schlagen ständig fehl, obwohl ich
nun schon recht viel in Tutorials recherchiert habe.


Danke,
Tim


php::bar PHP Wiki   -   Listenarchive