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

Eléphant du PHP | 447 Messages

08 déc. 2008, 16:55

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à!
Modifié en dernier par Stef le 08 déc. 2008, 17:18, modifié 1 fois.
Probably (only a) Human Problem?

ViPHP
AB
ViPHP | 5818 Messages

08 déc. 2008, 17:06

Si tu connais le nom de l'extension tu pourrais utiliser basename() en spécifiant le suffixe.

Eléphant du PHP | 447 Messages

08 déc. 2008, 17:16

Bingo! :D

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

Merci beaucoup AB!!
Probably (only a) Human Problem?

ViPHP
AB
ViPHP | 5818 Messages

08 déc. 2008, 21:57

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:

Eléphant du PHP | 447 Messages

08 déc. 2008, 22:03

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]

ViPHP
AB
ViPHP | 5818 Messages

08 déc. 2008, 22:19

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 :)

Eléphant du PHP | 447 Messages

09 déc. 2008, 10:02

hum ok! excellent! là tu m'as fait avancer, j'ai appris des trucs!

comment souvent lorsque je pose des questions sur ce forum...
Probably (only a) Human Problem?

ViPHP
AB
ViPHP | 5818 Messages

09 déc. 2008, 19:36

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.

Eléphant du PHP | 447 Messages

11 déc. 2008, 16:09

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
Probably (only a) Human Problem?