Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Podmiana znaków
Forum PHP.pl > Forum > Przedszkole
maax990
Witam mam string $str = 'jdjfksaakfsdnfjXXXXdashfadnvlzvlfam' i potrzebuje podmienić w nim kilka liter.Znam początek ale nie znam liter w miejscu które chce podmieniać: kfsdnfjXXXX gdzie kfsdnfj znam a xxxx nie.Jak mogę to zrobić znając część liter oraz ilość liter do podmiany?questionmark.gif
nospor
Najszybciej i najlatwiej
http://php.net/manual/en/function.preg-replace.php

maax990
Dziękuje za szybką odpowiedź, poćwiczyłem wg twojego linka z 4h, umie już zmieniać słowa kasować lub dodawać spacje , zastępować je czymś innym , ogólnie bardzo przydatna lekcja,nie umie natomiast zmusić skryptu do wykonania podmiany x znaków po określonym ciągu , dodam również ze jestem bardzo początkującym w php a ułatwiło by mi to pracę.Z góry dziękuje za dalsze podpowiedzi.
trzczy
Można tak:

.....

albo tak

.{5}

Kropka to dowlny znak niebędący końcem linii.
maax990
ehmm kolejne 4h na probie stworzenia czegoś poległy,za świeży w tym jestem. Pozostanie mi się poddać pewno trzeba poćwiczyć zeby nabrać skila.Prosze mi jeszcze tylko napisać czy poprzez preg_preplace mogę to zrobić w ten sposób że cześć która znam czyli "alamakotaajanie" gdzie w stringu nie znam "kota" mogę podmienić niewiadomą w sposób "ama...." gdzie niewiadome czyli kropi z gory okrestam ze to ma być np 0 i określam ilość zer jaka mam wstawić po "ama" task zeby nie zwiekszyc objętości tekstu tylko podmieniać kolejne znaki na z góry ustalona ilość zer?
viking
Pobaw się http://php.net/manual/en/function.stripos.php str_replace i podobnymi. Z tego opisu ciężko wywnioskować jak ten string wygląda (stała czy zmienna ilość znaków, stały czy zmienny napis).
BTW. Zawsze mnie to razi. Ja umiem, ty umiesz, on/ona/ono umie. To tak jakbyś pisał "Ja Polaka".
maax990
Dziękuję za odpowiedź,jeśli źle złożyłem zdanie to sorki.Tak tego zapomniałem napisać pliki o jednym ciągu string mają od 500kb do 2000kb , string podmiany jest przykładowy a ilość miejsc podmiany (niewiadomej ....) jest w każdym pliku inna.Z str_replace korzystam już od kilku dni do czegoś innego i działa świetnie, jednak nie udało mi się tego zastosować do podmiany niewiadomych znaków.
Pyton_000
  1. $str = 'alamakotaajanie';
  2.  
  3. $replacement = '${1}'.str_repeat('0', 4).'${3}';
  4. var_dump(preg_replace('/(.*?ama)(.{4})(.*)/', $replacement, $str));
maax990
Na pewno na tym poziomie wiedzy bym tego sam nie napisał .Dziekuje

Troszkę się pospieszyłem,działa ale np przy długim pliku 2mb szuka tekstu tylko do około 1/3 długości pliku.Jeśli tego nie przekroczymy to zapisze plik ze zmianami i jest luksus, jeśli natomiast przekroczymy tą długość to nie robi nic , echo nie wyrzuca na ekran nic a i plik zapisywany ma 0kb.Czy ktoś wie czemu się tak dzieje lub jak to naprawić?
SmokAnalog
Podaj przykład co dokładnie chcesz zamienić?
maax990
Dodaje pliki skrypt oraz binarka.Mam nadzieje ze nie popełniam tu jakiejś zbrodni dodając tu tego linka smile.gif.Tak może będzie najlepiej wyjaśnić o co mi chodzi.
Link
SmokAnalog
Co jest w tym binarnym pliku? Taka zamiana z wyrażeniami regularnymi nie wydaje mi się najlepszym pomysłem.
maax990
To zwykle dane sterujące,jest więc odczyt => konwersja bin2hex do ciągu znaków => preg_replace => konwersja hex2bin => zapis pliku , no i wszystko działa ale tylko na małych plikach bo jeśli podstawie np 2mb to tez zmieni ale tylko gdzieś do 1/3 długości , a później się gubi.Nie wiem czemu,oraz jak to zmienić na coś innego lub naprawić.Narazie potrzebuję tego do podmiany w plikach formatu bin, ale później będę musiał działać na zwykłych plikach tekstowych.Dodam tylko ze sama konwersja działa doskonale z samym str_replace , bo jeśli znam wszystkie znaki to ta funkcja działa doskonale na małych i dużych plikach

Nie ma żadnej innej alternatywy?
trzczy
Wystarczy chyba podmieniać ten kawałeczek 'ama....' Wtedy operacja zabiera mniej pamięci serwera. Czyli tak:
  1. echo preg_replace('/ama.{4}/','ama0000',$str);
maax990
trzczy strzał w dziesiątkę pliki do 2mega idą bez problemu.DZIEKUJE!
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.