Reguläre Ausdrücke verwenden

Arduino:
Reguläre Ausdrücke verwenden

Wie:

Arduino hat keine eingebaute Unterstützung für regex direkt in seiner Standardbibliothek. Sie können jedoch regex-ähnliche Funktionalitäten für einfache Muster mit grundlegenden Zeichenkettenfunktionen erreichen oder für komplexere Bedürfnisse eine Drittanbieterbibliothek wie regex integrieren.

Grundlegende Zeichenkettenabgleichung ohne Regex

Für grundlegende Bedürfnisse, wie das Finden einer Teilzeichenkette, können Sie die Funktion String.indexOf() verwenden:

String data = "Sensorwert: 12345";
int index = data.indexOf("Wert:");
if (index != -1) {
  String value = data.substring(index + 6).trim();
  Serial.println(value); // Gibt aus: 12345
}

Verwendung einer Drittanbieterbibliothek für Regex

Um komplexere Muster zu behandeln, könnten Sie eine Bibliothek wie regex in Betracht ziehen. Nach der Installation der Bibliothek können Sie sie wie folgt verwenden:

  1. Installation: Die regex-Bibliothek ist möglicherweise nicht direkt im Arduino-Bibliotheksmanager verfügbar, daher müssen Sie sie möglicherweise manuell installieren, indem Sie sie von einer seriösen Quelle herunterladen und zu Ihrem Arduino-Bibliotheksordner hinzufügen.

  2. Beispielverwendung: Angenommen, die Bibliothek bietet Funktionen ähnlich den Standard-regex-Implementierungen, könnten Sie sie wie folgt verwenden:

#include <regex.h>

void setup() {
  Serial.begin(9600);
  while (!Serial); // Warten, bis Serial bereit ist
  
  regex_t reg;
  const char* pattern = "[0-9]+"; // Passt auf eine Folge von Ziffern
  regcomp(&reg, pattern, REG_EXTENDED);
  
  const char* test_str = "Sensorwert: 12345";
  
  regmatch_t matches[1];
  if (regexec(&reg, test_str, 1, matches, 0) == 0) {
    // Extrahieren und ausgeben des passenden Teils
    int start = matches[0].rm_so;
    int end = matches[0].rm_eo;
    char match[end-start+1];
    strncpy(match, test_str + start, end-start);
    match[end-start] = '\0';
    
    Serial.print("Passende Übereinstimmung gefunden: ");
    Serial.println(match); // Gibt aus: 12345
  } else {
    Serial.println("Keine Übereinstimmung gefunden");
  }
  
  regfree(&reg); // Den für regex allokierten Speicher freigeben
}

void loop() {
  // setze hier deinen Hauptcode ein, um ihn wiederholt auszuführen:
}

Hinweis: Die Syntax und spezifischen Funktionen, die hier verwendet werden, dienen nur zu Veranschaulichungszwecken und können je nach den tatsächlichen Implementierungsdetails der regex-Bibliothek, die Sie wählen, variieren. Beziehen Sie sich immer auf die Dokumentation der Bibliothek für genaue und aktuelle Informationen.