extraire une sous chaine d'une chaine

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par dudo, 7 Avril 2010.

  1. dudo
    dudo WRInaute impliqué
    Inscrit:
    10 Janvier 2004
    Messages:
    640
    J'aime reçus:
    0
    Bonjour,

    airportCode: NRT; city: Tokyo; country: JP; currency: EUR;

    Quelqu'un autait'il une idée pour extraire 2 informations d'une chaine.
    le nom d'une ville et d'un pays, j'ai pensé fair un explode a partir du ;
    Mais ces noms peuvent se situer en début comme en fin de chaine.
    En revanche les caractéristiques sont toujours les mêmes, donc le nom de la ville
    est toujours compris entre (city:) Tokyo et (;) de même pour le pays, évidemment
    ces noms changent en permanence.
    city: Tokyo;
    country: JP;
    enfin tout ceci est noyé au milieu d'autres infos, vu plus haut:

    airportCode: NRT; city: Tokyo; country: JP; currency: EUR;


    merci
    ludo
     
  2. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 821
    J'aime reçus:
    0
    Avec des regex comme '/city: ([^;]+);/' et '/country: ([A-Z]{2});/'

    Sinon tu peux faire explode sur ; puis pour chaque explode sur : et soit mettre tout dans un tableau associatif (si tu as besoin de tout) soit juste prendre ce qui t'intéresse.

    Il doit y avoir un paquet d'autres méthodes.

    Jacques.

    PS: on va supposer que ton fichier ne dit pas qu'on utilise l'euro au Japon :)
     
  3. dudo
    dudo WRInaute impliqué
    Inscrit:
    10 Janvier 2004
    Messages:
    640
    J'aime reçus:
    0
    Bonjour,

    merci jcaron pour tes soluces, pour l'euro c'etait pour l'exemple, je n'utilise jamais
    les regex et donc je ne manipule pas du tout les expressions regulieres,
    mais peux tu me dire dans ce cas précis quel type d'expression
    il faut utiliser que je regarde ça, car cela me parait le plus simple ici.

    merci

    ludo
     
  4. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 821
    J'aime reçus:
    0
    Ben celles que je donnais :)

    Jacques.
     
  5. dudo
    dudo WRInaute impliqué
    Inscrit:
    10 Janvier 2004
    Messages:
    640
    J'aime reçus:
    0
    Comme je disais, je n'utilise jamais, donc je fais quoi
    avec
    '/city: ([^;]+);/'
    et '/country: ([A-Z]{2});/'

    Je capture, je remplace, je recherche ?
    preg_replace, il ya des dizaines d'expressions

    quelque chose dans ce genre ?
    $isolenom=eregi('/city: ([^;]+);/',$variable,$regs);

    ludo merci
     
  6. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 821
    J'aime reçus:
    0
    Il faut que tu utilises preg_match ou preg_match_all suivant les cas. Ca doit le faire aussi avec eregi, mais je te conseille de prendre l'habitude d'utiliser les preg_*, c'est nettement mieux.

    Jacques.
     
  7. medium69
    medium69 WRInaute passionné
    Inscrit:
    7 Mai 2005
    Messages:
    2 481
    J'aime reçus:
    0
    Avec Preg_match :

    Code:
    $value = 'airportCode: NRT; city: Tokyo; country: JP; currency: EUR;';
    
    preg_match('#city: (.*); country: (.*);#U', $value, $result);
    
    //$result[1] est la ville et $result[2] est le pays
    
     
  8. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    22 709
    J'aime reçus:
    0
    surtout que eregi est deprecated pour php > 5.3