ホームページ  >  記事  >  バックエンド開発  >  C++ で正規表現関数を使用するにはどうすればよいですか?

C++ で正規表現関数を使用するにはどうすればよいですか?

PHPz
PHPzオリジナル
2023-11-18 11:41:381154ブラウズ

C++ で正規表現関数を使用するにはどうすればよいですか?

C で正規表現関数を使用するにはどうすればよいですか?

正規表現は、テキスト内のパターンの一致、検索、置換に使用できる強力なテキスト処理ツールです。 C では、正規表現関数ライブラリを使用してテキストを処理できます。この記事では、C で正規表現関数を使用する方法について説明します。

まず、C 標準ライブラリから正規表現ヘッダー ファイルをインクルードする必要があります:

#include <regex>

次に、std::regex を使用して正規表現オブジェクトを宣言し、一致するパターンを渡すことができます。それを与える。たとえば、複数の文字と数字で構成される文字列を一致させたい場合は、次のコードを使用できます。

std::regex pattern("[a-zA-Z0-9]+");

正規表現を使用する場合、いくつかのフラグを指定して一致動作を変更することもできます。共通フラグは次のとおりです:

  • std::regex_constants::ECMAScript: ECMAScript スタイルの正規表現構文を使用します;
  • std::regex_constants::grep: grep スタイルの正規表現を使用します。構文;
  • std::regex_constants::extended: POSIX 拡張正規表現構文を使用します;
  • std::regex_constants::icase: 大文字と小文字を無視します;
  • std::regex_constants ::nosubs: 一致する結果を返さない部分式。

実際の状況に応じて、適切なロゴを選択できます。

正規表現マッチングを実行する前に、マッチング結果を保存する std::smatch オブジェクトを定義する必要があります。 std::smatch は、複数の一致結果を保存できる一致結果のコンテナーです。例:

std::smatch matches;

次に、std::regex_match 関数を使用して、文字列が指定された正規表現に一致するかどうかを確認します。この関数のプロトタイプは次のとおりです。

bool std::regex_match(const std::string& str, std::smatch& match, const std::regex& pattern);

このうち、str は照合する文字列、match は照合結果を格納するために使用される std::smatch オブジェクト、pattern は照合結果を格納する正規表現オブジェクトです。一致する。この関数は、一致が成功したかどうかを示すブール値を返します。

次のサンプル コードは、std::regex_match 関数を使用して文字列が有効な電子メール アドレスかどうかを確認する方法を示しています。

#include 
#include <regex>

int main()
{
    std::string email = "example@example.com";
    std::regex pattern("\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b");
    std::smatch matches;

    if (std::regex_match(email, matches, pattern))
    {
        std::cout << "Valid email address!" << std::endl;
    }
    else
    {
        std::cout << "Invalid email address!" << std::endl;
    }

    return 0;
}

std::regex_match の使用に加えて、文字列が有効な電子メール アドレスであるかどうかを確認する関数: 一致に加えて、部分一致にも std::regex_search 関数を使用できます。 std::regex_search 関数のプロトタイプは次のとおりです。

bool std::regex_search(const std::string& str, std::smatch& match, const std::regex& pattern);

std::regex_search 関数は、指定された正規表現に一致する部分文字列を文字列から検索し、一致した結果を std::smatch に保存します。オブジェクトの真ん中。

次のサンプル コードは、std::regex_search 関数を使用して文字列内のすべての整数を検索する方法を示しています。

#include 
#include <regex>

int main()
{
    std::string text = "abc123def456ghi789";
    std::regex pattern("\d+");
    std::smatch matches;

    while (std::regex_search(text, matches, pattern))
    {
        std::cout << matches.str() << std::endl;
        text = matches.suffix().str();
    }

    return 0;
}

上記の例では、「123", " が出力されます。 456" と "789"。それぞれ文字列内の 3 つの整数です。

マッチングと検索に加えて、std::regex_replace 関数を使用して、正規表現に一致する文字列の部分を置換することもできます。 std::regex_replace 関数のプロトタイプは次のとおりです。

std::string std::regex_replace(const std::string& str, const std::regex& pattern, const std::string& replacement);

std::regex_replace 関数は、文字列 str 内の指定された正規表現パターンに一致するすべての部分文字列を検索し、それらを置換文字列で置き換えます。

以下は、std::regex_replace 関数を使用して文字列内のすべてのスペースをアンダースコアに置き換える方法を示すサンプル コードです:

#include 
#include <regex>

int main()
{
    std::string text = "Hello,   World!";
    std::regex pattern("\s+");
    std::string replacement = "_";

    std::string result = std::regex_replace(text, pattern, replacement);
    std::cout << result << std::endl;

    return 0;
}

上記の例は出力します: "Hello,_World ! 」を使用して、すべてのスペースをアンダースコアに置き換えます。

上記は、C での正規表現関数の使用方法の紹介です。正規表現を使用すると、文字列を効果的に処理し、より柔軟で強力なテキスト処理機能を実現できます。この記事が C の正規表現関数の理解と使用に役立つことを願っています。

以上がC++ で正規表現関数を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。