Використання регулярних виразів

Arduino:
Використання регулярних виразів

Як:

Arduino не має вбудованої підтримки regex безпосередньо у своїй стандартній бібліотеці. Однак, ви можете досягнути regex-подібної функціональності для простих шаблонів, використовуючи базові функції рядків, або для більш складних потреб, інтегрувати сторонню бібліотеку, таку як regex.

Базове співставлення рядків без Regex

Для базових потреб, як-от знаходження підрядка, ви можете використовувати функцію String.indexOf():

String data = "Sensor value: 12345";
int index = data.indexOf("value:");
if (index != -1) {
  String value = data.substring(index + 6).trim();
  Serial.println(value); // Виводить: 12345
}

Використання сторонньої бібліотеки для Regex

Для обробки більш складних шаблонів ви можете розглянути використання бібліотеки, як-от regex. Після встановлення бібліотеки ви можете використовувати її наступним чином:

  1. Встановлення: Бібліотека regex може не бути відразу доступна в Менеджері Бібліотек Arduino, тому вам може знадобитися вручну встановити її, завантаживши з надійного джерела та додавши до папки бібліотек Arduino.

  2. Приклад Використання: Припускаючи, що бібліотека надає функціональність, схожу на стандартні імплементації regex, ви могли б використовувати її наступним чином:

#include <regex.h>

void setup() {
  Serial.begin(9600);
  while (!Serial); // Чекаємо, поки Serial буде готовий
  
  regex_t reg;
  const char* pattern = "[0-9]+"; // Відповідає послідовності цифр
  regcomp(&reg, pattern, REG_EXTENDED);
  
  const char* test_str = "Sensor value: 12345";
  
  regmatch_t matches[1];
  if (regexec(&reg, test_str, 1, matches, 0) == 0) {
    // Витягнути та надрукувати відповідну частину
    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("Знайдено співпадіння: ");
    Serial.println(match); // Виводить: 12345
  } else {
    Serial.println("Співпадінь не знайдено");
  }
  
  regfree(&reg); // Звільнити виділену пам'ять для regex
}

void loop() {
  // помістіть ваш основний код сюди, для постійного виконання:
}

Примітка: Синтаксис та конкретні функції, які використовуються тут, наведені для наочності і можуть відрізнятись в залежності від деталей реалізації бібліотеки regex, яку ви оберете. Завжди звертайтеся до документації бібліотеки за точною та актуальною інформацією.