J'ai les fichiers nommésobtenir le numéro à partir du fichier avec regexp?
1234_crob.jpg
1234.jpg
2323_örja.bmp
2323.bmp
etc.
Comment puis-je récupérer simplement des nombres par exemple 1234 et 2323?
J'ai les fichiers nommésobtenir le numéro à partir du fichier avec regexp?
1234_crob.jpg
1234.jpg
2323_örja.bmp
2323.bmp
etc.
Comment puis-je récupérer simplement des nombres par exemple 1234 et 2323?
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";
}
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.
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). –
@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
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"
}
*/
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";
}
note: intval va tourner "045" dans "045_image.jpg" en 45. – ghostdog74
@ ghostdog74: J'ai manqué celui-là, corrigé maintenant. –