N'abend plectron,
zwar verstehe ich nicht, was das mit dateinamen, die gültig sein sollen, zu tun hat,
aber ein Zeichen, daß nicht zweimal hintereinander vorkommen darf, wird so formuliert:
irgendeinZeichen(?!irgendeinZeichen)
Wenn sich diese Bedingung auf zwei Zeichen beziehen soll, deren _jeweiligen_ doppelten Vorkommen ausgeschlossen sein sollen, darf man _nicht_ sagen:
denn das bedeutet:
ein Bindestrich oder ein Komma, _weder_ gefolgt von einem Bindestrich _noch_ von einem Komma,
während
heißt:
entweder ein Bindestrich, nicht gefolgt von einem Bindestrich, oder ein Komma, nicht gefolgt von einem Komma.
Ein regulärer Ausdruck, der der Anforderung
" - Es sollte z.B. möglich sein, Unter- und Bindestriche, Leerzeichen und Punkte
in einem String zu erhalten, wobei diese nicht am Anfang oder am Ende stehen
dürfen und auch nicht zweimal hintereinander vorkommen dürfen. - "
insofern entspricht, als daß eben ausschließlich strings gefunden werden,
die weder Leerzeichen, noch Binde_ oder Unterstriche, noch einen Punkt am
Ende oder Anfang aufweisen, und ansonsten aus mindestens einem [a-zA-Z0-9] oder
eben besagten Zeichen bestehen, wobei diese nicht in der Form
ZeichenUndDirektDanachDasGleicheZeichenNocheinmal vorkommen können, kann zB.
so aussehen:
$l = '[0-9a-zA-Z]';
$z = '[-._ ]';
preg_match("/^$l(?:$l|(?:($z)(?!\1|$)))*$/", $str);
Was Du mit
"Alle Anderen Zeichen (Sonderzeichen) müssen natürlich entfernt werden."
meinst, ist mir in diesem Zusammenhang ebenfalls schleierhaft.
Wann entfernt? Vor dem match, nach dem match? Wieso?
Willst Du strings finden, die einer bestimmten Bedingung entsprechen,
oder willst Du aus irgendwelchen x-beliebigen stringstücken Dir
Dateinamen zusammensetzen, und welchen Sinn hätte dann die Anfang- und Ende-
Bedingung?
Mit leicht verwirrtem gruß
matho