2015-07-23 4 views
0

J'ai les noms de fichiers suivants:nom de fichier de match avec la fonction glob

foo.ext 
foo-1.ext 
foo-2.ext 
foo-3.ext 

Actuellement le code

$name = "foo-[0-9].*"; 
glob($name as a $filename){ 
    echo $filename; 
} 

Seuls les résultats

foo1-ext 
foo2-ext 
foo3-ext 

Mais pas foo.ext

Comment puis-je modifier mon glob pour qu'il corresponde à?

+0

J'ai supprimé la balise 'regex' et l'ai remplacée par la balise' globbing'. Il y a une grande différence entre les deux. Le chercher. – DuncanKinnear

+0

Jetez un oeil à [l'article Wikipedia sur glob] (https://en.wikipedia.org/wiki/Glob_%28programming%29) pour plus d'aide. – DuncanKinnear

+0

Première glob avec foo * et ensuite, filtrer les résultats avec une regex. – Heroselohim

Répondre

-1

Essayez

$name = "foo(-[0-9])?.*"; 

Il est quelque chose le long de ces lignes de toute façon!

+0

Déjà essayé et ça ne marche pas – Toki

+0

Bien que l'OP ait mal étiqueté cette question avec 'regex', l'expression qu'il utilise est une expression de globbing, pas une regex. Il ya une énorme différence. – DuncanKinnear

2

Ceci est NOT une regex, ceci est globbing.

Il y a une énorme différence entre les deux.

La globalisation est l'utilisation de caractères génériques utilisés lorsque vous spécifiez des fichiers sur la ligne de commande. Donc en globbing, l'expression foo* signifie 'foo' suivi de ANY (ou pas).

Considérant que, dans regex, l'expression foo* signifie 'fo' suivant n'importe quel nombre (y compris zéro occurrence) du caractère 'o'. La globalisation est beaucoup plus restrictive que regex. La seule façon d'obtenir ce que vous voulez est de "foo*.*".

+1

"Ce n'est pas une regex, c'est un globbing." T-shirt imprimé avec ça dessus –

+0

J'ai 2 personnes qui en veulent déjà une! :-) – DuncanKinnear