Att använda reguljära uttryck

C++:
Att använda reguljära uttryck

Hur man gör:

C++11 introducerade stöd för reguljära uttryck i standardbiblioteket, <regex>, vilket erbjuder ett robust ramverk för strängsökning och manipulation. Här är ett grundläggande exempel på hur man använder reguljära uttryck för att söka efter ett mönster inom en sträng:

#include <iostream>
#include <regex>

int main() {
    std::string target = "Hej, min e-post är [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 << "E-post hittad!" << std::endl;
    } else {
        std::cout << "Ingen e-post hittad." << std::endl;
    }

    return 0;
}

Exempelutmatning

E-post hittad!

För mer komplexa manipulationer, som att ersätta mönster inom strängar, kan C++:s reguljära uttryck vara mycket användbara:

#include <iostream>
#include <regex>

int main() {
    std::string text = "Regnet i Spanien faller mestadels på slätten.";
    std::regex vowel_regex("([aeiou])");

    std::string replaced_text = std::regex_replace(text, vowel_regex, "*");
    std::cout << replaced_text << std::endl;

    return 0;
}

Exempelutmatning

R*gn*t * Sp*n**n f*ll*r m*st*d*ls p* sl*tt*n.

För programmerare som utforskar utanför standardbiblioteket är Boost Regex-biblioteket (boost/regex.hpp) ett populärt tredjepartsalternativ som erbjuder förbättrade regex-förmågor och prestandaoptimeringar, särskilt för komplexa mönster eller omfattande databearbetning:

#include <iostream>
#include <boost/regex.hpp>

int main() {
    std::string s = "Boost-biblioteken är roliga!";
    boost::regex expr("(\\w+)\\s(biblioteken)"); // Matchar "Boost-biblioteken"
    std::string fmt("GNU \\1"); // Ersätt med "GNU Boost"

    std::string result = boost::regex_replace(s, expr, fmt);
    std::cout << result << std::endl;

    return 0;
}

Exempelutmatning

GNU Boost är roliga!

Dessa exempel skrapar bara på ytan av C++:s kapaciteter med reguljära uttryck, och illustrerar grundläggande sökningar, mönstermatchning och ersättningar, antingen genom att använda standardbiblioteket eller förstärkt av Boosts kraftfulla regex-implementering.