Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Preg_Replace - problem.
Forum PHP.pl > Forum > Przedszkole
mcfreak
witam, mam taki sobie kod:

  1. ...
  2. $w = '[q]{x}[/q]';
  3. $w = str_replace('{x}','(.*?)', $w);
  4. $w ="/\"".$w."/";
  5. $mx = preg_replace($w,$ow,$mx); # linia 16


jednak wywala błąd:

CODE
Warning: preg_replace() [function.preg-replace]: Unknown modifier 'r' in ... on line 18


Co zrobić, żeby nie wywalało błędu? Jak skonstruować tą zmienną tak, aby działało:

  1. $w ="/\"".$w."/";


  1. Echo $w;
zwraca normalnie /\[q](.*?)[/q]/

McFreak.
tehaha
spróbuj zrobić żeby zwracało /\[q](.*?)[\/q]/
mcfreak
czyli przed każdym / mam stawiać \? ok , sprawdzę

edit:

jednak nie podziałało
/\[q](.*?)[\/q]/ jest, a błąd ten sam

Odświeżam, potrzebne naprawdę!
tehaha
daj taki kawałek kodu, żebym mógł u siebie zobaczyć
mcfreak
  1. <?php
  2. $x = 'haha.gif [x]{val}[/x] haha.gif'; // tekst
  3. $w = '[x]{val}[/x]'; // wyszukiwane
  4. $ow = '<b>$1</b>'; // zamiana
  5.  
  6. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  7. // a tutaj caly proces zamiany, taki jak by system bbcode
  8. $w = str_replace('{val}','(.*?)', $w);
  9. $w ="/\\".$w."/";
  10. $x = preg_replace($w,$ow,$x);
  11. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  12. ?>


a błąd taki:

  1. Warning: preg_replace() [function.preg-replace]: Unknown modifier 'b' in ... on line 10
croc
Powinno być:
  1. $ow = '<b>$1<\/b>'; // zamiana
tehaha
na tym prostym przykładzie u mnie działa:
  1. $array_find = array('[', ']', '/', '{val}');
  2. $array_replace = array('\[', '\]', '\/', '([^-]*)');
  3.  
  4. $string = "xd [x]{val}[/x] haha.gif";
  5. $look_for = "[x]{val}[/x]";
  6.  
  7. $pattern = "/".str_replace($array_find, $array_replace, $look_for)."/";
  8. $replace = "<b>$1</b>";
  9.  
  10. echo preg_replace($pattern, $replace, $string);
mcfreak
Dzięki, działa, jednak jest problem:

jeżeli $string: '***{val}***'; wywala błąd:

  1. Warning: preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 0 in ... on line 24

linijka 24 to preg_replace
tehaha
$string czy $pattern?
  1. <?php
  2.  
  3. $array_find = array('[', ']', '/', '*');
  4. $array_replace = array('\[', '\]', '\/', '\*');
  5.  
  6. $string = "xd [x]***{val}***[/x] haha.gif";
  7. $look_for = "[x]{val}[/x]";
  8.  
  9. $pattern = "/".str_replace($array_find, $array_replace, $look_for)."/";
  10. $pattern = str_replace('{val}','([^-]*)',$pattern);
  11. $replace = "<b>$1</b>";
  12.  
  13. echo preg_replace($pattern, $replace, $string);
  14. ?>


generalnie problem leży w tym że używasz znaki o specjalnym znaczeniu dla preg_match, dlatego przez str_replace podmieniamy np [ na \[ , * na \* i tam w array_find i array_replace musisz wstawić dla każdego znaku specjalnego taką podmianę
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.