📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
ページの作成:「== 概要 == C++において、正規表現はテキストパターンのマッチング、検索、置換等を行うための強力なツールである。<br> C++ 11以降では、標準ライブラリとして<regex>ヘッダが導入されており、正規表現の機能が言語に組み込まれた。<br> <br> これにより、外部ライブラリに頼ることなく正規表現を扱うことができる。<br> <br> 基本的な使用方法としては…」 |
|||
| 58行目: | 58行目: | ||
catch (const std::exception &e) { | catch (const std::exception &e) { | ||
std::cerr << "Main function error: " << e.what() << '\n'; | std::cerr << "Main function error: " << e.what() << '\n'; | ||
return -1; | |||
} | |||
return 0; | |||
} | |||
</syntaxhighlight> | |||
<br><br> | |||
== 正規表現の使用例 : 電話番号 == | |||
以下の例では、国内の一般的な電話番号形式に対応するパターンを使用している。<br> | |||
<br> | |||
<syntaxhighlight lang="c++"> | |||
#include <iostream> | |||
#include <regex> | |||
#include <string> | |||
void phoneNumberFormat() | |||
{ | |||
try { | |||
std::string phone = "090-1234-5678"; | |||
std::regex pattern(R"(\d{2,4}-\d{2,4}-\d{4})"); | |||
std::smatch matches; | |||
if (std::regex_match(phone, matches, pattern)) { | |||
std::cout << "Valid phone number" << std::endl ; | |||
for (const auto &match : matches) { | |||
std::cout << match << std::endl; | |||
} | |||
} | |||
} | |||
catch (const std::regex_error &e) { | |||
std::cerr << "Regex error: " << e.what() << std::endl; | |||
std::cerr << "Code: " << e.code() << std::endl; | |||
switch (e.code()) { | |||
case std::regex_constants::error_collate: | |||
std::cerr << "Invalid collation element request" << std::endl; | |||
break; | |||
case std::regex_constants::error_ctype: | |||
std::cerr << "Invalid character class" << std::endl; | |||
break; | |||
case std::regex_constants::error_escape: | |||
std::cerr << "Invalid escape character or trailing escape" << std::endl; | |||
break; | |||
case std::regex_constants::error_backref: | |||
std::cerr << "Invalid back reference" << std::endl; | |||
break; | |||
case std::regex_constants::error_brack: | |||
std::cerr << "Mismatched brackets" << std::endl; | |||
break; | |||
case std::regex_constants::error_paren: | |||
std::cerr << "Mismatched parentheses" << std::endl; | |||
break; | |||
case std::regex_constants::error_brace: | |||
std::cerr << "Mismatched braces" << std::endl; | |||
break; | |||
case std::regex_constants::error_badbrace: | |||
std::cerr << "Invalid range inside braces" << std::endl; | |||
break; | |||
case std::regex_constants::error_range: | |||
std::cerr << "Invalid character range" << std::endl; | |||
break; | |||
case std::regex_constants::error_space: | |||
std::cerr << "Insufficient memory" << std::endl; | |||
break; | |||
case std::regex_constants::error_badrepeat: | |||
std::cerr << "Invalid repeat expression" << std::endl; | |||
break; | |||
case std::regex_constants::error_complexity: | |||
std::cerr << "Operation too complex" << std::endl; | |||
break; | |||
case std::regex_constants::error_stack: | |||
std::cerr << "Stack space overflow" << std::endl; | |||
break; | |||
default: | |||
std::cerr << "Unknown regex error" << std::endl; | |||
break; | |||
} | |||
} | |||
catch (const std::exception &e) { | |||
std::cerr << "Error: " << e.what() << std::endl; | |||
} | |||
} | |||
int main() | |||
{ | |||
try { | |||
phoneNumberFormat(); | |||
} | |||
catch (const std::exception &e) { | |||
std::cerr << "Main function error: " << e.what() << std::endl; | |||
return -1; | return -1; | ||
} | } | ||