Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Preg, zamiana tylko pierwszego znalezionego elementu
lenrok7
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 27.11.2011

Ostrzeżenie: (0%)
-----


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ą)?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
krowal
post
Post #2





Grupa: Zarejestrowani
Postów: 561
Pomógł: 72
Dołączył: 15.11.2006

Ostrzeżenie: (0%)
-----


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


--------------------
Nawet świnka może wejść na drzewo kiedy jest chwalona :)
Go to the top of the page
+Quote Post
abort
post
Post #3





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
zegarek84
post
Post #4





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


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


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
lenrok7
post
Post #5





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 27.11.2011

Ostrzeżenie: (0%)
-----


Dzięki

Użyję tymczasowo str_replace. Najwyżej połączę dwie funkcję strpos i str_replace (aby znaleźć dokładnie i zastąpić)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 19:14