Jonny 5: Regex um <img>-Elemente mit und ohne alt-Attribut

Beitrag lesen

Hallo Felix!

Bei dem zweiten Code-Beispiel wird zwar das gesamte <img>-Element durch zwei Leerzeichen ersetzt, der Inhalt des alt-Attributs wird aber in keinem Fall eingetragen.

Wer kann mir helfen, dass der Inhalt des alt-Attributs nach der Ersetzung wieder erscheint?

Mal abgesehen davon, dass regex nicht das optimale Werkzeug zum Parsen von html ist (<img alt=">"...>, nesting usw). Wenn das DEIN INPUT ist, dann weisst du ja, was du zu erwarten hast.

Es sollte mit einem lookahead-conditional klappen, wenn auch nicht besonders schön:

~(?is)<img(?(?=[^>]* alt="([^"]+)")).*?>~

nach dem <img...
(? startet conditional
(?= startet condition (lookahead)
[^>]* alt="([^"]+)") hier sind wir noch in der Bedingung, in die wir auch gleich eine capturing-group gepackt haben, die den alt-text erfassen soll. Es ist kein ODER definiert, matcht also so oder so. Dann noch .*?  möglichst wenige irgendwelche Zeichen bis zum >.

Ersetzt mit $1: dem, was durch die erste (hier einzige) capturing group gegebenenfalls gecaptured wurde. Beispiel zum probieren.

Hoffe, die Idee hilft und herzliche Grüße,
Jonny 5