Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zmiana pojedynczych znaków w podciągu
Forum PHP.pl > Forum > PHP
dinioxx
Mając ciąg znaków w dowolnym miejscu (w tym na początku i na końcu) może pojawić się podciąg ograniczony znakami '<' oraz '>'. Chciałbym zmienić wszystkie znaki '/' na '*' w tym podciągu. Uwaga znaki '/' mogą znajdować się też poza ciągiem, wtedy nie należy ich zmieniać.

Przykład 1:
Wejście:
abc/<d/e/f>/ghi
#znaki d, e, f mogą mieć dowolną długość (dowolną liczbę liter)
Wyjście:
abc/<d*e*f>/ghi


Przykład 2:
Wejście:
<a/b/c>/<d/e/f>/<g/h/i>
#znaki a, b, c, d, e, f, g, h, i mogą mieć dowolną długość (dowolną liczbę liter)
Wyjście:
<a*b*c>/<d*e*f>/<g*h*i>


Przykład 3:
Wejście:
<a/b/c>/<d/e/f>/ghi
#znaki a, b, c, d, e, f mogą mieć dowolną długość (dowolną liczbę liter)
Wyjście:
<a*b*c>/<d*e*f>/ghi


Przykład 4:
Wejście:
<a/b/c>/def/ghi
#znaki a, b, c mogą mieć dowolną długość (dowolną liczbę liter)
Wyjście:
<a*b*c>/def/ghi


Kompletnie nie wiem jak się do tego zabrać. Jeśli zmianie ulegałyby wszystkie znaki '/' to nie było by problemów ale tutaj chodzi o to, że tylko część, która spełnia kryteria (należenia do podciągów ograniczonych do < i >) tylko została zmieniona.
Noidea
Wyciąganie wszystkiego z nawiasów trójkątnych <(.*?)>
+ preg_replace z modyfikatorem e (przykład 4)
+ str_replace

powinno wystarczyć
dinioxx
W zasadzie to wszystko wiem (oprócz modyfikatora e). Pytanie jak połączyć w jedną całość. Niestety to raczej mnie przerasta.

Cytat(Noidea @ 24.08.2010, 14:02:56 ) *
(przykład 4)

Oczywiście wkradła się literówka w przykładzie 4. Już poprawiłem pierwszy post. Początek podciągu zawsze zaczyna się od '<' a kończy się na '>'.
Noidea
Modyfikator e to eval, czyli kod php, który ma się wykonać podajesz jako string. W twoim przypadku będzie to:
  1.  
  2. "str_replace( '/', '*', '\\1' )"
  3.  


\\1 oznacza pierwszy (jedyny) nawias okrągły z wyrażenia, które podałem. W sumie to wszystko masz na tacy, więc nie żartuj, że powkładanie tego w odpowiednie miejsca preg_replace cię przerasta winksmiley.jpg
Fifi209
To raczej preg_replace_callback ;]
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.