2010-01-16 5 views

Répondre

3

Si les noms de fichier commencent tous avec des chiffres il n'y a pas besoin d'utiliser des expressions régulières, essayez ceci:

foreach (glob('/path/to/dir/{0,1,2,3,4,5,6,7,8,9}*', GLOB_BRACE) as $file) 
{ 
    echo $file . ' = ' . intval(basename($file)) . "<br />\n"; 
} 

Ce modèle glob mise à jour ne correspondent noms de fichier commençant par un chiffre, comme vous demandé.


@ ghostdog74: Vous avez raison.

foreach (glob('/path/to/dir/{0,1,2,3,4,5,6,7,8,9}*', GLOB_BRACE) as $file) 
{ 
    echo $file . ' = ' . filter_var(basename($file), FILTER_SANITIZE_NUMBER_INT) . "<br />\n"; 
} 
+0

note: intval va tourner "045" dans "045_image.jpg" en 45. – ghostdog74

+0

@ ghostdog74: J'ai manqué celui-là, corrigé maintenant. –

2

D'abord explode sur la période, puis exploser sur le trait de soulignement, puis votre numéro est le premier élément de la liste renvoyée.

<?php 
$str1 = "1234.jpg"; 
$str2 = "1234_crob.jpg"; 

$pieces = explode("_",current(explode(".",$str1))); 
echo $pieces[0]; // prints 1234 

$pieces = explode("_",current(explode(".",$str2))); 
echo $pieces[0]; // prints 1234 
?> 

Oui, je me rends compte ce n'est pas une expression régulière, mais cela est trop simple tâche d'utiliser des expressions régulières.

EDIT: Code modifié pour fonctionner avec vos nouveaux exemples de mise en forme. EDIT: Modifié pour s'adapter proprement dans une ligne de code.

+0

Auch ... Regex serait plus simple! =) Aussi, certains des noms de fichiers peuvent ne pas avoir de numéros du tout (du moins c'était ce que le demandeur a commenté sur ma réponse). –

+0

@Alix Axel: Hehe, c'est peut-être vrai. Je préfère toujours utiliser des fonctions intégrées dans la mesure du possible. Je suppose que vous pouvez utiliser is_numeric() pour tester si $ pieces [0] est un nombre. Mais je vois ce que vous dites, maintenant ce code a l'air d'être compliqué par rapport à regex. – Roman

2

En supposant que vous passez seulement dans les noms de fichiers (et non les chemins de fichiers), ce qui suit devrait récupérer tous les numéros consécutifs 0-9:

function getDigits($fn) { 
    $arr = array(); 
    preg_match('/[0-9]+/', $fn, $arr); 
    return $arr; 
} 

Exemple d'utilisation

var_dump(getDigits('hey_12345.gif')); 
/* 
output: 
array(1) { 
    [0]=> 
    string(5) "12345" 
} 
*/ 

var_dump(getDigits('123487_dude.jpg')); 
/* 
output: 
array(1) { 
    [0]=> 
    string(6) "123487" 
} 
*/ 
0

essayer cette . Si vous avez des nombres comme 045_test.jpg, l'utilisation d'intval vous donnera 45 au lieu de 045

$path="/path/[0-9]*"; 
foreach (glob($path) as $files){ 
    $base=basename ($files); 
    $s = preg_split("/[^0-9]/",$base,2); 
    echo $s[0]."\n"; 
} 
Questions connexes