Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/03/2008, 18h01   #1
Membre habitué
 
Avatar de tintin72
 
Inscription : septembre 2003
Messages : 598
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 598
Points : 123
Points : 123
Par défaut Supprimer les caractères en fin de chaine ?

Bonjour,

Je n'arrive pas à trouver la regex pour supprimer tous les
caractères se trouvant après le dernier slashe.

par exemple pour:
http://localhost/site/repertoire/fichier.php

obtenir:
http://localhost/site/repertoire/

En fait je voudrais une regex qui cherche à partir de la fin
de la chaine et supprime tous les caractères tant qu'elle
ne trouve pas un slashe ou quelque chose dans le genre.

Quelqu'un pourrait m'aider ?

Merci
tintin72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2008, 19h33   #2
Membre habitué
 
Inscription : juin 2004
Messages : 296
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juin 2004
Messages : 296
Points : 147
Points : 147
Hello,

Si tu utilises strrpos et substr tu vas pouvoir te débrouiller.

A+
__________________
- Blog
- stages-aikido.fr
kaboume est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2008, 09h11   #3
Membre Expert
 
Inscription : août 2002
Messages : 1 036
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 1 036
Points : 1 166
Points : 1 166
Bonjour,

La fonction 'dirname' fait cela :
Code :
1
2
3
<?php  
  echo dirname('http://localhost/site/repertoire/fichier.php');
?>
affiche :
jeca est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2008, 09h21   #4
Membre habitué
 
Avatar de tintin72
 
Inscription : septembre 2003
Messages : 598
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 598
Points : 123
Points : 123
Citation:
La fonction 'dirname' fait cela
Excellent! Je connaissais pas cette fonction.

Sinon juste pour information, avec les regex
je suis arrivé à ça:
Code :
1
2
3
4
5
6
 
$location = "http://localhost/site/repertoire/fichier.php";
 
$part = preg_replace("#.+/(.+)$#", '$1', $location);
 
echo $part;
qui affiche bien la partie de la chaine que je veux supprimer (fichier.php)
mais je voudrais savoir:

- Est ce que cette regex est correcte pour l'usage que je veux en faire ?
- Comment faire pour modifier ce qui se trouve dans la variable $1 ?
tintin72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2008, 15h56   #5
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Citation:
Envoyé par tintin72 Voir le message
- Est ce que cette regex est correcte pour l'usage que je veux en faire ?
Non, mais tu y es presque
Il faudrait plutôt utiliser ceci :
Code :
1
2
<?php
echo preg_replace('~(.+/)(?:[^/]*)~', '$1', 'http://localhost/site/repertoire/fichier.php');
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2008, 16h32   #6
Membre habitué
 
Avatar de tintin72
 
Inscription : septembre 2003
Messages : 598
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 598
Points : 123
Points : 123
Merci beaucoup pour ton aide.
Effectivement ça marche !
Mais pourrais-tu me commenter cette regex
parce que je n'arrive vraiment pas à la comprendre ?
(Je débute avec les expressions régulières, désolé )
tintin72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2008, 15h24   #7
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Est-ce que tu as lu ce tuto ? http://g-rossolini.developpez.com/tu...ns-regulieres/

(.+/) : De 1 à n caractères suivis d'un slash. Mémoriser la sélection pour utilisation ultérieure.
(?:[^/]*) : N'importe quel nombre de caractères autres que le slash. Ne pas mémoriser la sélection.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2008, 08h39   #8
Membre habitué
 
Avatar de tintin72
 
Inscription : septembre 2003
Messages : 598
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 598
Points : 123
Points : 123
Citation:
Est-ce que tu as lu ce tuto ? http://g-rossolini.developpez.com/tu...ns-regulieres/
Non, mais j'en ai lu d'autres.

C'est surtout le ?: qui me déroutais, je ne comprenais pas ce que ça
voulait dire.
Mais les choses commence à s'éclaircir maintenant
tintin72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2008, 12h15   #9
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
De fait, dans ton cas on peut aussi écrire ceci
Code :
1
2
<?php
echo preg_replace('~(.+/)[^/]*~', '$1', 'http://localhost/site/repertoire/fichier.php');
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h21.


 
 
 
 
Partenaires

Hébergement Web