PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   preg_match (http://www.selfphp.de/forum/showthread.php?t=5462)

web-wg 07.09.2003 19:39:11

preg_match
 
Hi, ich verstehe die folgende function nicht so ganz:


if (!preg_match('/^.{1,2}/', $file))

Die sorgt dafür, das die Verzeichnisse [..] oder zb .htaccess nicht angezeigt werden. Was muss ich da ein bauen, das z.B. *.php oder *.html nicht angezeigt werden???

Wäre dankbar für eure Hilfe!

Ralf

c4 07.09.2003 20:01:10

Ich bin nicht sonderlich geübt mit regulären Ausdrücken, also bitte hab Nachsicht mit mir. :)

Versuch's mal so:
PHP-Code:

if (!preg_match('/^.{1,2}(htm*|php)?/'$file)) 


web-wg 07.09.2003 20:23:58

hm...
 
geht irgendwie nicht!
Wenn ich das so einbaue, werden sowohl die Punkte (./..) als auch die *.php Datein angezeigt...

ich werde weiter rumprobieren...

Ralf

c4 07.09.2003 20:34:24

So geht's:
PHP-Code:

if (!preg_match('/^.{1,2}|(.*^.)*.(php|htm|txt|css)/is'$file)) 


web-wg 07.09.2003 23:19:55

wahrscheinlich..
 
...bin ich zu doof!
Wenn ich das so übernehme, dann zeigt er nix mehr an...

sourcecode 08.09.2003 02:57:50

sowas geht auch ohne pregmatch. kannst autoindexing mit indexignore verwenden, oder du fragst einfach die letzten zeichen (substring) des dateinamens ab.

c4 08.09.2003 07:15:11

Zitat:

...bin ich zu doof!
Wenn ich das so übernehme, dann zeigt er nix mehr an...
Liegt vielleicht daran, dass mit der Variante fast jede brauchbare Datei ausgeblendet wird? ;)
Lass doch einfach mal php und ein Trennzeichen weg, dann sollten entsprechende Dateien wieder angezeigt werden.

tapferesschneid 09.09.2003 14:15:45

Also hier ist noch jemand ohne Ahnung, aber vieleicht funktioniert das hier:

PHP-Code:

$needle '/.(php|htm(l)?)$/';

if (!
preg_match($needle,$haystack)) echo 'not ';
echo 
'found'

So viel ich verstanden habe: Die »/« am Anfang und Ende sind die sog. Delimiter, müssen sein.
Das »$« am Ende heißt, daß $haystack mit der gesuchten Kette enden muß.
».« ist der escapte Punkt vor Deiner Dateiendung.
»|« heißt »oder«.
Die Konstruktion »(php|htm(l)?)« prüft, ob nach dem Punkt entweder ein »php« oder ein »htm« mit optional (dafür steht die »{0,1}« ersetzende Kurzform »?«) anschließendem »l« steht.

Weitere Kurzformen wären »+« für »1 oder mehrere« und »*« für »0 oder mehrere«.

Die beiden nachstehenden $needle prüfen in meinem Gästebuch die Plausibilität von e-mail- bzw. Web-Adressen (Das »^« am Anfang bedeutet, analog zum »$« am Ende, daß $haystack mit der gesuchten Kette beginnen muß).

$needle = '/^[a-z0-9_.-]+@[a-z0-9_.-]+.[a-z]{2,4}$/';
$needle = '/^(http://)?[a-z0-9_.-]+.[a-z]{2,4}(/[a-z0-9_./#~?&=-]*)*$/';

flobee 27.09.2003 10:23:56

für ordner?
 
für ordner allein (zum verstecken von [.] , [..]) müsste das so aussehen?
PHP-Code:

$needle ="/^.+/i"

ich probier mich gerade :-)
auf meinem WINdoof geht das zumindest

27.09.2003 10:39:02

Damit wird doch jeder Verzeichniseintrag, der einen oder zwei Punkte enthält ausgeblendet, nicht oder?

Müsste das nicht |^[^.]{1,2}| heißen? Damit wird doch eigentlich alles ausgeschlossen, was mit einem oder zwei Punkten anfängt. Die .htaccess also auch.


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:21:49 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.