Bruke regulære uttrykk

Arduino:
Bruke regulære uttrykk

Hvordan:

Arduino har ikke innebygd støtte for regex direkte i sitt standardbibliotek. Imidlertid kan du oppnå regex-lignende funksjonalitet for enkle mønstre ved å bruke grunnleggende strengfunksjoner, eller for mer komplekse behov, integrere et tredjeparts bibliotek som regex.

Grunnleggende Strengsammenligning uten Regex

For grunnleggende behov, som å finne en delstreng, kan du bruke String.indexOf()-funksjonen:

String data = "Sensorverdi: 12345";
int index = data.indexOf("verdi:");
if (index != -1) {
  String verdi = data.substring(index + 6).trim();
  Serial.println(verdi); // Utganger: 12345
}

Bruk av Et Tredjeparts Bibliotek for Regex

For å håndtere mer komplekse mønstre, kan du vurdere et bibliotek som regex. Etter å ha installert biblioteket, kan du bruke det som følger:

  1. Installasjon: regex-biblioteket er kanskje ikke umiddelbart tilgjengelig i Arduino Library Manager, så du kan trenge å manuelt installere det ved å laste det ned fra en pålitelig kilde og legge det til i Arduino-bibliotekene dine.

  2. Eksempel På Bruk: Forutsatt at biblioteket gir funksjonalitet lik standard regex-implementeringer, kan du bruke det som følger:

#include <regex.h>

void setup() {
  Serial.begin(9600);
  while (!Serial); // Vent på at Serial skal være klar
  
  regex_t reg;
  const char* mønster = "[0-9]+"; // Matcher en sekvens av sifre
  regcomp(&reg, mønster, REG_EXTENDED);
  
  const char* test_str = "Sensorverdi: 12345";
  
  regmatch_t matcher[1];
  if (regexec(&reg, test_str, 1, matcher, 0) == 0) {
    // Ekstraher og skriv ut den matchende delen
    int start = matcher[0].rm_so;
    int slutt = matcher[0].rm_eo;
    char match[slutt-start+1];
    strncpy(match, test_str + start, slutt-start);
    match[slutt-start] = '\0';
    
    Serial.print("Fant match: ");
    Serial.println(match); // Utganger: 12345
  } else {
    Serial.println("Ingen match funnet");
  }
  
  regfree(&reg); // Frigjør den allokerte minne for regex
}

void loop() {
  // sett din hovedkode her, for å kjøre gjentatte ganger:
}

Merk: Syntaksen og de spesifikke funksjonene brukt her er til illustrative formål og kan variere basert på de faktiske implementasjonsdetaljene til regex-biblioteket du velger. Referer alltid til bibliotekets dokumentasjon for nøyaktig og oppdatert informasjon.