29.01.2009, 17:29
Hi MyBBCoder,
bei meinem Forenupgrade, an dem ich schon seit Monaten arbeite, komme ich langsam in die Endphase, wo nun allerhand kleinere Sachen noch umgesetzt werden müssen. Eine davon ist folgende:
Momentan gibt es in meinem Forum einen Thread-MyCode (und andere ähnliche MyCodes), der unter Angabe der TID zum entsrechenden Thread verlinkt (bsp: [thread=42]Text[/thread])
Diesen MyCode möchte ich nun folgendermaßen erweitern:
Es soll sowohl möglich sein, mit [thread=TID]Text[/thread] den Text des Links selbst zu bestimmen, als auch einfach nur ein [thread=TID] anzugeben, wo der Titel des Themas entsprechend aus der DB geholt wird. Das momentane Problem: Ich finde keinen passenden regulären Ausdruck, der diese MyCodes korrekt erkennt. Es wird entweder zu viel, oder das falsche geparst.
Beispiel:
_____
[thread=1] Dieser Text soll nicht geparst werden [thread=2]Titel von Thread-Link 2[/thread] Auch hier wieder kein parsen. [thread=3]
_____
Die blauen Stellen sind die standalone-Tags, wo anschließend dann der Titel des angegebenen Threads herausgesucht und als Link verwendet werden. Der grün markierte Teil ist die "klassische" Version, wo der Text des Links selbst mit angegeben wird.
Ich hatte mir gedacht, dass ich zuerst die Thread-Links raussuche, die eine Link-Text-Angabe besitzen (also die grünen), und über die übrig gebliebenen Thread-Codes (die ohne [/thread]) dann einen 2. regulären Ausdruck anwende (die blauen). Allerdings scheiter ich schon beim ersten:
Aktueller verwendeter Regulärer Ausdruck:
Erkennt bei obigen Beispiel aber folgendes:
[thread=1] Dieser Text soll nicht geparst werden [thread=2]Titel von Thread-Link 2[/thread]
Das heißt er nimmt direkt den ersten standalone-Tag (blau) und nutzt alles folgende bis zum [/thread] als Link-Text. Gewünscht ist aber (wie oben bereits erwähnt), dass nur der grüne Teil erkannt und entsprechend verarbeitet wird. Ich habe auch schon diverse andere Möglichkeiten probiert, aber entweder wird zu viel erkannt (wie hier), oder die klassische Variante (mit Text-Angabe) wird überhaupt nicht mehr erkannt
Meine Fragen diesbezüglich:
Ist es überhaupt möglich, diese zwei Varianten an MyCodes zu haben (dh dass bei der kurzen Variante der End-Tag fehlt)?
Wenn ja, wie müsste ein entsprechender regulärer Ausdruck aussehen, der die Teile richtig erkannt?
Würde mich freuen, wenn mir jemand weiterhelfen kann
MfG Zwoetzen
bei meinem Forenupgrade, an dem ich schon seit Monaten arbeite, komme ich langsam in die Endphase, wo nun allerhand kleinere Sachen noch umgesetzt werden müssen. Eine davon ist folgende:
Momentan gibt es in meinem Forum einen Thread-MyCode (und andere ähnliche MyCodes), der unter Angabe der TID zum entsrechenden Thread verlinkt (bsp: [thread=42]Text[/thread])
Diesen MyCode möchte ich nun folgendermaßen erweitern:
Es soll sowohl möglich sein, mit [thread=TID]Text[/thread] den Text des Links selbst zu bestimmen, als auch einfach nur ein [thread=TID] anzugeben, wo der Titel des Themas entsprechend aus der DB geholt wird. Das momentane Problem: Ich finde keinen passenden regulären Ausdruck, der diese MyCodes korrekt erkennt. Es wird entweder zu viel, oder das falsche geparst.
Beispiel:
_____
[thread=1] Dieser Text soll nicht geparst werden [thread=2]Titel von Thread-Link 2[/thread] Auch hier wieder kein parsen. [thread=3]
_____
Die blauen Stellen sind die standalone-Tags, wo anschließend dann der Titel des angegebenen Threads herausgesucht und als Link verwendet werden. Der grün markierte Teil ist die "klassische" Version, wo der Text des Links selbst mit angegeben wird.
Ich hatte mir gedacht, dass ich zuerst die Thread-Links raussuche, die eine Link-Text-Angabe besitzen (also die grünen), und über die übrig gebliebenen Thread-Codes (die ohne [/thread]) dann einen 2. regulären Ausdruck anwende (die blauen). Allerdings scheiter ich schon beim ersten:
Aktueller verwendeter Regulärer Ausdruck:
Code:
#\[thread=(\d+?)\](.*?)\[/thread\]#si
Erkennt bei obigen Beispiel aber folgendes:
[thread=1] Dieser Text soll nicht geparst werden [thread=2]Titel von Thread-Link 2[/thread]
Das heißt er nimmt direkt den ersten standalone-Tag (blau) und nutzt alles folgende bis zum [/thread] als Link-Text. Gewünscht ist aber (wie oben bereits erwähnt), dass nur der grüne Teil erkannt und entsprechend verarbeitet wird. Ich habe auch schon diverse andere Möglichkeiten probiert, aber entweder wird zu viel erkannt (wie hier), oder die klassische Variante (mit Text-Angabe) wird überhaupt nicht mehr erkannt
Meine Fragen diesbezüglich:
Ist es überhaupt möglich, diese zwei Varianten an MyCodes zu haben (dh dass bei der kurzen Variante der End-Tag fehlt)?
Wenn ja, wie müsste ein entsprechender regulärer Ausdruck aussehen, der die Teile richtig erkannt?
Würde mich freuen, wenn mir jemand weiterhelfen kann
MfG Zwoetzen