IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème de preg_replace pour supprimer une partie d'une chaine [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 81
    Points : 56
    Points
    56
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre régulier Avatar de 2h15Crew
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 79
    Points : 106
    Points
    106
    Par défaut
    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

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 81
    Points : 56
    Points
    56
    Par défaut
    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 !

  4. #4
    Membre régulier Avatar de 2h15Crew
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 79
    Points : 106
    Points
    106
    Par défaut
    Dans ce cas la, ta regex est de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    pas de besoin de regex pour ça, un substr + strpos suffisent
    il faut vraiment perdre cette mauvaise habitude de voir des regex partout

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 81
    Points : 56
    Points
    56
    Par défaut
    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 !

  7. #7
    Membre régulier Avatar de 2h15Crew
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 79
    Points : 106
    Points
    106
    Par défaut
    Quel est le mal avec les regex ?

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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, '.'));

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 81
    Points : 56
    Points
    56
    Par défaut
    En effet ! Après avoir consulté la doc PHP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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é ?

  10. #10
    Membre régulier Avatar de 2h15Crew
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 79
    Points : 106
    Points
    106
    Par défaut
    Ok, my bad =)

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    simple bench pour un million de tours avec les fonctions basique c'est 25% plus rapide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/04/2013, 16h57
  2. [XL-2007] problème de codage en vba ("copie d'une partie d'une cellule dans une cellule vide")
    Par skipeemed dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 26/10/2010, 18h01
  3. Sélectionner seulement une partie d'une valeur d'une cellule
    Par ArthurO0O dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/08/2007, 12h05
  4. masquer une partie d'une vidéo par une banniere
    Par lezabour dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 16/10/2006, 17h47
  5. copier une partie d'une image vers une autre
    Par gregcat dans le forum Langage
    Réponses: 1
    Dernier message: 14/04/2006, 14h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo