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 :

[Tableaux] Découper une chaîne de caractères


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Par défaut [Tableaux] Découper une chaîne de caractères
    Bonjour à tous, voilà j'ai une chaine "120c120" que je voudrais exploser dans un tableau qui contiendrait :

    $T[0] = 120
    $T[1] = "c"
    $T[2] = 120
    Est-ce que c'est possible ?

  2. #2
    Membre chevronné 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
    Par défaut
    Tente ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $T = preg_split('/^(\d+)([a-z]+)(\d+)/', $str, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);

  3. #3
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Turquie

    Informations forums :
    Inscription : Avril 2005
    Messages : 614
    Par défaut
    si tu sait par quoi tu va le découper il suffit juste d'utiliser la fonction split() je pense.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Par défaut
    merci bien goodpz ça fonctionne bien...
    Maintenant j'ai un autre souci :
    $t[0] = "103a104"
    $t[1] = "101,102c101,102"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach($t as $v){
          preg_split('/^(\d+)([a-z]+)(\d+)/', $v, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
    }
    la chaîne n'est pas éclatée,comment faire pour gérer les deux cas

  5. #5
    Membre chevronné 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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_split('/^(\d+(?:,\d+)?)([a-z]+)((?1))/', $v, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
    Ca va te sortir, selon ton exemple:

    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Array
    (
        [0] => 103
        [1] => a
        [2] => 104
    )
    
    et
    
    Array
    (
        [0] => 101,102
        [1] => c
        [2] => 101,102
    )

    Est-ce le format que tu souhaites ?

  6. #6
    Membre expérimenté Avatar de daniel61
    Inscrit en
    Décembre 2006
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 139
    Par défaut
    Citation Envoyé par mix_35
    $t[1] = "101,102c101,102"
    l'option PREG_SPLIT_DELIM_CAPTURE de preg_split indique que les captures dans l'expression ne seront pas éléminés et feront partie du résultat. tandis que les parties de l'expression n'étant pas capturés seront éléminés.

    si le résultat attendu est
    101
    ,
    102
    c
    101
    ,
    102

    alors tu peux utiliser la séquence de nombres comme élément du split en capturant ces nombres. les nombres peuvent être représentés par \d dans PCRE, la séquence de 1 ou plusieurs est +, et la capture se fait par les parenthèses (). donc (\d+) veut dire de capturer toutes les séquences de nombres se répétant consécutivement 1 ou plusieurs fois.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    preg_split('/(\d+)/', $v, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
    si le résultat attendu est
    101
    102
    c
    101
    102

    soit en éléminant les virgules, alors tu ajoutes la virgule dans l'expression sans la capturer. le caractère | veut dire OU. donc (\d+)|,+ veut dire que le split se fera sur une séquence de nombres OU sur une séquence de virgules, les nombres sont capturés donc feront partie du résultat grâce à PREG_SPLIT_DELIM_CAPTURE alors que les virgules seront éléminées puisque non capturés... pas entre parenthèses.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    preg_split('/(\d+)|,+/', $v, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
    si le résultat attendu est
    101,102
    c
    101,102

    il est possible de construire sa classe avec []... avec [\d,] la nouvelle classe sera constituée des nombres et de la virgule. donc ([\d,]+) fera la capture des nombres et de la virgule en un bloc tout en étant l'élément du split.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    preg_split('/([\d,]+)/', $v, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
    comme tu vois, il est possible de faire beaucoup de choses avec les bases de PCRE.

Discussions similaires

  1. Réponses: 4
    Dernier message: 25/04/2014, 23h00
  2. Découper une chaîne de caractères
    Par gege2061 dans le forum Langage
    Réponses: 9
    Dernier message: 07/03/2008, 19h59
  3. Réponses: 2
    Dernier message: 07/09/2006, 12h17
  4. [VBA-E] découper une chaîne de caractère
    Par jagwar dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/07/2006, 14h07
  5. Comment découper une chaîne de caractères en VBA
    Par TomPad dans le forum Access
    Réponses: 3
    Dernier message: 23/06/2005, 09h58

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