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
หลังจากติดตั้งไลบรารีแล้ว คุณสามารถใช้งานได้ดังนี้:
การติดตั้ง: ไลบรารี
regex
อาจไม่พร้อมใช้งานใน Arduino Library Manager โดยทันที ดังนั้นคุณอาจจำเป็นต้องติดตั้งด้วยตนเอง โดยดาวน์โหลดจากแหล่งที่น่าเชื่อถือและเพิ่มเข้าไปในโฟลเดอร์ไลบรารี Arduino ของคุณตัวอย่างการใช้งาน: สมมติว่าไลบรารีมีฟังก์ชันที่คล้ายคลึงกับการดำเนินการของ regex มาตรฐาน คุณอาจใช้งานมันดังนี้:
#include <regex.h>
void setup() {
Serial.begin(9600);
while (!Serial); // รอจนกว่า Serial จะพร้อม
regex_t reg;
const char* pattern = "[0-9]+"; // ตรงกับลำดับของตัวเลข
regcomp(®, pattern, REG_EXTENDED);
const char* test_str = "Sensor value: 12345";
regmatch_t matches[1];
if (regexec(®, 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(®); // ปล่อยหน่วยความจำที่จัดสรรไว้สำหรับ regex
}
void loop() {
// ใส่โค้ดหลักของคุณที่นี่ เพื่อทำงานซ้ำๆ:
}
หมายเหตุ: ไวยากรณ์และฟังก์ชันเฉพาะที่ใช้ที่นี่คือเพื่อการอธิบายเท่านั้น และอาจแตกต่างตามรายละเอียดการดำเนินการจริงของไลบรารี regex
ที่คุณเลือก ควรอ้างอิงเอกสารของไลบรารีเสมอเพื่อข้อมูลที่แม่นยำและอัปเดต.