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 :

récurrence d’expression régulière [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 4
    Par défaut récurrence d’expression régulière
    Bonjour,
    Je pense qu'il est possible de chercher une récurrence avec les regex.
    Ceci dis après une journé de recherche je ne l'ai pas trouvé.
    J'ai une expression régulière comme ceci qui viens capturer un point et ses informations associé.
    Expression régulière:
        QRegExp mailExp (".*P([[][\\d]+[]]|[[][\\d]+[:][\"].*[\"][]])[{][\r][\n][\\s][\\s][\\s](GP[\\d]?)[:][\r][\n][\t]UF[\\s][:][\\s]([\\d]+)[,][\\s]UT[\\s][:][\\s]([\\d]+)[,]"
                         "[\t][\t](CONFIG[\\s][:][\\s]['].[\\s].[\\s].[,][\\s][-\\d]+[,][\\s][-\\d]+[,][\\s][-\\d]+[\'][,])[\r][\n][\t]"
                         "X[\\s][=][\\s]+([-\\d]+[.][\\d]+)[\\s]+mm[,][\t]Y[\\s][=][\\s]+([-\\d]+[.][\\d]+)[\\s]+mm[,][\t]Z[\\s][=][\\s]+([-\\d]+[.][\\d]+)[\\s]+mm[,][\r][\n][\t]"
                         "W[\\s][=][\\s]+([-\\d]+[.][\\d]+)[\\s]+deg[,][\t]P[\\s][=][\\s]+([-\\d]+[.][\\d]+)[\\s]+deg[,][\t]R[\\s][=][\\s]+([-\\d]+[.][\\d]+)[\\s]+deg[,][\r][\n][\t]"
                         ".*");

    texte:
    P[1]{
       GP1:
    	UF : 2, UT : 1,		CONFIG : 'F U T, 0, 0, 0',
    	X =  -204.414  mm,	Y =   221.621  mm,	Z =   355.788  mm,
    	W =  -159.995 deg,	P =   -11.613 deg,	R =   -88.376 deg,
    	E1=     0.000 deg
    };
    P[2]{
       GP1:
    	UF : 2, UT : 1,		CONFIG : 'F U T, 0, 0, 0',
    	X =  -192.368  mm,	Y =   -37.337  mm,	Z =   309.984  mm,
    	W =  -159.995 deg,	P =   -11.613 deg,	R =   -88.376 deg,
    	E1=   100.000 deg
    };

    Je match bien mon premier point, j'arrive a sortir les infos avec mailExp.cap(i), mais je capture seulement le premier point.
    Si je viens encadré mon expression avec []+ il me dis que mon expression est fausse.

    Si vous avez une idée je suis preneur.

  2. #2
    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
    Quel version de Qt utilises-tu et avec quel langage?
    Qu'est ce que tu entends par chercher une récurrence? Chercher plusieurs occurrences d'une même pattern?
    Avec quelle méthode utilises-tu ta pattern? Et avec quelles éventuelles options?
    Pourquoi avoir commencé et fini ta pattern avec .*? C'est peut-être ça le problème.

    À noter aussi, la plupart de tes classes de caractères sont inutiles, par exemple le égal = ou la virgule , n'ont pas besoin ni d'être échappé par un antislash ni d'être placé entre crochets.
    Quand tu postes du code sur le forum, place le entre balises code.

  3. #3
    Membre chevronné Avatar de Freudd
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 165
    Par défaut
    Bonjour,

    alors tout d'abord WHOUAAAAAAAAAA, je n'avais jamais vu d'expression régulière aussi.... grande pour ne pas dire autre autrement x)
    J'ai essayé ta regex sans pouvoir la faire fonctionner, peux-tu détailler un peu ce que tu veux faire ?

    ça là c'est une seule et unique expression régulière ?
    QRegExp mailExp (".*P([[][\\d]+[]]|[[][\\d]+[:][\"].*[\"][]])[{][\r][\n][\\s][\\s][\\s](GP[\\d]?)[:][\r][\n][\t]UF[\\s][:][\\s]([\\d]+)[,][\\s]UT[\\s][:][\\s]([\\d]+)[,]"
    "[\t][\t](CONFIG[\\s][:][\\s]['].[\\s].[\\s].[,][\\s][-\\d]+[,][\\s][-\\d]+[,][\\s][-\\d]+[\'][,])[\r][\n][\t]"
    "X[\\s][=][\\s]+([-\\d]+[.][\\d]+)[\\s]+mm[,][\t]Y[\\s][=][\\s]+([-\\d]+[.][\\d]+)[\\s]+mm[,][\t]Z[\\s][=][\\s]+([-\\d]+[.][\\d]+)[\\s]+mm[,][\r][\n][\t]"
    "W[\\s][=][\\s]+([-\\d]+[.][\\d]+)[\\s]+deg[,][\t]P[\\s][=][\\s]+([-\\d]+[.][\\d]+)[\\s]+deg[,][\t]R[\\s][=][\\s]+([-\\d]+[.][\\d]+)[\\s]+deg[,][\r][\n][\t]"
    ".*");
    ou 3 expressions régulières ?
    • ".*P([[][\\d]+[]]|[[][\\d]+[:][\"].*[\"][]])[{][\r][\n][\\s][\\s][\\s](GP[\\d]?)[:][\r][\n][\t]UF[\\s][:][\\s]([\\d]+)[,][\\s]UT[\\s][:][\\s]([\\d]+)[,]"
    • "[\t][\t](CONFIG[\\s][:][\\s]['].[\\s].[\\s].[,][\\s][-\\d]+[,][\\s][-\\d]+[,][\\s][-\\d]+[\'][,])[\r][\n][\t]"
    • "X[\\s][=][\\s]+([-\\d]+[.][\\d]+)[\\s]+mm[,][\t]Y[\\s][=][\\s]+([-\\d]+[.][\\d]+)[\\s]+mm[,][\t]Z[\\s][=][\\s]+([-\\d]+[.][\\d]+)[\\s]+mm[,][\r][\n][\t]"
    • "W[\\s][=][\\s]+([-\\d]+[.][\\d]+)[\\s]+deg[,][\t]P[\\s][=][\\s]+([-\\d]+[.][\\d]+)[\\s]+deg[,][\t]R[\\s][=][\\s]+([-\\d]+[.][\\d]+)[\\s]+deg[,][\r][\n][\t]"
    • ".*"


    Et dans le texte fournit tu peux nous dire ce que tu souhaite récupérer comme données ?

  4. #4
    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
    Non c'est bien une seule pattern, mais en Qt tu peux scinder une chaîne en plusieurs séquences entre quotes consécutives.

  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
    Est-ce que tu utilises bien une boucle while pour obtenir toutes les correspondances, en avançant la position de départ au fur et à mesure comme stipuler dans le manuel:
    Code Qt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    QRegExp rx("(\\d+)");
    QString str = "Offsets: 12 14 99 231 7";
    QStringList list;
    int pos = 0;
     
    while ((pos = rx.indexIn(str, pos)) != -1) {
        list << rx.cap(1);
        pos += rx.matchedLength();
    }
    // list: ["12", "14", "99", "231", "7"]

  6. #6
    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
    En un peu plus light, ta pattern donnerait ça:
    Code Qt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    QRegExp rx("\\bP\\[(\\d+(?::\"[^\"]*\")?)\\]\\{\\s*"
               "(GP\\d*):\\s*"
               "UF\\s*:\\s*(\\d+),\\s*UT\\s*:\\s*(\\d+),\\s*CONFIG\\s*:\\s*'([^']*)',\\s*"
               "X\\s*=\\s*([\\d.-]+)\\s*mm,\\s*Y\\s*=\\s*([\\d.-]+)\\s*mm,\\s*Z\\s*=\\s*([\\d.-]+)\\s*mm,\\s*"
               "W\\s*=\\s*([\\d.-]+)\\s*deg,\\s*P\\s*=\\s*([\\d.-]+)\\s*deg,\\s*R\\s*=\\s*([\\d.-]+)\\s*deg,\\s*"
               "E1\\s*=\\s*([\\d.-]+)\\s*deg\\s*"
               "\\};");

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 4
    Par défaut
    Merci de vos réponse j'analyse ça et je fait de trois tests, je reviens vers vous d'ici 1 ou 2 heures afin de vous dire.
    Mais oui c'est une seule expression régulière.
    J'ai mis des .* à la fin car je l'expression que je recherche est perdu dans le texte à un endroit qui varie, en fait le texte que je dois analyser est du code robot en TPE.
    Pour les "," que j'échappé je ne savais pas, cela ne fait que 3 jours que je connais l’existante du regex et je ne suis pas développeur a temps plein de coup, certain problème qui paraissent compliqués pour moi peux paraître simple ^^.
    Je suis en qt 5.11.2 en C++.

    En tous cas merci de vos réponse.
    Je reviens vers vous au plus vite.

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

Discussions similaires

  1. [RegEx] Récurrence unique sur expression régulière
    Par salent9 dans le forum Langage
    Réponses: 3
    Dernier message: 19/06/2014, 11h13
  2. x² et puissance de x par récurrence
    Par olivieram dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 15/12/2002, 23h59
  3. Expressions réguliéres
    Par Tooms dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2002, 18h42
  4. Evaluation d’expression
    Par mobisky dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 09/09/2002, 11h56
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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