Autor Zpráva
kubatt
Profil
čaute zní to sice blbě ten název ale nevěděl jsem jak to nazvat :(
když použiju funkci
function _modulLoad($callback,$arr = true){
  if(!$arr){$callback[1]=$callback;}
  $arg = explode(",",$callback[1]);
  $output = "";
  if(@file_exists(_rootdir."modules/".$arg[0].".php"))
  include _rootdir."modules/".$arg[0].".php";
  else
  $output = "Modul '".$arg[0]."' nebyl nalezen!!!";
  return $output;
 }
$text = preg_replace_callback('/\[modul](.*?)\[\/modul\]/U','_modulLoad', $text);

a v proměnné text je třeba "[modul]test,1[/modul], [modul]test,1[/modul]"
no tak mi to potom vypíše jen jednou to $output jen to první, ale když to dám na druhý řádek /n ten druhý modul tak to jde.
Nevíte kde je chyba? díky
Tori
Profil
'/\[modul](.*?)\[\/modul\]/U'
Jeden z označených znaků tam nepatří. Tohle: .* normálně sebere všechno co může (takže to našlo všechno mezi prvním [modul] a posledním [/modul]). Zalomení řádku to chování "opravilo", protože tečka normálně znamená jakýkoli znak kromě zalomení řádku (tohle chování se ruší modifikátorem s). No - a aby .* nebylo tak "hladové", tak se používá buď .*? pro ten jeden případ, anebo modifikátor U pro celý regulár. Pokud je nastavený modif. U a navíc použijete i otazník, tak pro tu jednu skupinu .* se ruší platnost modif.U = ta jedna skupina je opět "hladová". Což se stalo. (viz manuál o modifikátorech) (Sorry, že to nevím vysvětlit srozumitelněji.)
kubatt
Profil
díky mam to ;)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0