[PHP] Wyrażenia regularne i bbCode

0

Mam tekst, w którym są znaczniki [b], [/b], itp. Do zamiany ich na HTML używam funkcji:

$tresc=eregi_replace('[b](.*)[/b]', '<b>\1</b>', $tresc);

Ale w ten sposób tekst:
[b]Grube[/b]Zwykle[b]Grube[/b]Zwykle[b]Grube[/b]
zostanie przekształcony na:
< b >Grube[/b]Zwykle[b]Grube[/b]Zwykle[b]Grube< /b >
Czyli zostanie zamienione tylko pierwsze [b] i ostatnie [/b]. Jakiej funkcji użyć, aby zamieniał pierwsze napotkane [b] i pierwsze [/b] na odpowiednie znaczniki?
PS.

$tresc=eregi_replace('[b]','<b>',$tresc); $tresc=eregi_replace('[/b]','</b>',$tresc);

Ten kod odpada, bo będzie problem z [url].

Dopisane:
Jak skonstruować wyrażenie (.), aby uwzględniło tekst do znacznika [/b]?
Próbowałem: (.
)[^[/b]], ale nic nie daje - jak to poprawnie skonstruować?
Z góry dziękuję.

0

Polecam jakiś kurs wyrażeń regularnych. Dzieje się tak dlatego, gdyż używasz znaczników zachłannych. Użyj niezachłannych:

$tresc=eregi_replace('[b](.*?)[/b]', '<b>\1</b>', $tresc);
0
$dane = preg_replace("#\[b](.*?)\[/b]#i","<b>\\1</b>",$dane);

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