การใช้เรกุลาร์เอ็กเพรสชัน

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(&regex, pattern, REG_EXTENDED);
    if (return_value) {
        printf("Could not compile regex\n");
        exit(1);
    }

    // ดำเนินการนิพจน์ปรกติ
    return_value = regexec(&regex, 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(&regex);

    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 ของคุณ