Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wyrazenia reg
Forum PHP.pl > Forum > Przedszkole
kontur
Moja funkcja ma za zadanie z $folderu_poczatkowego, przekopiowac wszystkie foldery do $nowy_folder. Dla folderow zagniezdzonych bezposrednio w $folder_poczatkowy wszystko ladnie dziala, ale problem pojawia sie gdy w jakis folder zagniezdzony jest glebiej i funkcja wywoluje sie rekurencyjnie. Konkretnie zawodzi wyrazenie regularne- przegladarka wyswietla ostrzezenie:

Warning: preg_match() [function.preg-match]: Unknown modifier 't' in C:\Program Files\WebServ\httpd-users\cwiczenia\cw175a.php on line 31

a katalog sie nie tworzy. Siedze od 2 godzin i wpadlem na inny pomysl jak to zrealizowac, ale chcialbym sie dowiedziec co zrobilem zle. Czytalem manuala, przejzalem teorie z ksiazki juz n razy i nie mam pojecia gdzie tkwi blad :/
  1. function skopiuj_strukture($folder_poczatkowy,$nowy_folder)
  2. {
  3. $folder_poczatkowyBU=$folder_poczatkowy;
  4. if(substr($folder_poczatkowy,-1,1)!='/')
  5. {
  6. $folder_poczatkowy.='/';
  7. }
  8. if(!file_exists($nowy_folder))
  9. {
  10. mkdir($nowy_folder);
  11. }
  12. $podkatalogi=glob($folder_poczatkowy.'*');
  13. for($i=0;$i<count($podkatalogi);$i++)
  14. {
  15. if(is_dir($podkatalogi[$i]))
  16. {
  17. $wyr_reg='/'.$folder_poczatkowyBU.'\/([a-zA-Z0-9_]+)/';
  18. preg_match($wyr_reg,$podkatalogi[$i],$podkatalog);
  19. if(!file_exists($nowy_folder.'/'.$podkatalog[1]) && !is_file(($nowy_folder.'/'.$podkatalog[1])))
  20. {
  21. mkdir($nowy_folder.'/'.$podkatalog[1],0700,true);
  22. }
  23. skopiuj_strukture($podkatalogi[$i],$nowy_folder.'/'.$podkatalog[1]);
  24. }
  25. }
  26. }


gdy skorzystam z echo "</br>".$podkatalog[1];
to przegladarka wyswietli dla folderu na ktorym testuje:
adam_asnyk
cyprian_kamil_norwid
julian_tuwim
kazimierz_przerwa_tetmajer
konstanty_ildefons_galczynski
krzysztof_kamil_baczynski
leopold_staff
maria_konopnicka
tadeusz_rozewicz
Warning: preg_match() [function.preg-match]: Unknown modifier 't' in C:\Program Files\WebServ\httpd-users\cwiczenia\cw175a.php on line 31
czyli funkca znalazla podkatalog w ktoryms z wyzej wymieninych katalogow, ale z jakiegos powodu preg_match tym razem nie zadzialal tak samo jak w poprzednich przypadkach.
nospor
echo $wyr_reg;
Co zwraca?
kontur
Cytat(nospor @ 12.04.2012, 08:02:26 ) *
echo $wyr_reg;
Co zwraca?


  1. $wyr_reg='/'.$folder_poczatkowyBU.'\/([a-zA-Z0-9_]+)/';
  2. echo $wyr_reg."</br>";

/wiersze175\/([a-zA-Z0-9_]+)/
/wiersze175\/([a-zA-Z0-9_]+)/
/wiersze175\/([a-zA-Z0-9_]+)/
/wiersze175\/([a-zA-Z0-9_]+)/
/wiersze175\/([a-zA-Z0-9_]+)/
/wiersze175\/([a-zA-Z0-9_]+)/
/wiersze175\/([a-zA-Z0-9_]+)/
/wiersze175\/([a-zA-Z0-9_]+)/
/wiersze175\/([a-zA-Z0-9_]+)/
/wiersze175/tadeusz_rozewicz\/([a-zA-Z0-9_]+)/

Warning: preg_match() [function.preg-match]: Unknown modifier 't' in C:\Program Files\WebServ\httpd-users\cwiczenia\cw175a.php on line 32

czyli wyglada ok- w katalogu tadeusz_rozewicz jest faktycznie podfolder i funkcja go odnajduje tylko preg_match sie wykoleja

OK, juz dziala, za dlugo wczoaraj siedzialem;P
Problemem byly znaki '/' wystepujace w zagniezdzonej sciezce wystarczylo zmienic delimitery:
  1. $wyr_reg='~'.$folder_poczatkowyBU.'\/([a-zA-Z0-9_]+)~';
Sephirus
Musisz po prostu escapeować znak "/"

  1. $wyr_reg='/'.str_replace('/','\/',$folder_poczatkowyBU).'\/([a-zA-Z0-9_]+)/';


EDIT: Uprzedziłeś mnie z odpowiedzią smile.gif ale jak widać są dwa sposoby - z czego jednak twój jest lepszy wink.gif
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.