0Pricing
C++ Academy · درس

أساسيات regex

طابق الأنماط في النصوص

أساسيات regex درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.

ما المقصود بـ <regex>؟

يتيح لك الترويس <regex> مطابقة النصوص باستخدام أنماط التعبيرات النمطية التي تصف مجموعات من السلاسل النصية. تنشئ نمطًا، ثم تختبر النص أو تبحث فيه باستخدامه.

  • يحتوي std::regex على نمط مُصرَّف.
  • تُبلغ دوال المطابقة عمّا إذا كان النص يطابق النمط.
#include <iostream>
#include <regex>

int main() {
    std::regex pattern("hello");
    std::cout << std::boolalpha << std::regex_match("hello", pattern) << '\n';
    return 0;
}

regex_match مقابل regex_search

تتطلب regex_match مطابقة السلسلة بأكملها. بينما تنجح regex_search إذا ظهر النمط في أي موضع من السلسلة.

#include <iostream>
#include <regex>

int main() {
    std::regex p("cat");
    std::string s = "the cat sat";
    std::cout << std::boolalpha;
    std::cout << "match: " << std::regex_match(s, p) << '\n';
    std::cout << "search: " << std::regex_search(s, p) << '\n';
    return 0;
}

فئات المحارف

تعرّف الأقواس المربعة مجموعةً من المحارف المسموح بها. يطابق [aeiou] أي حرف علّة مفرد، كما تطابق النطاقات مثل [a-z] الأحرف اللاتينية الصغيرة.

#include <iostream>
#include <regex>

int main() {
    std::regex p("[a-z]+");
    std::cout << std::boolalpha << std::regex_match("hello", p) << '\n';
    std::cout << std::regex_match("Hello", p) << '\n';
    return 0;
}

محددات التكرار

تتحكم محددات التكرار في عدد مرات التكرار: * صفر مرة أو أكثر، و+ مرة واحدة أو أكثر، و? اختياري، و{n,m} نطاقًا عدديًا.

#include <iostream>
#include <regex>

int main() {
    std::regex p("a+b");
    std::cout << std::boolalpha;
    std::cout << std::regex_match("aaab", p) << '\n';
    std::cout << std::regex_match("b", p) << '\n';
    return 0;
}

الفئات المحددة مسبقًا

تقلل الفئات المختصرة من الكتابة: يطابق \\d رقمًا، ويطابق \\w محرفًا من محارف الكلمات، ويطابق \\s محرفًا فارغًا. وفي مصدر C++ يجب مضاعفة الشرطة المائلة العكسية.

#include <iostream>
#include <regex>

int main() {
    std::regex p("\\d+");
    std::cout << std::boolalpha;
    std::cout << std::regex_match("12345", p) << '\n';
    std::cout << std::regex_match("12a45", p) << '\n';
    return 0;
}

المثبتات

تثبت المثبتات المطابقة في موضع معين: يحدد ^ بداية النص، ويحدد $ نهايته. وهي تطابق المواضع لا المحارف.

#include <iostream>
#include <regex>

int main() {
    std::regex p("^abc$");
    std::cout << std::boolalpha;
    std::cout << std::regex_search("abc", p) << '\n';
    std::cout << std::regex_search("xabc", p) << '\n';
    return 0;
}

التناوب

تعني العلامة | «أو». يطابق النمط cat|dog أيًا من الكلمتين. استخدم الأقواس لتقييد نطاقه.

#include <iostream>
#include <regex>

int main() {
    std::regex p("cat|dog");
    std::cout << std::boolalpha;
    std::cout << std::regex_match("cat", p) << '\n';
    std::cout << std::regex_match("dog", p) << '\n';
    std::cout << std::regex_match("fish", p) << '\n';
    return 0;
}

تهريب المحارف الخاصة

تملك محارف مثل . و* و( معاني خاصة. استخدم الشرطة المائلة العكسية لتهريبها ومطابقتها حرفيًا.

#include <iostream>
#include <regex>

int main() {
    std::regex p("3\\.14");
    std::cout << std::boolalpha;
    std::cout << std::regex_match("3.14", p) << '\n';
    std::cout << std::regex_match("3x14", p) << '\n';
    return 0;
}

المطابقة غير الحساسة لحالة الأحرف

مرّر علامة مثل std::regex::icase عند إنشاء النمط لتجاهل حالة الأحرف أثناء المطابقة.

#include <iostream>
#include <regex>

int main() {
    std::regex p("hello", std::regex::icase);
    std::cout << std::boolalpha;
    std::cout << std::regex_match("HELLO", p) << '\n';
    std::cout << std::regex_match("Hello", p) << '\n';
    return 0;
}

تحقق بسيط

تُعد الأنماط مناسبة جدًا للتحقق من تنسيقات الإدخال، مثل التأكد من أن السلسلة تبدو كرقم أساسي ذي إشارة اختيارية.

#include <iostream>
#include <regex>

bool isNumber(const std::string& s) {
    static const std::regex p("-?\\d+");
    return std::regex_match(s, p);
}

int main() {
    std::cout << std::boolalpha;
    std::cout << isNumber("-42") << '\n';
    std::cout << isNumber("4a2") << '\n';
    return 0;
}

المطابقة عدة مرات

اجمع بين الفئات ومحددات التكرار للتحقق من تنسيقات أكثر تعقيدًا، مثل سلسلة من الأحرف تتبعها أرقام.

#include <iostream>
#include <regex>

int main() {
    std::regex p("[A-Za-z]+\\d+");
    std::cout << std::boolalpha;
    std::cout << std::regex_match("abc123", p) << '\n';
    std::cout << std::regex_match("123abc", p) << '\n';
    return 0;
}

تحقق سريع

اختبر مدى فهمك للفرق بين المطابقة والبحث.

مراجعة

تعلّمت أساسيات <regex>:

  • استخدام regex_match لمطابقة السلسلة بأكملها، وregex_search لمطابقة جزء من السلسلة
  • فئات المحارف ومحددات التكرار والمثبتات والتناوب
  • الفئات المحددة مسبقًا مثل \\d وتهريب المحارف الخاصة
  • علامات مثل icase

بعد ذلك، ستستخرج أجزاءً محددة من المطابقة باستخدام مجموعات الالتقاط.

الأسئلة الشائعة

هل درس «أساسيات regex» مجاني؟

نعم — نص درس «أساسيات regex» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.

ماذا ستتعلم في «أساسيات regex»؟

طابق الأنماط في النصوص تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟

لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «أساسيات regex»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟

نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أساسيات regex
  2. المجموعات الملتقطة
  3. البحث والاستبدال
  4. ملاحظات حول الأداء
← العودة إلى C++ Academy