Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Preg replace i zwracanie błędnego rezultatu
Forum PHP.pl > Forum > PHP
bold
Witam!

Mam pole w bazie z następującą zawartością

  1. [eu]27.05.2012[/eu]
  2. [texty]Produkt dystrybuowany przez [w2]Nintendo eShop[/w2].[/texty]


Próbuję to sformatować, aby wychwytywało tylko zawartość pomiędzy [texty], a resztę po prostu usuwało. Wykorzystałem funkcję preg_replace w taki sposób:

  1. $tips = preg_replace('/(.*?)\[texty\](.*?)\[\/texty\](.*?)/is', '<span class=\'przyklad\'>$2</span>', $tips);


Ale niestety, to nie działa - tj. zwraca wszystko, razem z [eu]27.05.2012[/eu], aczkolwiek już bez tagów texty.

Co robię źle? Bardzo prosiłbym o pomoc.
Sephirus
Witaj

Wszystko robisz dobrze tylko z jedną rzeczą przesadziłeś smile.gif

w wyrażeniu pomiędzy texty masz nawias z ustawioną opcją ungreedy (znak zapytania) - i to jest ok... ale już przed ciągiem i za ciągiem jest to zbędnę... Zobacz co kazałeś pobrać:

1. Wybierz najmiej jak możliwe przed tagiem TEXTY
2. Tag Texty pomiń
3. wybierz to co w tagu TEXTY
4. Tag /Texty pomiń
5 Wybierz najmiej jak możliwe po tagu TEXTY

Rezultat:

Wyrażenie bierze najmniej przed więc cały początek jest zachowany, tak samo z końcem. Pozbywasz się jedynie tagu Texty smile.gif

Jak to powinno wyglądać?

Podpowiedź:

Opcja 1. Usuń modyfikatory zachłanności z 1 i ostatniego nawiasu
Opcja 2. Dodaj na początku i końcu wyrażenia znaki początku (^) i końca ($)

Obie opcje zadziałają wink.gif

HTH! wink.gif
bold
Bardzo dziękuję - naprawdę zaoszczędziłeś mi mnóstwo kombinowania wink.gif


Pozdrawiam!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.