Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: preg_replace dwie definicje
Forum PHP.pl > Forum > PHP
gothye
witam
stoję przed problemem a mianowicie :

mam w funkcji fragment :

  1. $rule = '/^([a-z]+)\/([a-z]+)$/i' ;
  2.  
  3. $cel = '?parent=$1&module=$2' ;
  4. if(preg_match($rule,'przykladowy/ciag'))
  5. {
  6. echo preg_replace($rule , $cel , 'przykladowy/ciag');
  7. }


ale musze dopisać jeszcze możliwość definiowania reguły np :
$rule = 'jeden/dwa' i aby wynik był : ?parent=jeden&module=dwa'

i tu pojawia sie pytanie jak cos takeigo wykonać ?
tehaha
zakładam, że przykładowy ciąg jest znakiem alfanumerycznym lub spacją:
  1. $rule = 'przykladowy/ciag';
  2. $rule2 = preg_replace('/([A-za-z0-9 ]*)\/([A-za-z0-9 ]*)/' , '?parent=$1&module=$2', $rule);
  3. echo $rule2;
gothye
dzieki dokładnie tak ,
z tym że pojawia sie problem ,ponieważ jak wpisze 'jeden/dwa' dla preg_match to wywala bład i musze wykonać jeszcze warunek który będzie sprawdzał czy wyrażenie $rule jest definicją wyrażenia dla preg_match czy ciągiem znaków ..:/ jest to możliwe ?
tehaha
jaki błąd wywala? a tak na marginesie mogłeś to przecież zrobić przy pomocy explode(), a nie preg_replace()
gothye
moze inaczej ,jak zdefiniować :

aby z definicji '/^jeden\/([a-z]+)$/i' dla przykłądowego ciągu 'jeden/costam' osiągnąć : '?parent=jeden&module=costam'

a najlepiej w pistaci tablicy array('parent' => 'jeden' , 'module' => 'costam' ) ;
tehaha
szczerze mówiąc to nie wiem o co Ci teraz chodzi, dałem CI rozwiązanie jak z ciągu 'jeden/costam' zrobić - > '?parent=jeden&module=costam', więc w czym jest problem?
a z zapisem do tablicy to możesz przecież:
  1. $string = 'jeden/costam';
  2. $explode = explode('/', $string);
  3. $parent = $explode[0];
  4. $module = $explode[1];
  5. $array = array('parent' => "$explode" , 'module' => "$module" );
gothye
znam zasade działania explode ,ale juz nie o to chodzi ...
idąca dalej i rozwijając funkcje z pierwszego postu chciałbym wykonać dodawanie reguł w postaci np
  1. 'jeden/([0-9]+)'
dla źródłowego ciągu
  1. 'jeden/10'
aby wynikiem była tablica
  1. array('parent' => 'jeden' , 'module' => 10 ) ;


tehaha
albo ja jestem niekumaty albo Ty słabo tłumaczysz, piszesz cały czas że chcesz zamienić 'jeden/10' na array('parent' => 'jeden' , 'module' => 10 ) ; .........to przecież ten kod z explode, który Ci dałem właśnie to robi....może daj dokładny przykład co ma być na co zamienione
gothye
funckja ma służyc do parsowania linku w postaci jeden/dwa/trzy......(..) ale w ten sposób aby można było definiować elementy linku jako np string 'jeden' lub np wyrażenie regularne : ([0-9]+) ,aby wynikiem funckji była tablica

ok juz napisałem sam winksmiley.jpg
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.