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 :

Selection Facultative


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Janvier 2003
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2003
    Messages : 339
    Points : 184
    Points
    184
    Par défaut Selection Facultative
    Salut,

    Je débute en Regexp et je cherche à faire ceci.

    J'ai les phrases suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    STEP0010 EXEC PGM=SORT,PARM='SIZE(MAX),DYNALLOC=(SYSDA,15)',COND=(0,NE)
    STEPCTLG EXEC PGM=IEFBR14,COND=(4,LT)
    Dans ces deux phrase, je cherche à extraire :
    • Le premier mot
    • La valeur après PGM
    • La valeur après PARM
    • La Valeur après COND


    Or ici, on voir que PARM est facultatif (tout comme COND pour ceux qui connaissent le JCL Mainframe)

    J'ai écrit ce motif (surement à optimiser) :
    (^[A-Za-z0-9]{8}).*EXEC.*PGM=([A-Za-z0-9]*),.*PARM='([A-Za-z0-9(),=]*)',COND=([A-Za-z0-9(),=]*)
    mais il ne fonctionne que pour le premier. Comment lui indiquer que la partie PARM (ou COND) est "facultative" ?

    J'ai bien pensé à utiliser "|" mais cela ne fonctionne pas ... (ou je l'ai peut être pas utilisé comme il fallait)

    Cordialement
    « Ne me faites pas d'objections.
    Les difficultés en feront assez d'elles-mêmes. »

    sir Winston Churchill

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2013
    Messages : 38
    Points : 53
    Points
    53
    Par défaut
    Hello,

    A mon avis tu vas un peu galérer avec cette expression régulière...
    Si c'est tu as la mains sur la "forme" de tes phrase, je te conseil de normaliser un peu plus ta frase du type : CODE EXEC FONCTION="PARAM", FONCTION="PARAM", FONCTION="PARAM"... Ce sera beaucoup plus facile à faire ta regex et beaucoup plus maintenable...

    Au pire essaie de jouer avec {0,1} qui signifie que le token qui le précède se répète 0 ou 1 fois. Personnellement je n'y suis pas arrivé...

    Bonne chance,

    AlexL

  3. #3
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    essaye cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (^[A-Za-z0-9]{8}).*EXEC.*PGM=([A-Za-z0-9]*)(,PARM='([A-Za-z0-9,()=]*)')?(,COND=\([A-Za-z0-9,]*\))?
    tu peux faire des tests là :
    https://regex101.com/r/eK3hE8/1


    sinon une autre méthode aurait peut-être été de découper suivant les espaces et les virgules

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Janvier 2003
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2003
    Messages : 339
    Points : 184
    Points
    184
    Par défaut
    Merci Mathieu,
    IL me manquait la notion du "?" -> Est-il possible de ne pas l'obtenir en sortie (utilisation des parenthèse) ? Mais ce n'est pas génant.

    @Axel : Merci également, qu'entend tu par normaliser ? Je ne comprend pas le formalisme "CODE EXEC FONCTION="PARAM", FONCTION="PARAM", FONCTION="PARAM"..."
    « Ne me faites pas d'objections.
    Les difficultés en feront assez d'elles-mêmes. »

    sir Winston Churchill

  5. #5
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par Antichoc Voir le message
    Est-il possible de ne pas l'obtenir en sortie (utilisation des parenthèse) ?
    ah oui je viens de retrouver comment on fait, tu peux le voir là :
    https://regex101.com/r/eK3hE8/2

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2013
    Messages : 38
    Points : 53
    Points
    53
    Par défaut
    Hello,

    Ben apparemment ta chaîne ressemble à un truc du genre : CODE EXEC FONCTION=PARAM,FONCTION=PARAM,FONCTION=PARAM (STEPCTLG EXEC PGM=IEFBR14,COND=(4,LT)). Avec par exemple PGM -> FONCTION et PARAM -> IEFBR14

    En normalisant ta chaîne de caractère tu pourras par exemple :
    - faire un explode(' ', 'STEPCTLG EXEC PGM=IEFBR14,COND=(4,LT)') du coups tu récupère un tableau comme ça : ["STEPCTLG", "EXEC" ,"PGM=IEFBR14,COND=(4,LT)"]. http://php.net/manual/fr/function.explode.php
    - Ensuite tu refais un explode sur les ',' de l'index 2 du tableau et tu as un tableau ["PGM=IEFBR14", "COND=(4,LT)"]
    - Et un dernier explode que tu peux coupler à une liste : list($fonction, $param) = explode('=', "PGM=IEFBR14") et du coups ta variable fonction à pour valeur "PGM" et $param = "IEFBR14".

    Je pense que ton code sera beaucoup plus lisible qu'avec une regexe et du coups plus maintenable. Si demain tu as une nouvelle ligne "STEPCTLG EXEC PGM=IEFBR14,COND=(4,LT),TEST=VALEUR,TEST2=VALEUR2" Tu vas être obligé de retravailler ta regex, avec mon code tu n'en auras pas besoin.

    N'hésite pas si tu as des question.

    AlexL

  7. #7
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    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 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Citation Envoyé par _AlexL Voir le message
    Ensuite tu refais un explode sur les ',' de l'index 2 du tableau et tu as un tableau ["PGM=IEFBR14", "COND=(4,LT)"]
    Non, tu obtiens: ["PGM=IEFBR14", "COND=(4", "LT)"] c'est pourquoi tu ne peux pas utiliser explode, car les valeurs elles-même peuvent contenir des virgules.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

Discussions similaires

  1. SELECT avec REPLACE et REGEXP
    Par bronon dans le forum Requêtes
    Réponses: 7
    Dernier message: 08/09/2014, 12h32
  2. [RegEx] Regexp > Récupérer la nième <option> d'un <select id="x">
    Par Sylvain Leray dans le forum Langage
    Réponses: 11
    Dernier message: 18/04/2012, 18h16
  3. Regexp Selection Perl
    Par Space23 dans le forum Langage
    Réponses: 6
    Dernier message: 24/08/2011, 20h12
  4. Select avec REGEXP
    Par remrem59 dans le forum Requêtes
    Réponses: 8
    Dernier message: 10/03/2010, 22h45
  5. JQuery : Selection selon une regexp sur id d'element
    Par popovitch130 dans le forum jQuery
    Réponses: 3
    Dernier message: 22/10/2008, 17h46

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