1

Salut,

J'ai la trame NMEA ""$GPGSV,3,1,12,08,79,134,40,10,66,289,41,27,56,059,31,25,33,053,08*7A"
Je souhaite extraire via les expressions rationnelles "GPGSV", toutes les valeurs entre virgules et le "7A" final.
J'ai comme pattern "^\$([A-Z]{2,})(,([^,*])+)*\*([0-9a-fA-F]{2})" :

-la ligne commence par $ => ^\$
-au moins 2 lettres en majuscules de A à Z => ([A-Z]{2,})
-une série de valeurs entre "," de quantité indéfinie => (,([^,*])+)*
-un "*" => \*
-une valeur hexadécimale => ([0-9a-fA-F]{2})

Après regcomp, ma structure regex_t me dit qu'il y a 4 sous éléments :
Après regexec je retrouve ces éléments qui sont :
-la trame complète
-GPGSV
-,08 (la dernière valeur entre ",")
-*7A

Où sont passées toutes les autres valeurs entre ","?

2

essaye voir en échappant tes points ?
avatar
Il n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

3

Une capture ne capture forcément qu'un élément à la fois, donc si tu captures à l'intérieur d'un *, ben il oublie tous sauf le dernier.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

4

kim (./2) :
essaye voir en échappant tes points ?

Quels point?
Kevin Kofler (./3) :
Une capture ne capture forcément qu'un élément à la fois, donc si tu captures à l'intérieur d'un *, ben il oublie tous sauf le dernier.

Comment faire alors pour avoir le premier puis le deuxième jusqu'au dernier à l'intérieur d'un *?

5

Tu récupères toute la séquence avec ton expression régulière et tu utilises un split pour découper ça en un tableau (avec les virgules comme séparateurs). (Tu travailles en quel langage exactement?)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

6

en C++, mais je ne souhaite pas utiliser de lib diverses et variées genre Boost ou autres ; seulement ce que propose la STL

7

Pourtant QStringList::split est exactement ce qu'il te faut...
Tu peux utiliser une boucle avec std::strtok (dans cstring) pour splitter une chaîne de caractères en utilisant seulement la libc et la libstdc++.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

8

Oui QString permet de splitter facilement et obtenir un QStringList mais comme je te l'ai dit je ne souhaite pas "alourdir" avec des lib en tous genre.
J'ai finalement fait une boucle et ça fonctionne nickel.

9

et en extrayant bêtement la sous-chaine entre GPGLL et le * de la fin?