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 :

Regex pour detecter les virgules non entre guillemets


Sujet :

Langage PHP

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    818
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 818
    Points : 288
    Points
    288
    Par défaut Regex pour detecter les virgules non entre guillemets
    Bonjour,

    J'essaye de faire une regex pour selectionner les virgules qui ne sont pas comprises entre deux guillemets pour pouvoir faire un split sur ma chaine ensuite...

    Par exemple:
    "Jules, Ferry",Jean
    Donnerait:
    "Jules, Ferry"
    Jean
    Une idée parce que je patauge...

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    essaye avec un truc du genre;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $chaine='"Jules, Ferry", jacques ,"Paul, Anka",Jean ';
    $reg='#(?:")\s*,\s*(?!")|(?!")\s*,\s*(?:")#';
    $tabChaine=preg_split($reg,$chaine);
    var_dump($tabChaine);

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    818
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 818
    Points : 288
    Points
    288
    Par défaut
    Je viens de tester ta regex, ca m'a l'air pas mal, mais elle ne permet pas de detecter plusieurs noms sans guillemets à la suite, et j'ai vu que si la chaine commence par un nom entre guillemet, le premier guillemet n'est pas enlevé...

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $chaine='"Jules, Ferry", jacques ,"Paul, Anka",Jean,Bart,Claire';
    $reg='#(?:")\s*,\s*(?!")|(?!")\s*,\s*(?:")#';
    $tabChaine=preg_split($reg,$chaine);
    print_r($tabChaine);
    Renvoi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Array ( [0] => "Jules, Ferry [1] => jacques [2] => Paul, Anka [3] => Jean,Bart,Claire )
    A vrai dire il y a certaines choses que je ne comprend pas dans l'expression régulière...

    Un coup de main pour la modifer ou au moins la comprendre...
    Voilà ce que je comprend:
    (?:") => parenthèse non capturante??
    \s* => 0 ou plusieurs fois espace blanc
    , => virgule!!
    \s* => 0 ou plusieurs fois espace blanc
    (?!") => ?????
    | => Condition ou
    (?!") => ????
    \s* => 0 ou plusieurs fois espace blanc
    , => virgule!!
    \s* => 0 ou plusieurs fois espace blanc
    (?:") => parenthèse non capturante??
    Une idée?

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    ha ... je n'avais pas prévu ce cas de figure ...

    il est plus simple alors de matcher plutot que de tenter de splitter ...::

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $chaine='"Jules, Ferry", jacques, didier ,"Paul, jeannine, Anka",Jean ';
    $reg='#(?P<nom>(("(\s?\w+\s?,?\s?)+")|(\s?\w+\s?)))#';
    preg_match_all($reg,$chaine,$matches);
    var_dump($matches['nom']);

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    818
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 818
    Points : 288
    Points
    288
    Par défaut
    Merci beaucoup!!

    Ca marche au poil!!

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    818
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 818
    Points : 288
    Points
    288
    Par défaut
    Petite question supplémentaire...

    Y a t'il un moyen pour que les mots accentués soit acceptés dans la regex autre que de les ajouter manuellement comme ceci?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $reg='#(?P<nom>(("(\s?[a-zA-Z0-9\(\)\-éèçàäâëêïîüûöô]+\s?,?\s?)+")|(\s?\w+\s?)))#';

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    modifier u ...

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    818
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 818
    Points : 288
    Points
    288
    Par défaut
    Est ce que quelqu'un peut essayer ceci et me dire le résultat ainsi que sa version de php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    $reg='#(?P<nom>(("(\s?[a-zA-Z0-9\(\)\-éèçàäâëêïîìùüûöôÉÈÇÀÄÂËÊÏÎÌÙÜÛÖÔ]+\s?,?\s?)+")|(\s?\w+\s?)))#';
     
    preg_match_all($reg,"héritage",$res_values);
     
    print_r($res_values['nom']);
    Le résultat est sensé être
    héritage
    mais moi je récupère
    Array ( [0] => h [1] => ritage )
    Je soupconne ma version de php (5.2.6) d'être responsable de ce bug...

    En théorie ma regexp est bonne...

    Merci de vos réponses

  9. #9
    Membre régulier Avatar de floanne
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 78
    Points
    78
    Par défaut
    Salut.

    Y'aurait bien un petit problème d'encoding... Teste \p{L} ça code pour toutes les lettres en unicode il me semble...

    ++Florent.

Discussions similaires

  1. Option pour voir les variable non utilisées ?
    Par lex13 dans le forum NetBeans
    Réponses: 13
    Dernier message: 25/08/2007, 12h57
  2. [onKeydown] Probleme avec pour detecter les majuscules des minuscules
    Par magnus2005 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/09/2006, 22h48
  3. [REGEX] Récupérer tous les caractères non US-ASCII
    Par nonhosonno dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 11/08/2006, 10h02
  4. Requete pour tous les jours non férié
    Par etiennegaloup dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/08/2006, 14h25
  5. Requete select pour récupérer les no match entre 2 tables
    Par Celina dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 16/12/2003, 11h59

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