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 :

Considéré un @ mais non pas 2 @ [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de Emplyst
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Points : 148
    Points
    148
    Par défaut Considéré un @ mais non pas 2 @
    Bonjour,

    J'essais de me construire une expression régulière laquelle me permetterait de récupérer les différentes parties d'un message de protocole à l'aide de petites regexes. Le hic, c'est que dans un cas particulier, les @ sont utilisé comme étant des délimiteurs d'items de listes, sauf que dans un des champs il peut se retrouver normalement des arobas. Donc la stratégie qui a été utilisé par les gens qui ont fait le protocole c'est de doubler les @ lorsqu'ils sont dans les champs textuels.

    Bref, je dois parcourir chaque message d'une ligne délimité par des @ non-suivit par un autre @. Alors voici mon expression régulière et un exemple de message:
    (\d+)?((?<!@)@(?!@))?([^\n^\r]{2})([^((?<!@)@(?!@))^\n^\r]*)

    ((?<!@)@(?!@)) sert à trouver les @ qui ne sont pas précédé ou suivit d'un @, je crois pas que ce soit optimal tout simplement parceque ça ne fonctionne pas avec le message suivant:
    001@XX2313131@YYBLAH BLAH @@BLAH.@VV90@WWWK

    Merci d'avance!

  2. #2
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    Tu dois récupérer quoi ?
    Ca ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    XX2313131@YYBLAH BLAH @@BLAH.@VV90
    -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_SIGNATURE -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
    Dans la mesure du possible, essayez de montrer votre problème en situation réelle en nous donnant une url, que l'on puisse tester.
    Pensez également à cocher

    Aucun problème ne doit être résolu en MP (Message Privé) le forum est là pour ça.

    Dimension Internet

  3. #3
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Emplyst Voir le message
    ((?<!@)@(?!@)) sert à trouver les @ qui ne sont pas précédé ou suivit d'un @, je crois pas que ce soit optimal tout simplement parceque ça ne fonctionne pas avec le message suivant:
    001@XX2313131@YYBLAH BLAH @@BLAH.@VV90@WWWK

    Merci d'avance!
    Qu'est-ce qui ne fonctionne pas ?

    J'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $myPattern = '/(?<!@)@(?!@)/';
    $myString = '001@XX2313131@YYBLAH BLAH @@BLAH.@VV90@WWWK';
    $match = preg_split($myPattern, $myString);
    print_r($match);
    ?>
    Et le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [0] => 001 [1] => XX2313131 [2] => YYBLAH BLAH @@BLAH. [3] => VV90 [4] => WWWK )
    C'est pas ce que tu veux ?
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  4. #4
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    Citation Envoyé par Emplyst Voir le message
    Bonjour,
    Donc la stratégie qui a été utilisé par les gens qui ont fait le protocole c'est de doubler les @ lorsqu'ils sont dans les champs textuels.
    Quelle erreur!
    En fait, si le champ est "a@" (donc a@@) ou "@b" donc (@@b) alors il est impossible de les reconnaître dans cette chaîne, pour le premier exemple avec a@:
    a@@@c
    .. qui est pourtant bien formatée.
    Règle: échapper avec un autre caractère que le délimiteur, et doubler le caractère d'échappement si nécessaire, mais pas le délimiteur!

  5. #5
    Membre habitué Avatar de Emplyst
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Points : 148
    Points
    148
    Par défaut
    Citation Envoyé par goodpz Voir le message
    Quelle erreur!
    En fait, si le champ est "a@" (donc a@@) ou "@b" donc (@@b) alors il est impossible de les reconnaître dans cette chaîne, pour le premier exemple avec a@:
    a@@@c
    .. qui est pourtant bien formatée.
    Règle: échapper avec un autre caractère que le délimiteur, et doubler le caractère d'échappement si nécessaire, mais pas le délimiteur!
    T'inquiète si c'était sous mon pouvoir je n'utiliserais pas des @ comme délimiteurs, j'utiliserait du moins un "non-printable character". Sinon pour ton cas avec "a@@@c", ça ne causera pas problème dans mon cas car il s'agit d'un condition particulière où les @ sont échapés par un autre @.

    Pour revenir à mon expression régulière, je n'avais effectivement pas pensé au split (c'était tout bête ). Néanmoins, j'aurais aimé pouvoir extraire toutes les informations que j'ai besoin d'un seul coups à l'aide d'une regex magique.

    Je vais laisser le problème non-résolu pour le week-end. Question de voir si il n'y a pas un illuminé ou une bouteille de vin qui pourrait m'aider.

    ++

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

Discussions similaires

  1. Un code Jquery qui fonctionne sous une page HTML mais non pas une page XHTML
    Par élève_ingénieur dans le forum Balisage (X)HTML et validation W3C
    Réponses: 11
    Dernier message: 10/07/2011, 00h34
  2. Réponses: 15
    Dernier message: 28/05/2009, 17h21
  3. centrer une fen non pas mère mais autre fen
    Par chapeau_melon dans le forum WinDev
    Réponses: 1
    Dernier message: 06/04/2008, 09h35
  4. execution sur l'emulateur mais non pas sur le Pocket PC
    Par inter_amine dans le forum Windows Mobile
    Réponses: 2
    Dernier message: 08/06/2007, 09h35
  5. [SQL] exporter non pas en CSV mais en .TXT (INSERT INTO.)
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 22/01/2007, 20h33

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