Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

PHP4 - Souci avec une expression reguliere.

2 réponses
Avatar
David
Bonjour,

Je dois effectuer un affichage en clair de données retournées par un serveur
via une requete effectuée par curl. Le serveur en question renvoie des
données à la suite sans retour à la ligne selon le format suivant :

<code de la donnée>,"<valeur>"

Exemple du retour du serveur :
0,"valeur1"498,"valeur2"4021-1,"valeur3"4021-2,"valeur4"99,"valeur4"

Pour cela je fait une expression régulière comme suit :
preg_match_all ('/([0-9]+),"([^"]*)"/' ,$this->result ,$this->result_tmp);

Du coup j'ai un souci avec les champs dont les noms sont comme 4021-1 et
4021-2 qui correspondent à n éléments du code 4021...

Comment formuler mon expression régulière pour prendre cela en compte ?

Merci pour vos réponses !

David

2 réponses

Avatar
Olivier Miakinen

Exemple du retour du serveur :
0,"valeur1"498,"valeur2"4021-1,"valeur3"4021-2,"valeur4"99,"valeur4"

Pour cela je fait une expression régulière comme suit :
preg_match_all ('/([0-9]+),"([^"]*)"/' ,$this->result ,$this->result_tmp);

Du coup j'ai un souci avec les champs dont les noms sont comme 4021-1 et
4021-2 qui correspondent à n éléments du code 4021...


C'est normal. Ton [0-9] accepte les chiffres, mais pas le trait d'union.
Tu peux le remplacer par [0-9-] ou par [-0-9] (explication : le trait
d'union perd le rôle spécial qu'il a dans 0-9 ou a-Z quand il est placé
au début ou à la fin du contenu de [...]). Tu peux aussi le remplacer
par [^,] pour accepter tout caractère sauf la virgule qui est le
délimiteur de champ (la même astuce est employée pour la valeur entre
guillemets).

Donc : '/([^,]+),"([^"]*)"/'

--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.

Avatar
David
Merci beaucoup !
Décidément, je n'arriverais jamais à m'y faire aux expressions régulières...
:-))))