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