Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Preg
Forum PHP.pl > Forum > PHP
lenrok7
Witam

Chciałbym za pomocą preg_replace podmienić tekst np.
  1. $tekst = "dobra pustka z bobra jest lepsza niż pustka z wieprza";
  2. $zmiana = preg_replace('/pustka/',"zupa",$tekst);
  3. echo $zmiana;

Cały problem w tym że zamienia mi na "dobra zupa z bobra jest lepsza niż zupa z wieprza" (prawidłowo)
A jak zrobić tak aby zależnie od potrzeb zamieniało tylko jedną "pustka" (pierwszą lub drugą)?
krowal
Możesz zrobić bez regexpów, np za pomocą strpos - wywoływane z parametrem offset dopóki nie znajdziesz pozycji wszystkich wystąpień szukanego wyrazu. Potem jak już będziesz miał pozycję możesz je łatwo podmienić wycinając słowo i wklejając nowe na pozycji x smile.gif
abort
Do zamiany pierwszego (i tylko pierwszego) znalezionego słowa preg_replace się nada. poczytaj dokładniej manuala: http://pl2.php.net/preg_replace
Zainteresuj się dodatkowym parametrem "int limit" - to chyba powinno pomóc.
Jeśli chcesz zamienić "tylko drugie" wystąpienie - to jest problem. Na szybko widzę dwa rozwiązania:
1. preg_replace zmienia oba słowa "A" na dowolny ciąg znaków "B" (musisz zapewnić unikalność), potem zamieniasz pierwszy "B" z powrotem na "A", a drugi na żądany przez Ciebie, docelowy "C"
2. Mając zdanie, rozbijamy je poprzez explode, otrzymujemy tablicę, którą obrabiamy w dowolny żądany sposób, a na koniec z powrotem złączamy przez implode - w ten sposób możemy np. zmienić tylko pierwsze trzy + ósme wystąpienia ciągu...
zegarek84
jeśli następne wystąpienia wyrażenia regularnego (nie pierwsze) lub warunki zmieniają się dynamicznie (czym zastąpić lub nie zastępować) to funkcja analogiczna preg_replace_callback
lenrok7
Dzięki

Użyję tymczasowo str_replace. Najwyżej połączę dwie funkcję strpos i str_replace (aby znaleźć dokładnie i zastąpić)
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.