Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Kolejne zamienianie, Wyrażenia regularne
Ociu
post 24.01.2006, 09:43:51
Post #1





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




Mam string typu
Kod
Ma?a  ?a k?t?
i tablicę:
  1. <?php
  2. $vars = array(
  3. 1 => 'm',
  4. 2 => 'm',
  5. 3 => 'o',
  6. 4 => 'a'
  7. );
  8. ?>


Chciałbym aby przelecieć to jakimś wyrażeniem( którego nie wiem jak zbudować ) aby będzie zamieniał po kolejne ? na literki z tablicy. Of course nr. pytajnika = numerkowi literki.

Ma ktoś jakieś pomysły jak to zrobić ?

z góry dziękuje.

pozdrawiam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
jaco
post 24.01.2006, 09:49:10
Post #2





Grupa: Zarejestrowani
Postów: 115
Pomógł: 1
Dołączył: 15.01.2003

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


  1. <?php
  2.  
  3. $vars = array(
  4. 1 => 'm',
  5. 2 => 'm',
  6. 3 => 'o',
  7. 4 => 'a'
  8. );
  9.  
  10. $x = 0; 
  11. echo preg_replace('/\?/e', '$vars[++$x];', 'Ma?a  ?a k?t?');
  12.  
  13. ?>


Warto zauwazyc, ze nie da sie napisac pytajnika winksmiley.jpg Moze cos takiego...

  1. <?php
  2. echo preg_replace('/([^\\\])\?/e', ''\\1'.$vars[++$x];', 'Ma?a \? ?a k?t?');
  3. ?>


Teraz mozna zwyklym replace zamienic \? na ? lub zupelnie ekstermalnie:

  1. <?php
  2. echo preg_replace('/(.)\?/e', '(ereg('[^\\\\]''\\1') ? '\\1'.$vars[++$x] : '?');', 'Ma?a \? ?a k?t?');
  3.  
  4. ?>


Mozliwe, ze to nie najprostrze rozwiazanie winksmiley.jpg
Go to the top of the page
+Quote Post
Radarek
post 24.01.2006, 11:28:17
Post #3





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 23.05.2005

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


Cytat(jaco @ 2006-01-24 08:49:10)
  1. <?php
  2.  
  3. $vars = array(
  4. 1 => 'm',
  5. 2 => 'm',
  6. 3 => 'o',
  7. 4 => 'a'
  8. );
  9.  
  10. $x = 0; 
  11. echo preg_replace('/\?/e', '$vars[++$x];', 'Ma?a ?a k?t?');
  12.  
  13. ?>


Warto zauwazyc, ze nie da sie napisac pytajnika winksmiley.jpg Moze cos takiego...

No przeciez to dziala :-). Nie wiem o co ci chodzi, ze nie mozna napisac pytajnika?smile.gif

Ten kod wypisuje: "Mama ma kota". Chyba o to chodzi prawda?smile.gif
Go to the top of the page
+Quote Post
crash
post 24.01.2006, 12:29:02
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


Chodzi o to, żeby nie wpaść w błoto tongue.gif Żartuję... Spróbuj potraktować tym tekst, w którym ma być normalny znak zapytania, wszystko się wtedy "rozjedzie".


--------------------
Go to the top of the page
+Quote Post
Radarek
post 24.01.2006, 15:28:33
Post #5





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 23.05.2005

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


Cytat(jaco @ 2006-01-24 08:49:10)
Mozliwe, ze to nie najprostrze rozwiazanie winksmiley.jpg

Hehe, no nienajprostsze smile.gif.

  1. <?php
  2. $vars = array(
  3. 1 => 'm',
  4. 2 => 'm',
  5. 3 => 'o',
  6. 4 => 'a'
  7. );
  8.  
  9. $x = 0;
  10.  
  11. $regex = "/(?<!\\\\)\\?/e";
  12. echo preg_replace($regex, '$vars[++$x];', 'Ma?a \? ?a k?t?\?');
  13.  
  14. ?>


Teraz trzeba pozamieniac wszystkie wystapienia \? na ?.

Z automatyczna zamiana:

  1. <?php
  2. $x = 0;
  3. $tekst = 'Ma?a \? ?a k?t?\?';
  4. $regex = "/(\\\\)?\\?/e";
  5. echo preg_replace($regex, ''\\0'=='\\?''?' : $vars[++$x]', $tekst);
  6. ?>


Twoje rozwiazanie nie dzialalo jesli pierwszym znakiem byl ? (nie byl podmieniany).
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: 20.06.2025 - 22:21