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 25/05/2011, 21h08   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 65
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : décembre 2006
Messages : 65
Points : 14
Points : 14
Par défaut Problème de preg_replace pour supprimer une partie d'une chaine

Bonsoir à tous,

J'utilise la version 5.2.17 de PHP

Voilà mon problème, j'ai des chaînes de caractères à traiter qui correspondent à des dates. Ces chaînes sont de type :

du 13/02/2012 au 15/02/2012.2012-01-13T00:00+01002012-01-15T00:00+0100

Avec preg_replace et une expression régulière j'aimerais afficher uniquement ce qu'il y a avant le point, donc ici pour l'exemple :

du 13/02/2012 au 15/02/2012

Mais je n'arrive pas à y parvenir...

Voici la requête que j'ai fait avec la variable '$date' contenant mon string...

Code :
preg_replace('#([\d\w/]*).([.]*)#i',${1},$date);

Le résultat de ça n'affiche absolument rien... et j'arrive plus à avancer :-(

Si un caïd des PRCE peut m'aider pour ça, ça serait vraiment sympa !

Il se peut que la variable $date soit tout de suite de la forme 'du 13/02/2012 au 15/02/2012' mais malheureusement je ne peux pas le savoir à l'avance donc si selon vous preg_replace n'est pas la bonne méthode pour cela, n'hésitez pas à m'en faire part !

Merci à tous
vgross est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 21h16   #2
Membre régulier
 
Avatar de 2h15Crew
 
Homme Valentin
Étudiant
Inscription : mai 2011
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Valentin
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 79
Points : 97
Points : 97
Si tu veux savoir de quel format est la date, suffit de compter les caractère avec strlen. Selon la taille, tu as le format de la date.

Ensuite pour ta regex je verrais plus ça
preg_replace('#.*\.#i',${1},$date);
A essayer, je ne garantis rien, ça fait longtemps que j'ai plus touché à PHP
2h15Crew est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 21h46   #3
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 65
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : décembre 2006
Messages : 65
Points : 14
Points : 14
Merci de ta réponse !

Je ne peut pas compter le nombre de caractère avec strlen car elle peut être aussi sous la forme :

jusqu'au 21/02/2011

J'ai essayé ta regex le problème c'est qu'elle me retourne uniquement ce que je ne veut pas récupérer à savoir :

2012-01-13T00:00+01002012-01-15T00:00+0100 (sans le point devant)

Je ne sais pas comment la modifier pour avoir l'inverse mais je sens qu'on y est presque... une idée ?

Merci de ta réponse rapide en tout cas !
vgross est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 21h53   #4
Membre régulier
 
Avatar de 2h15Crew
 
Homme Valentin
Étudiant
Inscription : mai 2011
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Valentin
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 79
Points : 97
Points : 97
Dans ce cas la, ta regex est de la forme
Code :
1
2
 
preg_replace('#\..*#i',${1},$date);
Si tu as un nombre défini de formats pour ta date, tu peux utiliser strlen, sinon, tu vas devoir trouver un autre moyen...
2h15Crew est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 21h56   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
pas de besoin de regex pour ça, un substr + strpos suffisent
il faut vraiment perdre cette mauvaise habitude de voir des regex partout
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/05/2011, 21h57   #6
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 65
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : décembre 2006
Messages : 65
Points : 14
Points : 14
Impeccable pour la regex, ça fonctionne !

je comprends mieux la syntaxe de preg_remplace maintenant !

Merci pour ta réponse en tout cas ça va beaucoup m'aider pour le reste de mon projet !
vgross est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 21h57   #7
Membre régulier
 
Avatar de 2h15Crew
 
Homme Valentin
Étudiant
Inscription : mai 2011
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Valentin
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 79
Points : 97
Points : 97
Quel est le mal avec les regex ?
2h15Crew est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 22h07   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par 2h15Crew Voir le message
Quel est le mal avec les regex ?
que c'est complétement inutile ici, puisque les fonctions basiques de php font deja le job, faut pas oublier que les regex prennent beaucoup de ressources (par rapport aux fonctionx basiques)


Code :
1
2
$str = 'du 13/02/2012 au 15/02/2012.2012-01-13T00:00+01002012-01-15T00:00+0100';
echo substr($str, 0, strpos($str, '.'));
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 25/05/2011, 22h07   #9
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 65
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : décembre 2006
Messages : 65
Points : 14
Points : 14
En effet ! Après avoir consulté la doc PHP

Code :
substr($date,0,strpos($dates,'.'))
me donne aussi le bon résultat !

Même question que 2h15crew !

En quoi l'utilisation de regex est moins recommandé ?
vgross est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 22h10   #10
Membre régulier
 
Avatar de 2h15Crew
 
Homme Valentin
Étudiant
Inscription : mai 2011
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Valentin
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 79
Points : 97
Points : 97
Ok, my bad =)
2h15Crew est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 22h15   #11
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
simple bench pour un million de tours avec les fonctions basique c'est 25% plus rapide
__________________
http://blog.stealth35.com/
stealth35 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 16h34.


 
 
 
 
Partenaires

Hébergement Web