• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Gelöst regex Frage zu mehrere Parameter, aber je nur einmal und beliebige Reihenfolge

Ich suche einen Ausdruck, der mir erlaubt, nach einem bestimmten Stichwort "iframe" noch mehrere Parameter folgen zu lassen, durch Leerstellen getrennt. Diese sollen aber nur einmal oder nicht vorkommen. Der ganze Ausdruck wird in geschweifte Klammern eingebettet. Die Parameter selbst haben den Aufbau: param="wert".

Beispiel:
Code:
{iframe with="800" height="600"}

Eine erste Lösung habe ich noch selbst geschafft: Alle Parameter werden erkannt, aber noch ist es so, dass sie selbst beliebig oft vorkommen können und es trotzdem mit dem 1. Parameter losgehen muss:
Code:
{iframe\s*(width=".*")?\s*|(height=".*")?\s*}*

Habt ihr eine Idee dazu, wie ich es formulieren muss, dass sie je nur einmal erlaubt sind? Eigentlich war die Intention, dies über das "?" nach der Klammer zu erreichen ;-)

Vielen Dank vorab für Hinweise :)
 
Servus @Geier0815 , erstmal danke, dass Du Dir das ansiehst :). Ich musste inzwischen merken, dass das mit den Klammern als Gruppieren auch nicht ganz so läuft wie erhofft ;-). Wenn es zu hart wird, dann lass ich es bei einer festen Reihenfolge und Parameter können gesetzt sein oder nicht.

Zur Umgebung: Ich arbeite mit PHP8.* und ja, width und height sind nur Zahlenwerte. Aber das sind Kleinigkeiten, erstmal das Große klären.

Eine Geschichte habe ich wohl falsch verstanden. Ich dachte, dass jedes runde Klammernpaar einem Element aus $matches[] (außer 0) entspricht. Jedoch führt ein solcher Ausdruck (ohne Oderung):
Code:
$regex = '/{iframe\s*(width=".*")?\s*(height=".*")?\s*(style=".*")?\s*}*/i';
dazu, dass $matches[1] alle 3 Parameter gleichzeitig enthält.
Nur nebenbei, ich arbeite mit preg_replace_callback() und die callback hat als Eingangsparameter dieses $matches[] Array
 
Wie Du gesehen hast, hab ich meinen ursprünglichen Post gelöscht weil ich dein Problem falsch verstanden hab.
Wenn ich dein Problem jetzt richtig verstehe, dann ist es mit einem regulären Ausdruck nicht möglich dieses zu lösen. Sämtliche Quantifizierer beziehen sich nur auf die Anzahl der Zeichen/Ausdrücke nach denen sie gebraucht werden, nicht aber auf die Gesamtanzahl dieser Ausdrücke.
 
Will mich nochmal bedanken für die vielen Anregungen und rückmelden, was ich jetzt gemacht habe :). Ich verwende jetzt für jeden Parameter einen match. Das löst das Reihenfolgeproblem und macht alles einfacher ;-)
 
Oben