まず、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++の正規表現のドキュメントを参照してください。