שימוש בביטויים רגולריים

Arduino:
שימוש בביטויים רגולריים

איך לעשות:

ב-Arduino אין תמיכה מובנית לביטויים רגולריים ישירות בספריית התקנית שלו. עם זאת, ניתן להשיג פונקציונליות דומה ל-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); // המתן עד שהסריאל יהיה מוכן
  
  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 שתבחר. בכל מקרה, מומלץ תמיד לעיין בתיעוד של הספרייה למידע מדויק ומעודכן.