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 :

modification de caractère dans un context donné


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 54
    Par défaut modification de caractère dans un context donné
    Bonjour à tous,

    Merci d'avance pour votre aide.

    J'essaye de construire une regex qui pour des enregistrements du type :

    "1354,12546","4512,5489","1987,1254"

    toucherait pas au virgule entre guillemet mais avec un preg_replace changerait les autres pour un #.

    Merci

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut

    pas besoin de regex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $a = '"1354,12546","4512,5489","1987,1254"';
    $b = str_replace('","', '"#"', $a);

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 54
    Par défaut
    Merci de votre réponses. J'ai pas donnée le bon exemple désolé.

    Voici un type d'enregistrement plus représentatif

    "1354,12546","4512,5489","1987,1254",12542,58749,2013/04/05.

    str_replace dans votre exemple ne remplacera pas les virgule dans cela

    12542,58749,2013/04/05. Elle est la ma difficulté.

    Merci encore

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Ceci devrait faire l'affaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $a = '"1354,12546","4512,5489","1987,1254",12542,58749,2013/04/05';
    $b = preg_replace('/(,)(?=(?:[^"]|"[^"]*")*$)/i', '#', $a);
    echo $b;   //   "1354,12546"#"4512,5489"#"1987,1254"#12542#58749#2013/04/05

  5. #5
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $subject = '"1354,12546","4512,5489","1987,1254",12542,58749,2013/04/05.';
    $pattern = '/"[^"]++"\K,|,/';
    echo preg_replace($pattern, "#", $subject);

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 54
    Par défaut
    Merci à vous deux.

    Les 2 fonctionnent très bien. J'aurais une dernière requête à vous demander.
    Pouvez-vous m'expliquer vos expressions si vous avez 2 minutes. Je pense pas tout saisir.

    Mille merci

  7. #7
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $pattern = '/  # texte entre double-quote suivis par une virgule #
                  "[^"]++" # texte entre double-quote
                  \K       # le modifier K "efface" les correspondances précédantes pour éviter
                           # que le texte entre double-quote ne soit pris en compte lors du remplacement
                  ,        # suivi par une virgule
     
                 |         # ou
     
                   # une virgule quelconque #
                  ,        # une virgule
                           # comme les passages entre double-quote sont traités en premier,
                           # ce sont donc les virgules restantes   
                /x'; // le modifier x, pour mettre des commentaires dans une regex
    à noter que [^"]++ peut être remplacé par [\d,]++ si le texte entre double-quote ne peut être composé que de chiffres et de virgules, ce qui devrait être un peu plus performant car la classe de caractères sera réduite aux seules caractères possibles.

Discussions similaires

  1. [Débutant] Méthode n'est pas valide dans le contexte donné
    Par Blodsvept dans le forum C#
    Réponses: 9
    Dernier message: 23/06/2015, 09h48
  2. Modification de caractères dans une chaine
    Par Cybercope dans le forum VB.NET
    Réponses: 14
    Dernier message: 29/05/2015, 16h26
  3. Modification de caractére dans un txt
    Par oliv27400 dans le forum MATLAB
    Réponses: 15
    Dernier message: 17/06/2010, 11h43
  4. Modification de caractére dans un xls
    Par oliv27400 dans le forum MATLAB
    Réponses: 3
    Dernier message: 11/06/2010, 14h37
  5. recherche d'une chaine de caractère dans une données text
    Par jdeheul dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 17/06/2004, 16h35

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