Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zmiana pojedynczych znaków w podciągu, Wyrażenia regularne
dinioxx
post
Post #1





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

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


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.

Ten post edytował dinioxx 24.08.2010, 13:07:23
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Noidea
post
Post #2





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

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


Wyciąganie wszystkiego z nawiasów trójkątnych <(.*?)>
+ preg_replace z modyfikatorem e (przykład 4)
+ str_replace

powinno wystarczyć
Go to the top of the page
+Quote Post
dinioxx
post
Post #3





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

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


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 '>'.

Ten post edytował dinioxx 24.08.2010, 13:09:33
Go to the top of the page
+Quote Post
Noidea
post
Post #4





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

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


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 (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Fifi209
post
Post #5





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


To raczej preg_replace_callback ;]
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 01:44