Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> preg_replace, zamiana patternu
Athlan
post
Post #1





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


Witam,

ostatnio piszę system wymiany linków kontekstowych i natknąłem się na pewien problem. Aby nie wdrażać całego systemu postanowiłem napisać mały przykładzik:

  1. <?php
  2. echo preg_replace(array('/test/', '/sample/'), array('replaced_test sample', 'replaced_sample'), 'test');
  3. ?>


Oczekiwany wynik: replaced_test sample
Wynik który powstaje: replaced_test replaced_sample

Wniosek? preg_replace zamienia również patterny, które są zamiennikami dla patternów, które mają być zamienione.

Jak uniknąć sytuacji, aby to, co jest zamiennikiem juzzostało na zawsze, bez zamieniania?

Problem dość ciekawy, czekam na sugestie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdrawiam, Athlan
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Athlan
post
Post #2





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


@Kicok: tutaj zrobiłem przykład zamianiania wartosci, nie kluczy z identyfikatorem, i nie jest to najlpeszy sposób. Poza tym to co powiedziałeś nie idzie w dobrym kieunku, gdyż wyrazy w tekście nie posiadają takiego identyfikatora. Tekst jest najzwyklejszy w świecie...

  1. <?php
  2. $sId = ':ad65gn435sd4v';
  3. $a1 = array('/test/', '/sample/');
  4. $a2 = array('replaced_test sample', 'replaced_sample' . $sId);
  5. ?>


@Kicok: ale natchnąłeś mnię do innego pomysłu:

ażda zamieniana fraza obięta by była w jakieś znaki, dla przykladu i wyłącznie przykładu dajmy znaki procenta: %

  1. <?php
  2. $a1 = array('/test/', '/sample/');
  3. $a2 = array('%replaced_test sample%', '%replaced_sample%');
  4. ?>


Po co to? A no po to, że string wewnątrz % i % NIE JEST brany pod uwagę zamiany. Gorzej z ułożeniem do tego odpowiedniego prega. Zna ktoś odpowiedź, jak wykluczyć string między % i % ?

Ogolnie sposób dobry (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdrawiam, Athlan






--- EDIT ---

Znaleziono rozwiązanie... wystarczy mieć matcha: /(wyraz|wyraz|wyraz)/e zamieniane na: $a2[\\1]
Go to the top of the page
+Quote Post

Posty w temacie


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: 14.10.2025 - 20:23