Arduino:
Utilisation des expressions régulières
Comment :
Arduino n’a pas de support intégré pour les regex directement dans sa bibliothèque standard. Cependant, vous pouvez obtenir une fonctionnalité similaire aux regex pour des motifs simples en utilisant des fonctions de chaînes de base, ou, pour des besoins plus complexes, intégrer une bibliothèque tierce telle que regex
.
Correspondance de Chaînes Basique sans Regex
Pour les besoins basiques, comme trouver une sous-chaîne, vous pouvez utiliser la fonction String.indexOf()
:
String data = "Valeur du capteur : 12345";
int index = data.indexOf("valeur :");
if (index != -1) {
String valeur = data.substring(index + 7).trim();
Serial.println(valeur); // Affiche : 12345
}
Utiliser une Bibliothèque Tierce pour Regex
Pour gérer des motifs plus complexes, vous pourriez envisager une bibliothèque comme regex
. Après avoir installé la bibliothèque, vous pouvez l’utiliser comme suit :
Installation : La bibliothèque
regex
pourrait ne pas être directement disponible dans le Gestionnaire de Bibliothèques Arduino, donc vous pourriez avoir besoin de l’installer manuellement en la téléchargeant depuis une source fiable et en l’ajoutant à votre dossier de bibliothèques Arduino.Exemple d’Utilisation : En supposant que la bibliothèque offre des fonctionnalités similaires aux implémentations regex standard, vous pourriez l’utiliser comme suit :
#include <regex.h>
void setup() {
Serial.begin(9600);
while (!Serial); // Attend que Serial soit prêt
regex_t reg;
const char* motif = "[0-9]+"; // Correspond à une séquence de chiffres
regcomp(®, motif, REG_EXTENDED);
const char* test_str = "Valeur du capteur : 12345";
regmatch_t correspondances[1];
if (regexec(®, test_str, 1, correspondances, 0) == 0) {
// Extraire et imprimer la partie correspondante
int debut = correspondances[0].rm_so;
int fin = correspondances[0].rm_eo;
char correspondance[fin-debut+1];
strncpy(correspondance, test_str + debut, fin-debut);
correspondance[fin-debut] = '\0';
Serial.print("Correspondance trouvée : ");
Serial.println(correspondance); // Affiche : 12345
} else {
Serial.println("Aucune correspondance trouvée");
}
regfree(®); // Libère la mémoire allouée pour regex
}
void loop() {
// mettez ici votre code principal, pour s'exécuter de manière répétée :
}
Note : La syntaxe et les fonctions spécifiques utilisées ici sont à des fins illustratives et peuvent varier en fonction des détails de mise en œuvre réels de la bibliothèque regex
que vous choisissez. Reportez-vous toujours à la documentation de la bibliothèque pour obtenir des informations précises et à jour.