Votre question

Preg_replace() supprimer toute une partie d'une chaine

Tags :
  • Array
  • Programmation
Dernière réponse : dans Programmation
Anonyme
27 Septembre 2010 19:29:11

Bonjour,

quelqu'un pourrait il me dire comment écrire la bonne syntaxe pour supprimer toute une partie d'une chaine renvoyée par une variable...

merci pour voitre aide précieuse ...



j'ai une variable : $toto
qui me renvoie soit la chaine:
'nom_du_dossier/test.jpg' soit 'nom_du_dossier/test.gif'
et il faut que je puisse afficher juste le mot : 'test'

j'arrive a afficher 'file/test' en faisant:

Citation :


$in = array();
$in[0] = '/.jpg/';
$in[1] = '/.gif/';
$out = array();
$out[1] = '';
$out[0] = '';

echo preg_replace($in, $out, $toto) ;


mais je connais pas la syntaxe ou autre fonction qui me permettrait de supprimer l'ensemble des caractères (nom du dossier) compris avant le '/' dans ma chaine

je cherche a n'afficher que le nom de la photo sans son extension ni son chemin d'accès....


Si vous avez des pistes ... je cherche mais je suis débutant 1er niveau et pas facile pour moi :( 

merci

marie

Autres pages sur : preg replace supprimer partie chaine

a c 145 L Programmation
27 Septembre 2010 21:12:55

Tu veux en fait récupérer le nom du fichier, sans son chemin ni son extension ?
  1. $pattern = '![^\/]+\/([^\.]+)\.[a-z]{3}$!i';
  2. echo preg_replace($pattern, '$1', $toto);

C'est bien sûr perfectible, mais tout dépend de comment et pourquoi tu utilises ton script.
m
0
l
Anonyme
28 Septembre 2010 12:37:39

merci merci parfait!
m
0
l
Contenus similaires
28 Septembre 2010 12:46:34

Mouais ... Pour récupérer le nom d'un fichier à partir du Path complet il y a basename qui est fait pour, ex:

  1. <?php
  2. $path = "/home/httpd/html/index.php";
  3. $file = basename($path); // $file is set to "index.php"
  4. $file = basename($path, ".php"); // $file is set to "index"
  5. ?>


Plus simple quand même ...
m
0
l
a c 145 L Programmation
28 Septembre 2010 12:53:40

RedSux a dit :
Plus simple quand même ...

D'ou mon "tout dépend de comment et pourquoi tu utilises ton script"
J'ai répondu à la question initiale en sachant très bien que d'autres solutions existent et sont peut-être préférables.
Mais d'expérience, je sais aussi qu'il vaut mieux ne pas embrouiller le demandeur, d'abord lui répondre puis lui proposer autre chose si l'on pense que c'est plus adapté.
m
0
l
28 Septembre 2010 13:04:18

J'ai jamais dis l'inverse crazy ... J'ai simplement ajouter une possibilité ...
m
0
l
a c 145 L Programmation
28 Septembre 2010 14:40:33

Oui oui ;)  Je ne te contredis pas, au contraire j'approuve qu'une autre personne ait fait le "mais" :) 
m
0
l
Anonyme
28 Septembre 2010 15:46:17

Merci a vous 2....

puisque voua avez l'air dispo a donner un coup de main et qui plus est le plus approprié ,
si je peux me permettre de vous solliciter un peu plus pour :

l'idée est donc d'afficher en légende de photo le nom du fichier photo sans son extension ni son chemin d'acces et en remplaçant les "-" par un espace vide

ainsi ma photo ..../.../imgs/nom_repertoire/vu-de-coté.jpg
devra afficher comme légende:
vu de coté

Dans mon cas précis , ma variable image $value , me renvoie le nom du fichier image avec le nom de son répertoire uniquement soit nom_répertoire/nom_fichier

Avec le bout de code de Crazy... ok nikel je renvoie bien le nom de fichier uniquement ; mais a présent il faudrait que je refiltre pour remplacer les éventuels '-' du nom du fichier par des espaces

preg_replace() est il adapté ?
pourriez vous me dire comment agencé correctement dans la fonction

j'ai fait qqs bidouillage mais je ne renvoie rien ... hummm.... c'est pas trop mon truc ....


Merci pour le temps que vous m'accordez ;) 

Marie





m
0
l
a c 145 L Programmation
28 Septembre 2010 16:03:49

Si c'est pour n'avoir que le nom du fichier et remplacer les éventuels tirets par des espaces, ce sera trop gourmand pour pas grand chose.
Je pars du principe qu'il s'agit d'images (3 formats possibles: gif, jpg, png), placées quelque part dans l'arborescence et que tu peux avoir des "-" ou des "_" qui remplacent les espaces.

Tu pourrais donc faire:
  1. <?php
  2. $image = "/chemin/vers/ton/image.gif";
  3. # on récupère les infos sur le fichier
  4. $info = pathinfo($image);
  5. # on récupère le nom sans l'extension
  6. $desc = basename($image, $info['extension']);
  7. # on remplace les - et _ par un espace
  8. $desc = str_replace(array('-', '_'), '', $desc);
  9. echo $desc;
  10. ?>

Autant que possible, si on peut se passer facilement des expressions régulières, il vaut mieux le faire car elles consomment bien plus de CPU que des modifications simples sur une chaîne.
m
0
l
Anonyme
28 Septembre 2010 17:22:09

merci tout d'abord .......

ceci dit pourrais je avoir un brin d'info supp ...

en 5 et 6 de ton dernier code , on recupere le nom sans l'extension...
$desc = basename($image, $info['extension']);
'extension' dans $info['extension'] est a remplacer par les types d'extensions possible ?

déolé j'ai l'impression de me transformer en boulet :) 

mais le code tel que donné plus bas ne renvoie rien chez moi
en cherchant un peu le pathinfo($image) ne renvoie rien non plus ...



si vous avez encore un peu de courage pour moi ;) 
m
0
l
a c 145 L Programmation
28 Septembre 2010 17:35:31

Ok, il est possible que pathinfo() échoue à cause du chemin relatif.

Je vais donc reprendre avec le code "simple", puis après expliquer ce que devait faire l'autre version :) 
  1. $pattern = '![^\/]+\/([^\.]+)\.[a-z]{3}$!i';
  2. preg_replace($pattern, '$1', $toto);
  3. echo str_replace(array('-', '_'), '',$toto);


Le second code que je t'ai donné utilise pathinfo() pour récupérer différentes informations sur le fichier et les mettre dans un tableau.
Et l'un des éléments de ce tableau est 'extension' qui contient l'extension de ce fichier.
m
0
l
Anonyme
28 Septembre 2010 18:52:08

Merci Crazy


j'en sors enfin ;) 


alors j'ai ajouté une étape car sur le dernier code , il continuait de me renvoyer le chemin du repertoire et extensions, mais me retirait bien les "-" et "_"

je suis parti sur :

$pattern = '![^\/]+\/([^\.]+)\.[a-z]{3}$!i';
$value = preg_replace($pattern, '$1', $toto);
echo str_replace(array('-', '_'), ' ',$value) ;

la ca roule (bon reste que je ne saisis pas pourquoi c a passe pas direct comme tu l'avais sugerré) ...


merci mille fois pour m'avoir aidé

m
0
l
a c 145 L Programmation
28 Septembre 2010 20:54:13

Ah oui, bien vu :) 
m
0
l
Anonyme
28 Septembre 2010 21:13:11

bon alors sur le coup...juste pour te remercier et plus généralement "vous" , pour la disponibilité et conseils....

Je sais ou je repasserai si je rencontre un problème de codage ;) 

a++

marie
m
0
l
a c 145 L Programmation
28 Septembre 2010 21:27:08

N'hésite pas
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS