| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

27-03-2008, 12:33
|
|
stekoe2000
Registrierter Benutzer
|
|
Registriert seit: Jul 2003
Beiträge: 342
|
|
[REGEX] img src="" filtern
Hallo!
Ich bin gerade auf dem Pfar der Regular Expressions und komme nicht weiter. Ich will meine ganze Seite auf <img src="" /> Tags überprüfen um nicht verwendete Bilder zu finden. (Erst die verwendeten und dann werden alle aus dem images Ordner rausgeschmissen, die nicht verwendet werden).
Dazu dachte ich mir, nehme ich RegExp und habe herumprobiert und bin soweit, dass ich folgende RegExp habe:
'@<img src="(.*)"(.*?)>@is'
http://www.regex-tester.de/uc_305_de.html
Leider schiesst das Dingen übers Ziel hinaus, weil er am ende des <img src="" /> nicht aufhört. Warum, weiß ich nicht, und da ich mir schon viele Tutorials dazu durchgelesen habe und mehrere RegExp Tester benutzt habe aber mein Ergebnis nicht das ist, was ich brauche, wollte ich die breite Masse fragen, was ich falsch gemacht habe...
/EDIT:
... '/<img[^>]+>/is' ... entschuldigung, gerade eben gefunden ...
Geändert von stekoe2000 (27-03-2008 um 12:36 Uhr)
|

27-03-2008, 12:46
|
|
$_Baker
Member
|
|
Registriert seit: Feb 2008
Beiträge: 220
|
|
Wo kein / ist, kann auch kein / gematched werden.
|

27-03-2008, 12:47
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.283
|
|
Schonmal mit Schalter U für Ungreedy probiert?
Code:
'@<img src="(.*)"(.*)>@isU'
Weil dein .* ohne ungreedy matched einfach alles bis zum Ende des Strings. Ohne ungreedy probiert der RegExp gar nicht aus ob " vorkommt, sondern matched es aufgrund von .*
Gruss
tobi
|

27-03-2008, 12:49
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.283
|
|
Zitat:
|
Wo kein / ist, kann auch kein / gematched werden.
|
Wo siehst du / als Zeichen? Der / in einem RegExp ist ein Begrenzer, hat also eine spezielle Funktion. Wenn du / als Zeichen finden willst musst du ihn innerhalb des Musters escapen \/
|

27-03-2008, 13:22
|
|
stekoe2000
Registrierter Benutzer
|
|
Registriert seit: Jul 2003
Beiträge: 342
|
|
Danke für die Antworten, wie oben geschrieben erfüllt diese RegExp: '/<img[^>]+>/is' was ich will.
Den Schalter U hatte ich versucht, hatte leider auch nichts gebracht.
|

27-03-2008, 14:01
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.283
|
|
Wenn es nicht gefunzt hat, dann hast du was falsch gemacht. Ich vermute mal dass dann dein RegExp so ausgeschaut hat
Code:
'@<img src="(.*)"(.*?)>@isU'
Und wenn dem so ist dann brauchst du dich nicht wundern. Denn mit dem ? zusammen mit U wird der Ausdruck wieder greedy 
Der Ausdruck funzt schon wie du hier sehen kannst
Gruss
tobi
|

27-03-2008, 14:20
|
|
$_Baker
Member
|
|
Registriert seit: Feb 2008
Beiträge: 220
|
|
Zitat:
Original geschrieben von jahlives
Wo siehst du / als Zeichen? Der / in einem RegExp ist ein Begrenzer, hat also eine spezielle Funktion. Wenn du / als Zeichen finden willst musst du ihn innerhalb des Musters escapen \/
|
Zitat:
|
Als Delimiter kann quasi jedes nicht-alphanumerische Zeichen außer dem Backslash verwendet werden
|
Ausserdem hab ich mich auf das /> des img-Tags bezogen
|

27-03-2008, 14:38
|
|
H2O
PHP Junior
|
|
Registriert seit: Jul 2007
Beiträge: 937
|
|
Zitat:
Original geschrieben von $_Baker
Als Delimiter kann quasi jedes nicht-alphanumerische Zeichen außer dem Backslash verwendet werden
|
Und wo siehst du einen Backslash?
Zitat:
Original geschrieben von $_Baker
Ausserdem hab ich mich auf das /> des img-Tags bezogen
|
Das ist eine faule Ausrede, da dieser Slash gar nirgends abgefragt wird.
__________________
Gruss
H2O
|

27-03-2008, 14:38
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.283
|
|
Zitat:
|
Ausserdem hab ich mich auf das /> des img-Tags bezogen
|
Und erklärst du mir den Grund warum / nicht von .* gematched werden würde.
|

27-03-2008, 14:41
|
|
$_Baker
Member
|
|
Registriert seit: Feb 2008
Beiträge: 220
|
|
OffTopic: Ich seh schon, es is nich gut, in einem geistig unwachen Zustand etwas sinnvolles Posten zu wollen
Bevor sich einige angegriffen Fühlen, lass ich das mal lieber
|

28-03-2008, 13:45
|
|
jmc
PHP Junior
|
|
Registriert seit: Mar 2006
Beiträge: 868
|
|
Das Problem ist eigentlich ganz Simpel... und du warst auch schon nahe an der Lösung...
'@<img src="(.* ? )"(.*?)>@is'
http://www.regex-tester.de/uc_312_de.html
|

28-03-2008, 14:24
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.283
|
|
@jmc
Oder einfach U hintendran. Das würde dir dann in diesem Fall 1 Zeichen einsparen
|

20-06-2009, 19:20
|
|
Samson
Registrierter Benutzer
|
|
Registriert seit: Nov 2001
Beiträge: 2
|
|
Ich hätte gern noch ein Regex für den Fall, das der src-Parameter nicht unmittelbar nach dem Beginn des img-Tags folgt.
Ich habe ein ähnliches Problem wie der Ur-Autor stekoe2000, wo ich in einem Verzeichnis im HTML-Code der Dateien die referenzierten Grafiken finden muß. Beschränke ich die Suche auf den src-Parameter, habe ich nicht nur Grafiken in der Ergebnisliste.
Das bisherige Regex
PHP-Code:
@<img src="(.*?)".*?>@is
findet also z.B. nicht
PHP-Code:
<img width="252" height="49" border="0" align="middle" src="/news/data/images/4von6.jpg" alt="4von6.jpg" title="4von6.jpg" />
Ergänzung. Ich hab's woanders gefunden:
PHP-Code:
@<img.*?src="(.*?)".*?>@is
Geändert von Samson (20-06-2009 um 19:52 Uhr)
Grund: Erledigt
|

26-03-2010, 13:33
|
|
syntaxerror
Registrierter Benutzer
|
|
Registriert seit: Mar 2010
Beiträge: 31
|
|
Zitat:
Zitat von jahlives
@jmc
Oder einfach U hintendran. Das würde dir dann in diesem Fall 1 Zeichen einsparen 
|
Ich mag das U nicht. Meine Regex teste ich auch gerne im UltraEdit (Regex-Engine: PERL in den erweiterten Einstellungen; die UE-eigene Engine ist viel zu unflexibel und umständlich), da geht das ganz ohne Webseiten...
File->New, Quellcode reinpfeffern und Regex drüberlaufen lassen.
Wenn ich dann solche exotischen Sachen wie 'U' verwende, müsste ich die Regex für anderweitige Verwendung immer wieder umschreiben.
Mit der '?'-Verwendung "spare" ich zwar nicht an jedem Zeichen ein, bin aber mehrfach kompatibel; könnte das dann sogar in Windows@Cygwin über Perl testen lassen. Ohne nochmal dran rumfummeln zu müssen.
Fazit: Diese Agonie um das Einsparen von einzelnen Zeichen ist oft nicht wirklich sinnvoll...
Geändert von syntaxerror (26-03-2010 um 13:36 Uhr)
|

26-03-2010, 20:04
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.188
|
|
Aha, schön zu wissen...  Aber der Thread ist fast ein Jahr alt.
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|