Wyra?żenia regularne - wę?ższy zakres

0

Hej! Pisze skrypt który będzie przetwarzał pewien tekst. Jeśli znajdzie w minim sekwencje POGRUB...KONIEC to ma je zastąpić na [B] i [/B]. Napisałem tak:

   $s=eregi_replace('\\[POGRUB\\](.*)\\[/KONIEC\\]','[b]\\\\1[/b]',$s);

I wszystko byłoby super.. ale gdy mam tekst:

POGRUB tekst tekst KONIEC
tekst tekst POGRUB tekst
tekst KONIEC

To wszystko jest pogrubione. Bo ten zapis jakby szuka najbardziej zewnętrznego tekstu który pasuje do wyrażenia. A ja chciałbym jak najwęższe. Jak to zrobić?

0

A nie lepiej str_replace('POGRUB', '[b]', $text); ?

A jesli zalezy ci na wyrazeniu to moze byc cos takiego:

echo(ereg_replace('POGRUB[^POGRUB]*KONIEC','<b>\\\\0</b>','POGRUB tekst tekst KONIEC tekst tekst POGRUB tekst tekst KONIEC'));
0

No chodzi mi koniecznie o to by był objęty tymi słowami, więc pierwszy przykład odpada. Drugi też bo taki kod:

echo(ereg_replace('POGRUB[^POGRUB]*KONIEC','<b>\\\\0</b>','POGRUB tekst tekPst KONIEC tekst tekst POGRUB tekst tekst KONIEC'));

Już źle zadziała. Dostawiłem tam w środku literkę P. Twoja reguła oznacza, że pomiędzy POGRUB i KONIEC nie może wystąpić żadna z liter P, O, G, R, U, B. No
właśnie, gdyby to było jako całość "POGRUB" byłoby ok.

Więc podtrzymuje pytanie.

Ale jednocześnie nasuwa misię drugie. Nawias kwadratowy jest znakiem specjalnym. Więc gdy chcemy go użyć - jako znaku, poprzedzamy \. Czy tak?
Ale kod powyższy gdy zapisałem:

echo(ereg_replace('\\[POGRUB\\][^\\[POGRUB\\]]*\\[KONIEC\\]','<b>\\\\0</b>','[POGRUB] tekst tekst [KONIEC] tekst tekst [POGRUB] tekst tekst [KONIEC]'));

To już nie działa w ogóle :( A przecież zmieniłem tylko POGRUB na [POGRUB]?
O co chodzi? Pliss pomóżcie.

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