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 format [A-Z]*/.*


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Par défaut Regex format [A-Z]*/.*
    Bonjour,

    J'ai une chaine de cette forme: DOF/12021987 DEP/CDG IS 'AWESOME' DEV/LOVE IT

    J'ai besoin d'extraire les infos det el sorte que:
    [0]DOF
    [1]12021987
    [2]DEP
    [3]CDG IS 'AWESOME'
    [4] DEV
    [5] LOVE IT.

    J'ai commencé avec ce regex: ([A-Z]*)\/(.*(?= [A-Z]*\/.*))[ ]*
    Mais ça ne semble pas correct d'après http://www.myregextester.com/index.php

    Merci de votre aide,
    Babas007

  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,

    ce genre de joyeuseté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $str   = "DOF/12021987 DEP/CDG IS 'AWESOME' DEV/LOVE IT";
    $parts = preg_split('~([A-Z]*).([0-9]*).([A-Z]*).(.*(?= [A-Z]*/.*)).([A-Z]*).(.*)~', $str, null, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Par défaut
    Merci mais ça ne passe pas. Alors à savoir que l'expression doit être générique, ça pourrait très bien être: DEP/KJHKJJHJHK789' ? RMK/9879BHJH JKJKJJH DEST/OPIPOI 79879 7899 POI/789ZFZFZFZ

  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
    Ok, quel est le résultat attendu avec cette chaine :
    DEP/KJHKJJHJHK789' ? RMK/9879BHJH JKJKJJH DEST/OPIPOI 79879 7899 POI/789ZFZFZFZ

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Par défaut
    [0]DEP
    [1]KJHKJJHJHK789' ?
    [2]RMK
    [3]9879BHJH JKJKJJH
    [4]DEST
    [5]OPIPOI 79879 7899
    [6]POI
    [7]789ZFZFZFZ

  6. #6
    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
    Tiens essaie avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '~^([A-Z]*).(.*?(?= [A-Z]*/)).([A-Z]*).(.*?(?= [A-Z]*/)).([A-Z]*).(.*?(?= [A-Z]*/)).([A-Z]*).(.*)$~'

  7. #7
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Je trouve les règles de sortir les composants sont un peu obscurs. Ceci est ce que je suggère à faire. Comme la longeur parue dans un pattern de "lookaround" n'est indéterminée, elle produit pour cette raison erreurs, c'est pour ça j'évite ce genre de pattern.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $s="DOF/12021987 DEP/CDG IS 'AWESOME' DEV/LOVE IT";
     
    $pattern="~\b[A-Z]*/~";
     
    $data=preg_split($pattern, $s);
    preg_match_all($pattern,$s,$matches);
     
    $splitters=$matches[0];
     
    for($i=0; $i<count($splitters); $i++) {
        array_splice($data, 2*$i-1, 0, preg_replace('~/~','',$splitters[$i]));
    }
     
    $data=array_filter($data);
    print_r($data);
    Il y a une forte corrélation entre $pattern et le pattern utilisé dans preg_replace() dans la ligne array_splice qui ne donne pas une confort entier. Je pense on peut y améliorer pour mettre cette corrélation moins hasardeuse.

  8. #8
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 153
    Par défaut et une solution toute bête ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $s="DOF/12021987 DEP/CDG IS 'AWESOME' DEV/LOVE IT";
    $array1 = explode('/', $s);
    $n = count($array1);
    $data = array();
    $i = 1;
    foreach ($array1 as $v){
    	if ($i == 1 || $i == $n) $data[] = $v;
    	else {
    		preg_match('|^(.*?) (\w*)$|s', $v, $matches);
    		$data[] = $matches[1];
    		$data[] = $matches[2];
    	}
    	$i++;
    }
    print_r($data);

Discussions similaires

  1. [RegEx] Regex format date
    Par daydream123 dans le forum Langage
    Réponses: 4
    Dernier message: 22/06/2015, 15h03
  2. Regex format matrice
    Par agent24 dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 13/04/2013, 19h06
  3. Format "téléphone" et regex
    Par lordmao dans le forum Développement de jobs
    Réponses: 9
    Dernier message: 24/01/2012, 16h44
  4. [RegExp] regex pour formater ipv6
    Par ____22 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 31/05/2011, 22h16
  5. regex pour format A1A
    Par jeepibmx dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/03/2009, 15h47

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