Pattern auf Dateiname

FireFlow

Erfahrenes Mitglied
Nun ich brauch einen speziellen Pattern für einen Dateinamen.
Ich hab mir das auf php.net schon angeschaut, wie das gehen soll. Nur leider versteh ich das absolut nicht. Villeicht auch (nur) weil es in englisch geschreiben ist.

Wenn jemand ne nette Seite dazu kenn bitte mal sagen :)

Nun zu meinem eigentlichen Problem:
Ich brauch ein Pattern das auf folgenden String funktioniert:

Das erste Zeichen soll (a-zA-Z0-9) sein. Dann kommen beliebig viele beliebige Zeichen und danach ein Punkt. Nun bei der Datei-Erweiterung soll nur php, html, jpeg, gif oder txt erlaubt sein.

Villeicht versteh ich es ja anhand von dem Beispiel.

Danke im vorraus.
 
Das sollte so aussehen:
Code:
/[a-z0-9].*\.(php|html|jpeg|gif|txt)/i
Zuerst in den eckigen Klammern wird eine Zeichenklasse definiert... mit Buchstaben und Zahlen.
Danach steht der Punkt für ein beliebiges Zeichen.... das Asterisk steht für beliebig viele davon.
danach der Punkt steht für den Punkt:-).... damit er auch als solcher angesehen wird, muss er mit einem Backslash escaped werden.
Danach in den runden Klammern die alternativen Möglichkeiten für die Endungen.

Der Schalter "i" am Ende bewirkt, dass Gross/Kleinschreibung nicht unterschieden wird.
 
Nun da dachte ich schon ich habs verstanden...

aber folgendes liefert True: - Dabei wollte ich das ausschließen, und das ist es doch auch! :confused:

PHP:
preg_match("/[a-z0-9].*\.(php|html|jpeg|gif|txt)/i", "_test.php")

return: True- soll aber False

PHP:
preg_match("^[a-zA-Z0-9][a-zA-Z0-9]*\.(php|html]|[jpeg]|[jpg]|[gif]|[txt])$", "_test.php")

>>> Warning: No ending delimiter '^' found in /.../index.php on line 1


Wohl doch nicht so einfach :rolleyes: - Nur weil man mal was falsches sagt muss man doch nicht gleich den Beitrag löschen :p
 
Zuletzt bearbeitet:
Da brauchst du Teile aus beiden Sachen.... und diese korrekt zusammengefügt, sollten dann hinhauen:)
Code:
preg_match("/^[a-z0-9].*\.(php|html|jpeg|gif|txt)$/i", "_test.php")
....mit den Zeichen ^ und $ werden Anfang und Ende der zu durchsuchenden Zeichenkette markiert..... das würde in diesem Fall "false" ergeben, weil das erste Zeichen kein Buchstabe/Ziffer ist.
 
Dankeschön

Hab ich das richtig verstanden dass ich [ ] nehm z.B. bei A-Z und 0-1. Und ( ) nehm wenn ich schon nen String habe der exakt sein soll und eben noch alternativen per "|" ?
 
Jo, hast du recht verstanden:)
In eckigen Klammern stehen immer Zeichenklassen, daher macht oberhalb in deinem 2. Beispiel etwas wie [gif] keinen Sinn,... es trifft zwar auf "gif" zu, aber bspw. ebenso auf "fifi" oder jeden anderen String, welcher aus diesen 3 Buchstaben besteht.

Das mit den Alternativen in den runden Klammern ist auch richtig so...(die runden Klammern werden aber auch zum bilden von Referenzen benutzt).
 
Les nicht zu genau mit:-)

[gif] trifft natürlich nicht auf "fifi" zu, sondern nur auf "g","i" oder "f"....

bei [gif]* wird dann aber nen Schuh draus.

Ist halt schon spät.:rolleyes:
 
[gif] trifft natürlich nicht auf "fifi" zu, sondern nur auf "g","i" oder "f"....
Öhm, na des weiss ich eigentlich scho, hab nur nicht dran gedacht :)

[gif] is ja wie [a-zA-Z] ... jaaa, spät und arbeiten - nebenbei tutorials.de - is keine gute Idee
 
Zurück