Page 1 sur 1

[Résolu (merci AB)!] Expression régulière

Posté : 08 déc. 2008, 16:55
par Stef
Hi!

j'ai une variable, disons $filename, qui contient le nom d'un fichier (avec l'extension), du style "nom-du-fichier.html",
je voudrais changer la valeur de cette variable à la 1ère partie de son nom, c'est à dire supprimer le .html...
comment faut-il faire?

j'ai essayer de potasser de la doc mais je suis un peu perdu là!

Posté : 08 déc. 2008, 17:06
par AB
Si tu connais le nom de l'extension tu pourrais utiliser basename() en spécifiant le suffixe.

Posté : 08 déc. 2008, 17:16
par Stef
Bingo! :D

C'est exactement ça, fa maaaaaaaaaaaarfe! (joie du débutant!)

Merci beaucoup AB!!

Posté : 08 déc. 2008, 21:57
par AB
Et si tu ne connaissais pas à l'avance le nom de l'extension, tu pourrais faire
$nomfichier = "to_tolklx.jpg.yoyo"; 
echo substr($nomfichier,0,strrpos($nomfichier,'.'));
:wink:

Posté : 08 déc. 2008, 22:03
par Stef
hello ab,

je comprends pas comment ça marche, mais je vais me documenter sur ce que tu dis, encore merci!

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 08 déc. 2008, 22:19
par AB
Tu peux tester directement le code ci-dessus dans une page php et tu verras que cela va te retourner 'to_tolklx.jpg'
J'ai pris volontairement un non de fichier bizarre incluant un point et une extension farfelue pour dire que ça fonctionne dans tous les cas.

Mais si tu fais
$nom_fichier = 'monfichier.php5';
$nom_fichier_sans_extension = substr($nom_fichier,0,strrpos($nom_fichier,'.')); 
echo $nom_fichier_sans_extension;
// affiche monfichier 
Pour mieux comprendre le fonctionnement il faut étudier séparément les fonctions strrpos() et substr();

L'avantage évident par rapport à la solution avec basename() c'est que tu peux trouver le nom du fichier sans extension, sans connaître celle-ci à l'avance :)

Posté : 09 déc. 2008, 10:02
par Stef
hum ok! excellent! là tu m'as fait avancer, j'ai appris des trucs!

comment souvent lorsque je pose des questions sur ce forum...

Posté : 09 déc. 2008, 19:36
par AB
Et bien si tu apprends, mission remplie :)

Maintenant imaginons que tu veuilles faire l'inverse, c'est à dire trouver l'extension d'un fichier.
En utilisant la même fonction substr() tu peux faire :
$nom_fichier = 'monfichier.php5';

$extension_fichier = substr(strrchr($nom_fichier,'.'),1); 
echo 'extension fichier = '.$extension_fichier; 

On pourrait obtenir le même résultat en utilisant les fonctions des tableaux :
$nom_fichier = 'monfichier.php5';

$tab_fich = explode(".", $nom_fichier);
$extension = array_pop($tab_fich);
$fichier_sans_extension = implode('.',$tab_fich);

echo 'extension = '.$extension.'<br/>';
echo 'fichier sans extension = '.$fichier_sans_extension;

Ou encore toujours la même chose avec des expressions régulières puisque c'était le titre de ton post
$nom_fichier = 'monfichier.php5';

$fichier_sans_extension = preg_replace("#.[a-zA-Z0-9]{2,}$#",'',$nom_fichier);
echo 'fichier sans extension = '.$fichier_sans_extension;

echo '<br />';

preg_match("#[a-zA-Z0-9]{2,}$#",$nom_fichier,$array); 
if (isset($array[0])) echo 'extension fichier = '.$array[0];
Mais j'aurais plutôt tendance à déconseiller les expressions régulières pour des choses aussi simples car cela demande plus de ressources pour le serveur.
Je te conseille plutôt de comprendre les deux premières solutions qui seront plus instructives dans un premier temps.

Posté : 11 déc. 2008, 16:09
par Stef
Ho yeah, merci beaucoup ab (j'avais pas vu ta réponse (pas de notifications par mail...)), je prends bonne notes de tout ceci!! :D