C++:
שימוש בביטויים רגולריים
איך לעשות:
C++11 הוסיף תמיכה בביטויים רגולריים בספריית התקן, <regex>
, המציעה מסגרת עמידה לחיפושים ומניפולציות על מחרוזות. הנה דוגמה בסיסית לשימוש בביטויים רגולריים לחיפוש תבנית בתוך מחרוזת:
#include <iostream>
#include <regex>
int main() {
std::string target = "Hello, my email is [email protected]";
std::regex email_pattern(R"(\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b)");
if (std::regex_search(target, email_pattern)) {
std::cout << "Email found!" << std::endl;
} else {
std::cout << "No email found." << std::endl;
}
return 0;
}
דוגמת פלט
Email found!
למניפולציות מורכבות יותר, כמו החלפת תבניות בתוך מחרוזות, ביטויים רגולריים של C++ יכולים להיות מאוד שימושיים:
#include <iostream>
#include <regex>
int main() {
std::string text = "The rain in Spain falls mainly in the plain.";
std::regex vowel_regex("([aeiou])");
std::string replaced_text = std::regex_replace(text, vowel_regex, "*");
std::cout << replaced_text << std::endl;
return 0;
}
דוגמת פלט
Th* r**n *n Sp**n f*lls m**nly *n th* pl**n.
למתכנתים המחפשים אופציות מחוץ לספריית התקן, ספריית ה-Boost Regex (boost/regex.hpp
) היא אפשרות פופולרית מבין צד שלישי המציעה יכולות ביטוי רגולרי מתקדמות ואופטימיזציות ביצועים, במיוחד לתבניות מורכבות או עיבוד נתונים רחב היקף:
#include <iostream>
#include <boost/regex.hpp>
int main() {
std::string s = "Boost libraries are fun!";
boost::regex expr("(\\w+)\\s(libraries)"); // תואם "Boost libraries"
std::string fmt("GNU \\1"); // מחליף ל-"GNU Boost"
std::string result = boost::regex_replace(s, expr, fmt);
std::cout << result << std::endl;
return 0;
}
דוגמת פלט
GNU Boost are fun!
דוגמאות אלו מציגות רק חלק מהיכולות של C++ עם ביטויים רגולריים, מדגימות חיפושים בסיסיים, התאמת תבניות והחלפות, בין אם באמצעות ספריית התקן או בהגברה באמצעות המימוש העוצמתי של ביטוי רגולרי של Boost.