Arduino – reguläre Ausdrücke verwenden

In diesem Beitrag möchte ich dir zeigen, wie du mit regulären Ausdrücken Text auf dem Arduino prüfen kannst.

Arduino - reguläre Ausdrücke verwenden
Arduino – reguläre Ausdrücke verwenden

Mit regulären Ausdrücken kannst du Text auf eine bestimmte Syntax oder das Vorhandensein von Daten prüfen. Hierzu zählt zbsp. das Prüfen auf den korrekten Aufbau einer E-Mail, Telefonnummer etc. Man kann aber auch prüfen oder zählen, wie oft eine Zeichenkette in einem Text vorkommt.

Die regulären Ausdrücke sind manchmal sehr kompliziert und lassen sich auch ebenso gerade für Anfänger schwer lesen, hier hilft ein online-Tool wie https://regex101.com/ weiter, welcher dir beim Aufbau und Texten hilft.

Die Arduino IDE liefert per Default keine Funktionalität zum Ausführen von regulären Ausdrücken, hier müssen wir uns einer externen Bibliothek behelfen, welche wir über den Bibliotheksmanager installieren.

Bibliothek Regexp im Bibliotheksverwalter der Arduino IDE
Bibliothek Regexp im Bibliotheksverwalter der Arduino IDE

Der Entwickler hat im einen extra Forumeintrag unter https://forum.arduino.cc/t/new-regular-expression-library-released/59770 verfasst und dort die Funktionalität dieser Bibliothek beschrieben.

Achtung: Dieser Beitrag kann nicht alle RegEx behandeln, dafür gibt es einfach zu viele. Ich möchte mich hier auf einige wenige beschränken.

Aufbau eines regulären Ausdrucks

Ein regulärer Ausdruck muss einem bestimmten Format entsprechen. Wollen wir prüfen, ob ein Text mit einem bestimmten Buchstaben beginnt, so müssen wir das Zeichen ^ voranstellen.

Mit dem $ Zeichen am Ende stellen wir sicher, dass keine weiteren Zeichen mehr folgen sollen.

Um Buchstaben von einer bestimmten Range zu behandeln, schreibt man diese in eckigen Klammern. Somit ergibt sich zbsp. ein regulärer Ausdruck zum Prüfen auf den Namen Stefan.

^Stefan$

regulären Ausdruck (RegEx) am Arduino Nano

Wollen wir zunächst einen einfachen kleinen Text prüfen, ob in diesem Kleinbuchstaben von a bis z enthalten sind.

// Bibliothek für die funktionalität für reguläre Ausdrücke
#include <Regexp.h>

void setup() {
  // beginn der seriellen Kommunikation mit 9600 baud
  Serial.begin(9600);

  // der Text welcher geprüft werden soll
  char* text = "Test";

  // ein Matcher Objekt
  MatchState ms;
  // zuweisen des Zieles welches getestet werden soll
  ms.Target(text);
  
  // prüfen mit einem regulären Ausdruck,
  // es sollen klein Buchstaben von a bis z enthalten sein
  char result = ms.Match("[a-z]", 0);

  // Wenn der Text die Bedingung nicht erfüllt, dann...
  if (result == REGEXP_NOMATCH) {
    Serial.print("nicht ");
  } 
  Serial.println("OK"); 
}

void loop() {
  // bleibt leer
}

Der Code bewirkt, dass auf dem seriellen Monitor der Arduino IDE „OK“ ausgegeben wird.

Ausgabe der Prüfung mit RegEx am Arduino
Ausgabe der Prüfung mit RegEx am Arduino

Wenn man jetzt prüfen möchten, ob der Text gleich „Test“ ist, dann muss man den nachfolgenden regulären Ausdruck verwenden.

^Test$

prüfen eines Datums

Ein Datum gibt wiederum eine Besonderheit, denn dieses enthält einen Punkt, dieser Punkt steht im RegEx für ein beliebiges Zeichen, damit wir diesen Punkt jedoch als diesen behandeln können, muss dieser escaped werden. Den Punkt escaped man mit einem Backslash davor.

Nehmen wir das deutsche Datumsformat wie 01.12.2022, dann ergibt sich nachfolgender regulärer Ausdruck.

[0-9][0-9]\.[0-9][0-9]\.[0-9][0-9][0-9][0-9]

Eigentlich gibt es für die Prüfung auf exakte Anzahl von Buchstaben oder Zahlen die Möglichkeit, mit geschweiften Klammern zu arbeiten, jedoch unterstützt diese Bibliothek es leider nicht.

[0-9]{2}\.[0-9]{2}\.[0-9]{4}

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert