Hallo,
bei konstrukten wie das hier zb
[b]conse[i]ctetuer[/b] dolor[/i]
bekomme ich natürlich ungültige verschachtelungen zusammen
[...]
hat jemand einen tipp für mich, wie man da herangeht?
Du willst also falsche Verschachtelungen erkennen?
Das könnte z.B. so gehen: Der Reihe nach je ein tag einschließlich des folgenden Textes (also "[b]conse", "[i]ctetuer", "[/b] dolor", "[/i]") erkennen lassen und dann in eine Art Stack (Array) je ein erkanntes Element schieben, wenn es mit einem Start-tag beginnt, bzw. das letzte aus dem Stack wieder entfernen, wenn als nächstes ein End-tag kommt. Passt das End-tag nicht zum entfernten Start-tag, ist eine falsche Verschachtelung erkannt.
Der Stack würde sich also erst füllen mit
"[b]conse"
"[i]ctetuer"
und weil dann "[/b] dolor" folgt, was ein End-tag hat, wird "[i]ctetuer" wieder aus dem Stack entfernt. Da es nicht zu "[/b] dolor" passt, liegt eine falsche Verschachtelung vor. Weil man so die falsche Stelle immer im Zugriff hat mitsamt dem zugehörigen Text, kann man auch gleich eine Reparatur versuchen.
Das nur mal so als Denkanstoß. Die Sache ist nicht ganz trivial, besonders wenn die tags nicht paarweise auftreten, d.h. wenn einzele fehlen. Um das wenigstens zu merken, kann man zuerst alle Start-Tags und dann alle End-tags erkennen lassen, um zu prüfen, ob ihre Anzahl gleich ist. Wo genau ein tag fehlt, dürfte aber nicht so einfach festzustellen sein.
Viel Spass beim Weitertüfteln, Don P