extraire une sous chaine d'une chaine

WRInaute impliqué
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
 
WRInaute accro
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 :)
 
WRInaute impliqué
jcaron a dit:
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 :)

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
 
WRInaute impliqué
jcaron a dit:
Ben celles que je donnais :)

Jacques.

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
 
WRInaute accro
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.
 
WRInaute passionné
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
 
Discussions similaires
Haut