Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zmiana pojedynczych znaków w podciągu, Wyrażenia regularne
dinioxx
post 24.08.2010, 12:50:06
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
Noidea
post 24.08.2010, 13:02:56
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 24.08.2010, 13:08:48
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 24.08.2010, 14:49:35
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 winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
Fifi209
post 24.08.2010, 18:21:26
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 ;]


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
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 Wersja Lo-Fi Aktualny czas: 6.07.2025 - 21:45