[PHP]Wyrażenia regularne a BBCode

[PHP]Wyrażenia regularne a BBCode
SN
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 16 lat
  • Postów:109
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


pozdrawiam
Snowak
johny_bravo
  • Rejestracja:około 19 lat
  • Ostatnio:około 13 lat
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.


You need to learn how to walk
before you can run
SN
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 16 lat
  • Postów:109
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


pozdrawiam
Snowak
mysz
  • Rejestracja:ponad 18 lat
  • Ostatnio:prawie 9 lat
  • Postów:79
0

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


SN
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 16 lat
  • Postów:109
0

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


pozdrawiam
Snowak

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.