reg.Ex. für img
romy
- php
0 Danny0 Christian Kruse0 romy0 Christian Kruse0 romy
Hi,
ich versuche mittels preg_match und dem untenstehenden muster ein img-tag in teile aufzuspalten. Ich habe nicht kapiert was die Trennzeichen sind. (Habe ein ähnliches Muster für links, dort gibt es keine Probleme.) Ich dachte alle geklammerten Bereiche werden in das array abgelegt.
Aber ich bekomme beim 3. anstatt nur der Adresse, auch den ganzen Rest der dahinter ist.
das 1. und das 2. liefern das Gewünschte. Wie sage ich dies dem Muster?
=^(.*)<img(.*)src="?(\S+)"?([^>]*)>(.*)$=mix
ciao
romy
Hi Romy
=^ (.*) <img (.*) src = "? (\S+) "? ([^>]*)> (.*) $=mix
^^ bedeutet ALLES außer Leerzeichen, womit " dann übergangen wird, wenn ich mich nicht irre.
Gruß,
Danny
=^ (.*) <img (.*) src = "? (\S+) "? ([^>]*)> (.*) $=mix
/
(.*) <img (.*) src =
(["'])? # " oder ' in Reg 3
(?(3) # wenn Anführungszeichen
(.*?)\3 # Teil bis zum nächsten Anführungszeichen speichern
| ([^\s>]+) # sonst Teil bis zum nächsten Leerzeichen oder Ende speichern
)
(.*)
/mix
So könnte es auch funktionieren. Hier werden sogar beide Anführungszeichen berücksichtigt, was oft bei Javascript-Anweisungen (Event-Handler) innerhalb von Attributen vorkommt.
Gruß,
Danny
Hi,
/
(.*) <img (.*) src =
(["'])? # " oder ' in Reg 3
(?(3) # wenn Anführungszeichen
(.*?)\3 # Teil bis zum nächsten Anführungszeichen speichern
| ([^\s>]+) # sonst Teil bis zum nächsten Leerzeichen oder Ende speichern
)
(.*)
/mix
vielen Dank!
Hat mir gerade fürs Verständnis einiges geholfen!
ciao
romy
Hallo romy,
Aber ich bekomme beim 3. anstatt nur der Adresse, auch den
ganzen Rest der dahinter ist.
[...]
=^(.*)<img(.*)src="?(\S+)"?([^>]*)>(.*)$=mix
Na klar kriegst du den Rest, der dahinter ist. \S+ matcht auch
auf ". Sinnvoller waere hier:
!(.*)<img(.*)src=((?:"[^"]+")|(?:'[^']+')|(?:\S+))([^>]*)>(.*)!mix
Dabei solltest du allerdings aufpassen, da im 3. Backtick nun
auch die eventuellen " bzw. ' gespeichert sind.
Gruesse,
CK
Hi,
!(.*)<img(.*)src=((?:"[^"]+")|(?:'[^']+')|(?:\S+))([^>]*)>(.*)!mix
bleibt auch der Rest bestehen, aber nicht immer, nur in einem Falle:
<img src=bla.jpg> wenn das > direkt nach der src kommt -> gilt auch für -mit Leerzeichen-
sobald mindesten ein leerezeichen dazwischen ist funktionieren beide Varianten gut.
Also müsste es ja an ([^>]*) liegen?
ciao
romy
Hallo romy,
!(.*)<img(.*)src=((?:"[^"]+")|(?:'[^']+')|(?:\S+))([^>]*)>(.*)!mix
Kleiner Fehler:
!(.*)<img(.*)src=((?:"[^"]+")|(?:'[^']+')|(?:[^>\s]+))([^>]*)>(.*)!mix
In einer URL-Angabe ohne "" ist auch kein > erlaubt.
Gruesse,
CK
Hi,
!(.*)<img(.*)src=((?:"[^"]+")|(?:'[^']+')|(?:[^>\s]+))([^>]*)>(.*)!mix
danke, so geht es...
ciao
romy