![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 14 Dołączył: 8.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam. W wyrazeniach regularnych PERL-a użycie wyrażenia (.*?) we wzorcu powoduje wyszukanie najkrótszego dowolnego wzorca.
Wyrazenie (.*) czy tam (.?) (juz nie pamietam) powoduje wyszukanie najdłuzszego dowolnego wzorca. Czy jest mozliwosc wyszukania dowolnego najdłuższego wzorca? potrzebuje tego do parsera ktory wytnie z kodu HTML te znaczniki ktore da sie zamienic na bbcode. wyrazenie <span style="color: red">tekst czerwony <span style="font-style: italic">i pochylony</span></span> nie zamienia sie poprawnie na tekst czerwonyi pochylony tylko wychodzi tekst czerwony<span style="font-style: italic">. Cos takiego wychodzi. W kazdym razie powinien skoczyc do najdalszego znacznika span, a on skacze do najkrótszego. Nie da sie uzyc <b> <i> <u> poniewaz po wlaczeniu contentEditable w mozilli wykonanie polecenia mozilli exec("Bold") powoduje wstawienie do kodu nie <b> a wlasnie <span style="Font-weight: bold">... |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 590 Pomógł: 107 Dołączył: 25.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Czekaj, czy ja dobrze rozumiem, że chcesz zamienić wszystkie możliwe do zamiany tagi html na tagi bb? I chcesz to zrobić jednym regexpem? Będzie trochę skomplikowany. Tym bardziej, że <span style="color: red"> zamieniesz do bbcode na "color=red" i /color, dla kursywy będziesz miał style="font-style: italic" i "/i", a dla bolda dostaniesz "Font-weight: bold" i "/b". No a dla podkreślenia zapewne będzie "text-decoration: underline" i "/u". Dość trudne do pożenienia - zacząłem kombinować, i miałem podobne wyniki jak i Ty.
Ale jeśli już planujesz pisać jakąś funkcję, to poczytaj w manualu do PHP o "Pattern modifiers", zapewne zainteresujesz się czymś takim jak (PCRE_UNGREEDY) - to może Ci w dużym stopniu pomóc. W manualu masz o tym napisane: "If PCRE_UNGREEDY is set, the greediness of the repetition quantifiers is inverted, that is, by default they are not greedy, but if followed by a question mark they are.". P.S. Nie rozumiem, co miałeś na myśli pisząc "dowolny najdłuższy wzorzec". Albo jest najdłuższy (zapewne przy ustawieniu PCRE_GREEDY), albo najkrótszy (przy PCRE_UNGREEDY). Owszem, może być dowolny inny, ale wtedy na pewno ani nie najdłuższy, ani nie najkrószy. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 21:58 |