C:
การใช้เรกุลาร์เอ็กเพรสชัน
วิธีการ:
เพื่อใช้นิพจน์ปรกติในภาษา C, คุณจะต้องทำงานกับไลบรารี POSIX regex (<regex.h>
) เป็นหลัก ตัวอย่างนี้แสดงการจับคู่รูปแบบพื้นฐาน:
#include <stdio.h>
#include <stdlib.h>
#include <regex.h>
int main(){
regex_t regex;
int return_value;
char *pattern = "^a[[:alnum:]]"; // รูปแบบเพื่อจับคู่สตริงที่เริ่มต้นด้วย 'a' ตามด้วยอักขระตัวเลขและตัวอักษร
char *test_string = "apple123";
// คอมไพล์นิพจน์ปรกติ
return_value = regcomp(®ex, pattern, REG_EXTENDED);
if (return_value) {
printf("Could not compile regex\n");
exit(1);
}
// ดำเนินการนิพจน์ปรกติ
return_value = regexec(®ex, test_string, 0, NULL, 0);
if (!return_value) {
printf("Match found\n");
} else if (return_value == REG_NOMATCH) {
printf("No match found\n");
} else {
printf("Regex match failed\n");
exit(1);
}
// ปลดปล่อยหน่วยความจำที่จัดสรรโดย regex
regfree(®ex);
return 0;
}
ผลลัพธ์ตัวอย่างสำหรับสตริงที่จับคู่ได้ (“apple123”):
Match found
และสำหรับสตริงที่ไม่จับคู่ได้ (“banana”):
No match found
ดำน้ำลึก:
นิพจน์ปรกติในภาษา C, เป็นส่วนหนึ่งของมาตรฐาน POSIX, นำเสนอวิธีที่เข้มข้นในการดำเนินการจับคู่และจัดการสตริง อย่างไรก็ตาม API ของไลบรารี POSIX regex ในภาษา C ถือว่ามีความยุ่งยากมากกว่าที่พบในภาษาที่ออกแบบมาพร้อมกับคุณสมบัติการจัดการสตริงเป็นอันดับแรก เช่น Python หรือ Perl ไวยากรณ์สำหรับรูปแบบคล้ายกันในทุกภาษา แต่ภาษา C ต้องการการจัดการหน่วยความจำด้วยตนเองและโค้ดเพิ่มเติมเพื่อเตรียมการ, ดำเนินการ, และทำความสะอาดหลังจากใช้รูปแบบ regex
ถึงแม้จะมีความท้าทายเหล่านี้ การเรียนรู้การใช้ regex ในภาษา C นั้นคุ้มค่าเพราะช่วยเพิ่มความเข้าใจเกี่ยวกับแนวคิดการเขียนโปรแกรมระดับต่ำ นอกจากนี้ยังเปิดโอกาสในการเขียนโปรแกรมภาษา C ในด้านการประมวลผลข้อความและการสกัดข้อมูลที่ regex เป็นสิ่งที่ไม่สามารถเลี่ยงได้ สำหรับรูปแบบที่ซับซ้อนกว่าหรือการดำเนินการ regex ที่ซับซ้อน library PCRE (Perl Compatible Regular Expressions) อาจเสนออินเตอร์เฟซที่มีคุณสมบัติครบถ้วนและง่ายขึ้นในบางแง่ แม้ว่าจะต้องการการรวมไลบรารีภายนอกเข้ากับโปรเจ็กต์ภาษา C ของคุณ