0Pricing
C++ Academy · درس

البحث والاستبدال

حوّل النص باستخدام regex

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

regex_replace

تعيد std::regex_replace سلسلةً جديدة تُستبدل فيها كل مطابقة لنمط بسلسلة استبدال.

  • تبقى السلسلة الأصلية دون تغيير.
  • يُستبدل كل ما يطابق النمط افتراضيًا.
#include <iostream>
#include <regex>

int main() {
    std::regex p("cat");
    std::string s = "the cat and the cat";
    std::cout << std::regex_replace(s, p, "dog") << '\n';
    return 0;
}

استبدال الأرقام

تسهّل الأنماط إجراء تعديلات جماعية، مثل إخفاء كل رقم في سلسلة باستخدام عنصر نائب.

#include <iostream>
#include <regex>

int main() {
    std::regex p("\\d");
    std::string s = "PIN 1234";
    std::cout << std::regex_replace(s, p, "*") << '\n';
    return 0;
}

المراجع الخلفية في الاستبدال

استخدم $1 و$2 و... في سلسلة الاستبدال لإدراج مجموعات الالتقاط، مما يتيح لك إعادة ترتيب النص.

#include <iostream>
#include <regex>

int main() {
    std::regex p("(\\w+) (\\w+)");
    std::string s = "John Smith";
    std::cout << std::regex_replace(s, p, "$2 $1") << '\n';
    return 0;
}

المطابقة بأكملها: $&

يشير الرمز $& إلى المطابقة بأكملها، وهو مفيد لإحاطة النص الذي عُثر عليه بمحارف إضافية.

#include <iostream>
#include <regex>

int main() {
    std::regex p("\\d+");
    std::string s = "item 42";
    std::cout << std::regex_replace(s, p, "[$&]") << '\n';
    return 0;
}

استبدال المطابقة الأولى فقط

مرّر std::regex_constants::format_first_only لاستبدال المطابقة الأولى فقط بدلًا من كل التكرارات.

#include <iostream>
#include <regex>

int main() {
    std::regex p("o");
    std::string s = "foo boo";
    auto out = std::regex_replace(s, p, "0", std::regex_constants::format_first_only);
    std::cout << out << '\n';
    return 0;
}

توحيد المسافات البيضاء

تتمثل إحدى مهام التنظيف الشائعة في دمج سلاسل المسافات البيضاء في مسافة واحدة.

#include <iostream>
#include <regex>

int main() {
    std::regex p("\\s+");
    std::string s = "too    many     spaces";
    std::cout << std::regex_replace(s, p, " ") << '\n';
    return 0;
}

إزالة المطابقات

يؤدي الاستبدال بسلسلة فارغة إلى حذف كل المطابقات فعليًا، وهو مفيد لإزالة المحارف غير المرغوب فيها.

#include <iostream>
#include <regex>

int main() {
    std::regex p("[^a-zA-Z]");
    std::string s = "a1b2c3";
    std::cout << std::regex_replace(s, p, "") << '\n';
    return 0;
}

إعادة تنسيق التواريخ

التقط أجزاء التاريخ وأعد ترتيبها في الاستبدال لتغيير تنسيقه.

#include <iostream>
#include <regex>

int main() {
    std::regex p("(\\d{4})-(\\d{2})-(\\d{2})");
    std::string s = "2026-05-30";
    std::cout << std::regex_replace(s, p, "$3/$2/$1") << '\n';
    return 0;
}

الإبقاء على النص غير المطابق

يُنسخ النص غير المطابق كما هو افتراضيًا. استخدم format_no_copy لإخراج الاستبدالات فقط وحذف بقية النص.

#include <iostream>
#include <regex>

int main() {
    std::regex p("\\d+");
    std::string s = "a1b2c3";
    auto out = std::regex_replace(s, p, "$&", std::regex_constants::format_no_copy);
    std::cout << out << '\n';
    return 0;
}

حجب الكلمات

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

#include <iostream>
#include <regex>

int main() {
    std::regex p("bad|evil");
    std::string s = "a bad and evil idea";
    std::cout << std::regex_replace(s, p, "***") << '\n';
    return 0;
}

إنشاء النتيجة تدريجيًا

بما أن regex_replace تعيد سلسلة، يمكنك تسلسل التحويلات بتمرير إحدى النتائج إلى الاستدعاء التالي.

#include <iostream>
#include <regex>

int main() {
    std::string s = "  Hello,   World  ";
    s = std::regex_replace(s, std::regex("\\s+"), " ");
    s = std::regex_replace(s, std::regex("^ | $"), "");
    std::cout << "[" << s << "]\n";
    return 0;
}

تحقق سريع

اختبر مدى فهمك لصيغة الاستبدال.

مراجعة

تعلّمت تحويل النص باستخدام regex_replace:

  • تستبدل كل المطابقات افتراضيًا وتعيد سلسلة جديدة
  • تُدرج $1 و$2 و$& مجموعات الالتقاط والمطابقة بأكملها
  • علامات مثل format_first_only وformat_no_copy
  • تسلسل الاستدعاءات لإنشاء عمليات تنظيف معقدة

بعد ذلك، ستتعلّم كيفية استخدام regex بكفاءة وتجنب مشكلات الأداء الشائعة.

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

هل درس «البحث والاستبدال» مجاني؟

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

ماذا ستتعلم في «البحث والاستبدال»؟

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

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

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

كم من الوقت يستغرق درس «البحث والاستبدال»؟

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

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

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

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

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