Détecter des nombres entre crochets [Regex] - C - Programmation
Marsh Posté le 27-09-2010 à 10:19:26
Il faut que tu échappes les crochets, mais aussi le '.' qui signifie n'importe quel caractère.
Ce code fonctionne chez moi (ai enlevé les espaces dans str_request pour simplifier) :
Code :
|
::edit:: un bon PDF : http://ftp-developpez.com/nicolasj/regex.pdf
@+
Marsh Posté le 27-09-2010 à 14:00:59
Salut garoju et merci pour ta réponse.
Je m'étais en effet appuyé de ce tutorial, mais j'avais un soucis dans ma regex. Lorsque j'exécute le code avec ta regex, il m'affiche :
Code :
|
Je pense que le '5' est en rapport avec la longueur de la chaine de caractère '[1.0]'. Or je veux récupérer ici le '1.0' seulement.
J'ai donc regardé ta regex et déplacer les parenthèses comme ceci :
Code :
|
En espérant récupérer seulement le nombre à l'intérieur. Seulement il m'affiche encore exactement la même chose ...
EDIT:
J'ai copié/collé donc le code du pdf (le dernier), en prenant soin d'y remplacer str_regex et str_request ainsi :
Code :
|
Mais rien y fait ... Je pense pourtant suivre la même démarche ... La regex est fausse ?
Marsh Posté le 29-09-2010 à 14:11:06
salut !
nope, le "5" vient d'une trace que j'ai mise pour vérification de la variable 'size'
Code :
|
Tu affiches seulement 'site' et c'est OK !
Code :
|
::edit:: si tu ne veux pas afficher les crochets, enlève les tout simplement de l'expression régulière
Pour récupérer toutes les occurrences de ton motif dans la chaine de départ, tu rappelles en boucle regexec (condition d'arrêt est "motif non trouvé" ) avec a chaque fois la chaine de depart (str_request) a laquelle tu enlèves ce qui a déjà été trouvé :
Code :
|
retournes chez moi :
1.0
2.1
3.4
Marsh Posté le 29-09-2010 à 15:40:16
Merci pour ta réponse.
L'idée était de détecter des nombres entre crochets, donc si je l'ai enlève de la regex, je vais pouvoir détecter d'autre choses, des nombres entre parenthèses par exemple.
En gros je souhaite extraire une série de nombre ainsi :
[ A, B, C, D ]
Je souhaite juste extraire A, B, C et D, sans les crochets. C'est pourquoi j'avais pensé au regex et aux fameuses parenthèses. Seulement, ici dans mon cas, il me détecte les crochets, ok si je les enlève de la regex ils disparaissent, mais ça laisse le champ ouvert à d'autre motif ...
Autre problème, dans mon cas, je n'avais qu'un nombre entre crochet. Qu'en ai-t'il si j'en ai plusieurs, comme dans mon exemple plus haut ?
Cordialement.
Marsh Posté le 29-09-2010 à 15:43:32
Je viens de lire ton EDIT. Merci pour cet exemple, ça marche pas trop mal! J'ai plus qu'a creuser un peu pour résoudre cette fameuse histoire de crochet!
Merci encore pour ton temps.
Marsh Posté le 29-09-2010 à 15:47:09
de rien !
tu peux utiliser d'abord REG_NOSUB (pas de récupération de valeurs, juste VRAI/FAUX, ca matche ou pas), juste pour valider que ta ligne lue contient bien des nombres entre crochets, ensuite tu passes en REG_EXTENDED, en te moquant éperdument des crochets pour récupérer tes valeurs.
Marsh Posté le 25-09-2010 à 00:01:26
Bonjour à tous
J'ai un programme qui a pour but de lire un fichier ligne par ligne donné en paramètre, et suivant la ligne exécuter telle ou telle commande.
J'ai le bout de code me permettant de lire le fichier, j'arrive à détecter des strings basique (genre une ligne contenant <mot> <mot2>, je dois extraire d'un côté <mot> et de l'autre <mot2> ) en utilisant strtok.
Là où ça se complique pour moi, c'est que le fichier peut contenir des lignes du style:
[ <nombre>, <nombre>, <nombre>]
J'ai mis dans cet exemple 3 motifs <nombre>, seulement il peut y en avoir tantôt 1, tantôt 10, etc.
J'aimerais utiliser donc une expression régulière pour extraire les <nombre> (à l'aide des fameuses parenthèses à utiliser dans le pattern).
J'arrive pour l'instant à cela :
Il détecte bien le pattern, mais ne m'affiche pas le '1.0' qu'il est sensé avoir détecter ...
Any guess ?
Message édité par Ydalb le 25-09-2010 à 00:03:48
---------------
:o