[PHP]Wyrażenia regularne a BBCode

0

Witam,
przy oprogramowywaniu BBCodu pojawił mi się niezbyt ciekawy problem... Przy niektórych tagach konieczne jest aby wszelkie tagi w nim nie były przetwarzane, przykładem takiego tagu może być chociażby [code]. Myślałem nad tym aby po prostu wywołać funkcję preg_replace_callback co dopasuje wszystkie takie tagi i pozamienia w ich zawartości wszelkie [ i ] na ich HTML-owe odpowiedniki &~;
No tylko problem jest jak to dopasować...

#\[b](.*?)\[/b]#i
Dopasuje mi pierwsze rozpoczęcie tagu [ b] i pierwsze pojawiające się zamknięcie, więc jeżeli zagnieździmy tagi w ten sposób: [ b]asd[ b]asd[ /b]asd[ /b] to to wszystko szlag trafi

Drugie co wymyśliłem to:
#\[b](.*)\[/b]#i
Ale w końcu wyszło, że jeżeli kod wygląda tak: [ b]asd[ /b] asd [ b] asd [ /b] to zamieni 1sze i ostatnie wystąpienie, czyli uzyskam coś w stylu < b>asd [ /b] asd [ b ] asd < /b>

Już dobre parę godzin nad tym siedzę i oprócz wyrażeń regularnych próbuję coś wymyśleć z funkcjami do obsługi tekstu z serii ~str~ ale nic mi nie wychodzi. Jak to można rozwiązać? W wyrażeniach regularnych to ja jestem ciemny i żadne manuale mnie nie zbawiły.

Z góry dziękuję za pomoc

0

Mialem ostatnio ten sam problem i doszedlem do wniosku, ze wyrazenia regularne sa do d*py przy zagniezdzonych tagach. Problem rozwiazalem piszac prosty parser html. Dzialanie proste - przegladasz tekst, zapisujesz sobie otwierane tagi na stosie, sciagasz zamykane ze stosu. Jak nie pasuje otwarty do zamknietego to albo olewasz (jezeli nadmiarowy zamkniety) albo zamykasz/olewasz (jezeli nadmiarowy otwarty). Przy okazji latwo zamienic na odpowiedniki - czyli np. zamiast [quote autor] dac

tresc
.</p>

Kodu niestety dac nie moge, bo to projekt komercyjny byl, ale jestem pewien, ze jakies parsery na necie znajdziesz.

0

Właściwie to w ten sposób właśnie to pisałem, tylko problem jest taki że te tagi są oparte na pregach.. bo właśnie nimi da radę zrobić tagi [url=adres]Strona[/url]

Coż, dzięki, już znalazłem parę parserów i zobaczę co da się zrobić... Najwygodniej byłoby cały tekst przetworzyć na wielowymiarową tablicę gdzie nazwy elementów to byłyby nazwy tagów a później ją po prostu po kolei przetwarzać jeżeli to jest konieczne

0

Spróbuj skorzystać z podejścia z jakiego korzystałem robiąc skracanie tekstu: http://urzenia.net/316/skracanie-tekstu/.

0

Już dawno ten problem rozwiązałem.. ale dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1