[PHP] preg_match

Flyde

Cadet 4th Year
Registriert
Jan. 2007
Beiträge
114
Hi, ich hätte da ein kleines problem und zwar: ich will nen ordner auslesen und die ordner von den dateien filtern (also nur die ordner sollen ausgegeben werden)

Zweck: ich will die ordner auflisten lassen nur habe ich noch nie was mit preg_match gemacht und ich wüsste gerne was ich als falsch mache :P

Hier mal der code:
PHP:
	while(false !== ($dir = readdir($list_tpl))) 
	{
		if(!preg_match("/./", $dir))
		{
			$tpl_form = $tpl->load("sites/form_tpl_option.html");
			$tpl_form = $tpl->replace("{tpl_list}", $dir, $tpl_form);
			$temp.= $tpl_form;
		}
	}
}

Ausgabe ist: nichts ^^ liegt aber definitiv am preg_match, wenn ichs wegmache, werden alle ordner + dateien aufgelistet

Hoffe es hat fix wer ne lösung :P
 
Der dot ist in PCRE ein Metazeichen und steht für "alle Zeichen außer Newline" bzw. bei gesetztem s-Modifier für "alle Zeichen inkl. Newline". Um einen literalen dot zu matchen, mußt du ihn escapen:
PHP:
preg_match('/\./', ...);
Allerdings kommst du damit auch nicht weit, da du auf diese Weise nur das Vorkommen eines dots ermittelst.

Um alle Verzeichnisse zu bekommen, solltest du mit is_dir() filtern und auf Ungleichheit mit den Zeichenketten '.' und '..' testen:
PHP:
$dh = opendir($dir);
while ($node = readdir($dh)) {
  if (!is_dir($dir . $node) || $node == '.' || $node == '..')
    continue;
  // verwrusten
}

greetings, Keita
 
Zuletzt bearbeitet:
also ich habs jetzt in ner kombi aus meinem und deinem gemacht wobei das mit dem $node == "." und ".." hab ich weggelassen, da er mir sonst in <option></option> jeweils . und .. angezeigt hat und es funzt einwandfrei

PHP:
		if(is_dir("templates/".$read) && !preg_match("/\./", $read))
		{
			$tpl_form = $tpl->load("sites/form_tpl_option.html");
			$tpl_form = $tpl->replace("{tpl_list}", $read, $tpl_form);
			$temp.= $tpl_form;
		}


so funzt es einwandfrei, sollt ich das mit dem $node jetzt auch noch einbauen? o.0
Und wofür sind die eigentlich? Ist da irgendein Hintergrund in sachen Ordnerauslesung den ich nicht kenne?
 
Deine Lösung funktioniert nur, solange in keinem Verzeichnisnamen ein dot vorkommt, da du ja auf (nicht)Vorkommen von dots matchst. Sicherer wäre stattdessen
PHP:
if (is_dir("templates/".$read) && $read != '.' && $read != '..') {
  $tpl_form = $tpl->load("sites/form_tpl_option.html");
  $tpl_form = $tpl->replace("{tpl_list}", $read, $tpl_form);
  $temp.= $tpl_form;
}

Ich hatte die Variable $node genannt, weil readdir() sowohl Verzeichnis- als auch Dateinamen zurückliefert, die Bezeichnung $dir wäre demnach semantisch falsch ;)

greetings, Keita
 
ah ok,
Script -> Funzt
Verstand hat neues Wissen aufgenommen -> Checked
:P thx ^^
 
Zurück
Oben