C++で正規表現を使用したマッチング


まず、C++では正規表現を扱うために<regex>ヘッダをインクルードする必要があります。次に、正規表現オブジェクトを作成し、そのオブジェクトを使用して文字列のマッチングを行います。

以下に、いくつかの例を示します。

例1: 単純なマッチング

#include <iostream>
#include <regex>
int main() {
    std::string text = "Hello, World!";
    std::regex pattern("Hello");
    if (std::regex_search(text, pattern)) {
        std::cout << "マッチしました!" << std::endl;
    } else {
        std::cout << "マッチしませんでした。" << std::endl;
    }
    return 0;
}

この例では、文字列textがパターン"Hello"と一致するかどうかをチェックしています。

例2: パターンにマッチする部分文字列の抽出

#include <iostream>
#include <regex>
int main() {
    std::string text = "今日は2024年2月29日です。";
    std::regex pattern("\\d{4}年\\d{1,2}月\\d{1,2}日");
    std::smatch matches;
    if (std::regex_search(text, matches, pattern)) {
        std::cout << "マッチしました!" << std::endl;
        std::cout << "抽出結果: " << matches.str() << std::endl;
    } else {
        std::cout << "マッチしませんでした。" << std::endl;
    }
    return 0;
}

この例では、文字列textから年月日のパターンにマッチする部分文字列を抽出しています。

例3: パターンにマッチするすべての部分文字列の検索

#include <iostream>
#include <regex>
int main() {
    std::string text = "apple, banana, cherry";
    std::regex pattern("\\w+");
    std::sregex_iterator it(text.begin(), text.end(), pattern);
    std::sregex_iterator end;
    while (it != end) {
        std::cout << it->str() << std::endl;
        ++it;
    }
    return 0;
}

この例では、文字列textから英単語のパターンにマッチするすべての部分文字列を検索しています。

これらはいくつかの基本的な例ですが、正規表現にはさまざまなオプションや特殊な文字列があります。詳細なパターンマッチングについては、C++の正規表現のドキュメントを参照してください。