phpbar.de logo

Mailinglisten-Archive

AW: [php] Sorry noch mal RegExp mit Bild-Tags

AW: [php] Sorry noch mal RegExp mit Bild-Tags

Jonas Schneider JonasSchneider at gmx.de
Sam Jun 5 11:22:35 CEST 2004


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Am Freitag, 4. Juni 2004 13:52 schrieb Tim Hildebrandt:
> Hallo Michael,
>
> > $pattern = "/<IMG[^>]*id=1[^>]*>/iU";
> > preg_match($pattern, $text, $match);
> > var_dump($match);
> > </code>
> >
> > hat das folgende ausgabe ergeben:
> > array(1) {
> >   [0]=>
> >   string(35) "<IMG id=1 src="datei.jpg" border=0>"
> > }
>
> Das ganze funktioniert hervorragend, wenn man nur das erste Bild
> betrachtet. In meinem spezifischen Fall entsteht aber der Fehler,
> wenn meine Routine beim zweiten Bild ankommt, da dann das erste Bild
> UND der dazwischenliegende Text UND das zweite Bild gematcht werden.
> Ich glaube es wird deutlicher, wenn ich Euch zwei Links gebe, die auf
> Bilder verweisen. Also:
>
> Beispiel 1) zeigt ein funktionierendes RegEx angewendet auf das erste
> zu findende Bild (hier mit ID 12345):
> http://www.pontevecchio.de/regex/beispiel1.gif
>
> So weit, so gut. Jetzt kommt aber das Problem:
>
> Beispiel 2) zeigt dieselbe RegEx angewendet auf das Bild mit der ID
> 54321. http://www.pontevecchio.de/regex/beispiel2.gif
> Ihr seht, dass gleich das Bild 1 im Code mit erwischt wird. Da man
> den Leuten ja nicht vorschreiben kann, in welcher Reihenfolge sie die
> Bilder in den Quellcode packen (das fällt definitiv unter
> künsterische Freiheit), kann ich auch nicht mit Sicherheit
> voraussagen, ob der in diesem Beispiel vorkommende Fall (nämlich dass
> das System versucht, das Bild mit der ID 54321 zuerst auszutauschen,
> weil es gerade so hinkommt) eintritt oder nicht. Im schlimmsten Falle
> verliert das System beim Auswechseln des Bildes mit der ID 54321
> gleichzeitig den gesamten Text zwischen Bild1 und Bild2 das Bild1
> ansich!
>
> Wie also muß ich die (eigentlich funktionierende) RegEx angleichen,
> damit immer *genau* von < bis > getroffen wird?

Hat das vielleicht etwas mit Greedy und Ungreedy zu tun?
Wenn eine RegExp Greedy ist, versucht sie so viele Ergebnisse wir 
möglich zurückzugeben. durch das .* erlaubst du aber beliebig viele 
Zeichen, also scannt PHP da bis zum letzten HTML-Tag, oder?

Jonas
- -- 
Jonas Schneider
eMail JonasSchneider at gmx.de
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.0 (GNU/Linux)

iD8DBQFAwZDfpqpdmWP17qoRAg0zAKCQHEuLVw7ETznFp24iisrUw0YUoQCgkuCl
1D2o7LZcGmdSW9cZKYUrC50=
=zlUI
-----END PGP SIGNATURE-----


php::bar PHP Wiki   -   Listenarchive