Arduino:
Att använda reguljära uttryck
Hur:
Arduino har inte inbyggt stöd för regex direkt i sitt standardbibliotek. Du kan dock uppnå regex-liknande funktionalitet för enkla mönster genom att använda grundläggande strängfunktioner, eller för mer komplexa behov, integrera ett tredjepartsbibliotek som regex
.
Enkel Strängmatchning utan Regex
För grundläggande behov, som att hitta en delsträng, kan du använda funktionen String.indexOf()
:
String data = "Sensorvärde: 12345";
int index = data.indexOf("värde:");
if (index != -1) {
String värde = data.substring(index + 6).trim();
Serial.println(värde); // Skriver ut: 12345
}
Använda ett tredjepartsbibliotek för Regex
För att hantera mer komplexa mönster kan du överväga ett bibliotek som regex
. Efter att ha installerat biblioteket kan du använda det enligt följande:
Installation:
regex
-biblioteket kanske inte finns tillgängligt i Arduino Library Manager, så du kan behöva installera det manuellt genom att ladda ner det från en pålitlig källa och lägga till det i din Arduino biblioteksmapp.Exempelanvändning: Med antagandet att biblioteket ger funktionalitet liknande standardimplementationer av regex, kan du använda det enligt följande:
#include <regex.h>
void setup() {
Serial.begin(9600);
while (!Serial); // Vänta på att Serial ska vara redo
regex_t reg;
const char* mönster = "[0-9]+"; // Matchar en sekvens av siffror
regcomp(®, mönster, REG_EXTENDED);
const char* test_str = "Sensorvärde: 12345";
regmatch_t matchningar[1];
if (regexec(®, test_str, 1, matchningar, 0) == 0) {
// Extrahera och skriv ut den matchande delen
int start = matchningar[0].rm_so;
int slut = matchningar[0].rm_eo;
char match[slut-start+1];
strncpy(match, test_str + start, slut-start);
match[slut-start] = '\0';
Serial.print("Hittade matchning: ");
Serial.println(match); // Skriver ut: 12345
} else {
Serial.println("Ingen matchning hittades");
}
regfree(®); // Frigör det allokerade minnet för regex
}
void loop() {
// placera din huvudkod här, för att köra upprepat:
}
Notera: Syntaxen och de specifika funktionerna som används här är för illustrativa ändamål och kan variera beroende på de faktiska implementationsdetaljerna för det regex
-bibliotek du väljer. Hänvisa alltid till bibliotekets dokumentation för korrekt och aktuell information.