Regex img Filter mit Ausschluss String
Lilly
- php
Hallo zusammen,
ich brauche eure Hilfe bei der Zusammenstellung eines Regex und zwar möchte ich <img> Tags aus einer HTML Seite filtern, ich arbeite mit PHP und preg_replace():
'/(<img([^>]*)>)/i'
Das klappt soweit super, aber ich möchte einen Auschluss dabei haben wenn das Attribute data-caption="false" vorkommt, also bei <img data-caption="false" /> soll der Regex nicht anspringen.
Kann mir da jemand weiterhelfen?
Danke und Liebe Grüße!
Tach,
ich brauche eure Hilfe bei der Zusammenstellung eines Regex und zwar möchte ich <img> Tags aus einer HTML Seite filtern, ich arbeite mit PHP und preg_replace():
ich würde drngend vorschlagen, das nicht mit einer Regex zu lösen, sondern auf einen Parser zu setzen, z.B. DOMDocument.
mfg
Woodfighter
Tach,
ich brauche eure Hilfe bei der Zusammenstellung eines Regex und zwar möchte ich <img> Tags aus einer HTML Seite filtern, ich arbeite mit PHP und preg_replace():
ich würde drngend vorschlagen, das nicht mit einer Regex zu lösen, sondern auf einen Parser zu setzen, z.B. DOMDocument.
mfg
Woodfighter
Danke für deine Antwort, hast du ein Bespiel dafür?
Hallo
ich brauche eure Hilfe bei der Zusammenstellung eines Regex und zwar möchte ich <img> Tags aus einer HTML Seite filtern, ich arbeite mit PHP und preg_replace():
ich würde drngend vorschlagen, das nicht mit einer Regex zu lösen, sondern auf einen Parser zu setzen, z.B. DOMDocument.
Danke für deine Antwort, hast du ein Bespiel dafür?
PHP stellt mehrere klassen zum Zugriff auf das DOM von XML- oder HTML-Dokumenten zur Verfügung. DomDocument ist meiner Meinung nach die am leichtesten erschließbare. Dort gibt es die Methode getElementsByTagName
, mit der man Zugriff auf alle Elemente eines Typs in einem Dokument hat. Im ersten Beispiel wird der grundsätzliche Zugriff anhand eines XML-Dokuments als Zeichenkette erklärt. Es darf natürlich auch ein Pfad zu einem Dokument angegeben werden.
Tschö, Auge
Tach,
Danke für deine Antwort, hast du ein Bespiel dafür?
http://forum.selfhtml.org/self/2015/jun/05/strip-tags-soll-auch-javacript-loeschen/1642290#m1642290 wäre sowas ähnliches (beachte bitte auch den Rest des Threads).
mfg
Woodfighter
Hallo,
ich würde drngend vorschlagen, das nicht mit einer Regex zu lösen, sondern auf einen Parser zu setzen, z.B. DOMDocument.
Danke für deine Antwort, hast du ein Bespiel dafür?
Gerade erst vorgestern hier durchgelaufen.
Und noch ein paar Threads weiter zurück, wie man sie aus dem Dokument löschen kann mittels DOMDocument-Klassen http://php.net/manual/en/class.domdocument.php
http://forum.selfhtml.org/self/2015/jun/05/strip-tags-soll-auch-javacript-loeschen/1642280#m1642280
Besonders zu beachten dabei die Hinweise von Felix zur LifeNodeList zum Löschen gefundener Nodes aus dem DOM (wenn man alle Nodes in der Liste entfernen will):
while ($__found_nodes->length > 0)
{
$__found_nodes->item(0)->parentNode->removeChild($__found_nodes->item(0));
}
Grüße
TS
Moin!
while ($__found_nodes->length > 0) { $__found_nodes->item(0)->parentNode->removeChild($__found_nodes->item(0)); }
Wow.
Ist wohl kein Zufall, dass das DOMDocument-Zeug irgendwie genau so wie Javascript aussieht … (s/->/./g)
Jörg Reinholz
Selber Moin :-)
while ($__found_nodes->length > 0) { $__found_nodes->item(0)->parentNode->removeChild($__found_nodes->item(0)); }
Wow.
Ist wohl kein Zufall, dass das DOMDocument-Zeug irgendwie genau so wie Javascript aussieht …
Ist tatsächlich ziemlich ähnlich vom Aussehen. Die Ordnung von Klassen, Methoden und Properties ist auch ähnlich verknotet. Alle Tricks, die damit möglich sind, habe ich auch noch nicht verstanden. Es kann aber noch deutlich weniger, als JavaScript.
Was mich daran stört ist, dass viele Informationen per Read-Only Property abgefragt werden müssen, statt per Methode, einige aber schon. Das wäre mMn konsequenter. So muss man immer erst ins Handbuch gucken, ob es z.B. ->length heißt oder ->length().
Grüße
TS
Tach!
Das klappt soweit super, aber ich möchte einen Auschluss dabei haben wenn das Attribute data-caption="false" vorkommt, also bei <img data-caption="false" /> soll der Regex nicht anspringen.
Man kann das musterbasiert angehen. Aber das hat irgendwo seine Grenzen, weil es eben nur musterbasiert ist und nicht sämtliche mögliche Feinheiten der Syntax abbilden kann. Du kannst das also hier nicht so formulieren "wenn das Attribut xyz vorkommt", weil es aus Sicht des Regex kein Attribut ist sondern nur eine Zeichenfolge. Die Frage ist also, an welcher Stelle die Zeichenfolge in deinem Fall steht, und da musst du sie dann erkennen. Dazu fallen mir auf die Schnelle Assertions ein. Die schauen nur in die Zukunft oder Vergangenheit, ohne diese Fundstellen zu verarbeiten (non-capturing), und es gibt sie auch in negativer Form, also "wenn da kein xyz folgt". Da kannst du ja mal schauen, ob das was wird. Ein konkretes Beispiel kann ich nicht geben.
dedlfix.
@@dedlfix
Regex […] Dazu fallen mir auf die Schnelle Assertions ein. Die schauen nur in die Zukunft oder Vergangenheit
Und damit wäre Regex genausowenig die Abkürzung von regular expression wie charset die Abkürzung von character set ist.
LLAP 🖖