![]() |
![]() |
![]()
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.
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ą)? |
|
|
![]() |
![]()
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
![]() -------------------- Nawet świnka może wejść na drzewo kiedy jest chwalona :)
|
|
|
![]()
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... |
|
|
![]()
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ę.
|
|
|
![]()
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ć) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 19:14 |