C++:
Bruke regulære uttrykk
Hvordan:
C++11 introduserte støtte for regulære uttrykk i standardbiblioteket, <regex>
, som tilbyr et robust rammeverk for strengsøking og manipulasjon. Her er et grunnleggende eksempel på bruk av regulære uttrykk for å søke etter et mønster i en streng:
#include <iostream>
#include <regex>
int main() {
std::string mål = "Hei, min e-post er [email protected]";
std::regex epost_mønster(R"(\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b)");
if (std::regex_search(mål, epost_mønster)) {
std::cout << "E-post funnet!" << std::endl;
} else {
std::cout << "Ingen e-post funnet." << std::endl;
}
return 0;
}
Eksempel på utskrift
E-post funnet!
For mer komplekse manipulasjoner, som å erstatte mønstre i strenger, kan C++’s regulære uttrykk være veldig nyttige:
#include <iostream>
#include <regex>
int main() {
std::string tekst = "Regnet i Spania faller hovedsakelig på sletten.";
std::regex vokal_regex("([aeiou])");
std::string erstattet_tekst = std::regex_replace(tekst, vokal_regex, "*");
std::cout << erstattet_tekst << std::endl;
return 0;
}
Eksempel på utskrift
R*gn*t * Sp*n** f*ll*r h*v*ds*k*l*g p* sl*tt*n.
For programmerere som utforsker utover standardbiblioteket, er Boost Regex-biblioteket (boost/regex.hpp
) et populært tredjepartsalternativ som tilbyr forbedrede regex-egenskaper og ytelsesoptimaliseringer, spesielt for komplekse mønstre eller omfattende databehandling:
#include <iostream>
#include <boost/regex.hpp>
int main() {
std::string s = "Boost-biblioteker er gøy!";
boost::regex uttrykk("(\\w+)\\s(biblioteker)"); // Matcher "Boost-biblioteker"
std::string fmt("GNU \\1"); // Erstatter med "GNU Boost"
std::string resultat = boost::regex_replace(s, uttrykk, fmt);
std::cout << resultat << std::endl;
return 0;
}
Eksempel på utskrift
GNU Boost er gøy!
Disse eksemplene riper bare i overflaten av C++’s kapasiteter med regulære uttrykk, og illustrerer grunnleggende søk, mønstergjenkjenning og erstatninger, enten ved bruk av standardbiblioteket eller forbedret av Boosts kraftige regex-implementering.