m/ ( # Speichere alles in $1 < # Suche nach einem Literalen "<" (?: # Entweder... [^<>]++ # Soviele nicht "<" und ">" wie möglich einfangen"... | # oder... (?1) # wenn man hier ist muss das nächste zeichen ein "<" # oder ">" sein. Mit (?1) wird die Regex Engine angewiesen # weiter bei der erste klammern "(" weiterzumachen. # kurz gesagt immer wenn du auf "<" oder ">" stößt # ruft sich die regex praktisch "rekursiv" immer wieder # selber auf. Dadurch kann eine beliebige # verschachtelungstiefe erreicht werden. # Wenn die Regex bei der ersten Klammer weiter macht muss # wieder ein "<" kommen, kommt das nicht vorher # (wenn es ein ">" ist ) # dann fährt die regex nun an dieser stelle weiter )* > # und hier wird nun das ">" erkannt das von (&1) nicht # erkannt wurde ) /xg;