preg_match ('/ \. (?! pdf) $ /', $ fichier)
Je veux faire correspondre tous les fichiers sauf les fichiers pdf
path/file.jpg # match path/file.png # match path/file.pdf # not match
3 Réponses :
Au lieu d'utiliser regex, vous pouvez prendre l'extension de votre fichier et vérifier s'il s'agit d'un pdf.
<?php
$file = array("path/file.jpg", "path/file.png", "path/file.pdf");
foreach ($file as &$value) {
preg_match('/^(.(?!.*\.pdf$))*$/', $value, $matches);
if(!empty($matches)){
echo " $value is not a pdf";
}
}
Si vous préférez utiliser regex
$ext = pathinfo($file, PATHINFO_EXTENSION);
if($ext != 'pdf'){
echo "I'm not a pdf";
}
Je préfère les regex ..
Si vous souhaitez utiliser une expression régulière, celle-ci fonctionnera:
"path/file.jpg" is not a PDF file. "path/file.png" is not a PDF file.
Elle utilise simplement une anticipation négative pour affirmer que le nom de fichier ne se termine pas par .pdf code> puis . * pour faire correspondre tout le nom du fichier.
En PHP:
$filenames = array('path/file.jpg','path/file.png','path/file.pdf');
foreach ($filenames as $filename) {
if (preg_match('/^(?!.*\.pdf).*$/', $filename)) echo "\"$filename\" is not a PDF file.\n";
}
Sortie:
^(?!.*\.pdf).*$Démo sur 3v4l.org
Affirmer que quelque chose n'est pas présent dans une expression régulière est souvent fastidieux, car une expression régulière fonctionne en regardant à travers l'entrée pour que les choses correspondent.
L'approche que vous avez utilisée est une "assertion à anticipation négative de largeur nulle" - elle correspond à n'importe quel endroit de la chaîne qui n'est pas suivie de pdf , mais pas "utiliser" n'importe quelle entrée . Donc, votre expression régulière ne fonctionne pas car le reste doit encore correspondre, et c'est /\.$/ , qui signifie ". à la fin de la chaîne". < / p>
L'approche la plus simple consiste à rechercher des chaînes qui font fin .pdf , par exemple if (! preg_match ('/ \. pdf $ /', $ fichier)) {...} .
si le fichier a un nom comme
path / pdf_file.pngcorrespond à tous les fichiers sauf les fichiers pdf
\. (?! pdf $). + $@ splash58 Veuillez éviter de poster des réponses sous forme de commentaires; il est plus difficile à trouver et impossible à modifier, à voter, etc.
Vous ne devez pas utiliser toutes les expressions régulières complexes recommandées ci-dessous. Utilisez plutôt
$ (? .