ホームページ  >  記事  >  バックエンド開発  >  C++ の正規表現とその応用スキル

C++ の正規表現とその応用スキル

PHPz
PHPzオリジナル
2023-08-22 08:28:44988ブラウズ

C 開発では、正規表現は非常に便利なツールです。正規表現を使用すると、文字列の照合や検索などの操作を簡単に実行できます。この記事では、読者が開発上の問題を解決するために正規表現をより適切に適用できるように、C の正規表現とその応用テクニックを紹介します。

1. 正規表現の概要

正規表現は文字セットで構成されるパターンであり、文字列を特定のルールと一致させるために使用されます。正規表現は通常、メタキャラクター、修飾子、文字で構成されます。このうち、メタキャラクターは特別な意味を持ち、文字の種類を表すために使用され、修飾子は文字が繰り返し出現する回数を指定するために使用されます。文字は、通常の文字または特殊文字を表すことができます。

C では、8b2d503d09b38f6c300ed08e7e08a623 ヘッダー ファイルを使用して正規表現の機能を実装します。一般的に使用されるメタ文字と修飾子をいくつか示します:

  1. メタ文字:

. 任意の文字と一致します。
# 文字列の先頭と一致します。
$ 文字列の末尾と一致します。

  • 前の文​​字と 0 回以上一致します。
  • 前の文​​字と 1 回以上一致します。
    ? 前の文字と 0 回または 1 回一致します。
    ()はグループ化に使用されます。
    [] は角括弧内の任意の文字と一致します。
    {m,n} は、m 回から n 回出現する前の文字と一致します。
    d は任意の数字と一致します。
    D は数値以外の文字と一致します。
    w は、任意の文字、数字、アンダースコア文字に一致します。
    W は、英数字、数字、およびアンダースコア以外の文字と一致します。
  1. 修飾子:
  • 前の文​​字と 0 回以上一致します。
  • 前の文​​字と 1 回以上一致します。
    ? 前の文字と 0 回または 1 回一致します。
    {m,n} は、m 回から n 回出現する前の文字と一致します。

2. 正規表現の適用

正規表現は、次のような C の多くのシナリオに適用できます:

  1. 文字列マッチング

正規表現を使用すると、特定の正規文字列と簡単に一致させることができます。たとえば、次のサンプル プログラムはすべての a 文字に一致します。

#include <iostream>
#include <regex>

using namespace std;

int main()
{
    regex reg("a");
    string str = "apple banana";
    sregex_iterator it(str.begin(), str.end(), reg);
    sregex_iterator end;
    while (it != end) {
        smatch match = *it;
        cout << match.str() << endl;
        it++;
    }
    return 0;
}
  1. 検索と置換

正規表現を使用すると、ファイル内のコンテンツを簡単に検索して置換することもできます。弦 。次のサンプル プログラムは、すべての a 文字を b 文字に置き換えます:

#include <iostream>
#include <regex>

using namespace std;

int main()
{
    regex reg("a");
    string str = "apple banana";
    string newstr = regex_replace(str, reg, "b");
    cout << newstr;
    return 0;
}
  1. フォーム検証

Web サイト開発では、ユーザーが送信したフォームを検証する必要があることがよくあります。 . 、入力されたデータが正しい形式であることを確認します。正規表現を使用すると、この機能を簡単に実現できます。たとえば、次のサンプル プログラムは、ユーザー入力が電子メール アドレスであるかどうかを判断します。

#include <iostream>
#include <regex>

using namespace std;

bool is_valid_email(string email)
{
    regex reg("\w+@(\w+\.)+[a-zA-Z]+");
    return regex_match(email, reg);
}

int main()
{
    string email1 = "hello@gmail.com";
    string email2 = "hello@gmail";
    cout << is_valid_email(email1) << endl;
    cout << is_valid_email(email2) << endl;
    return 0;
}
  1. ログ分析

システムの動作中に、大量のログ情報が生成されます。正規表現を使用すると、これらのログ メッセージを簡単に分析できます。たとえば、次のサンプル プログラムは、エラー文字列を含むすべての行をログに出力します。

#include <iostream>
#include <fstream>
#include <regex>

using namespace std;

int main()
{
    ifstream fin("log.txt");
    regex reg(".*error.*");
    string line;
    while (getline(fin, line)) {
        if (regex_match(line, reg)) {
            cout << line << endl;
        }
    }
    fin.close();
    return 0;
}

3. ヒント

正規表現を使用する場合は、次の点に注意する必要があります。

  1. エスケープ文字に注意してください
#C では、バックスラッシュ () は他の文字をエスケープするために使用される特殊文字です。実際のバックスラッシュ文字と一致させるには、正規表現で 2 つのバックスラッシュ文字 (\) を使用します。たとえば、実際のバックスラッシュと一致させるには、正規表現「\」を使用します。

    一致順序に注意してください
正規表現での一致順序は通常、左から右です。したがって、正しい文字列が確実に一致するように、一致順序に注意してください。

    match と regex_match を使ってみる
C では、文字列の一致に使用できる関数が 2 つあります: match と regex_match。違いは、match 関数は文字列のプレフィックス部分のみと一致するのに対し、regex_match 関数は文字列全体と一致できることです。したがって、ほとんどの場合、regex_match 関数を使用することをお勧めします。

    sregex_iterator を使用してみる
文字列マッチングを実行するときは、sregex_iterator を使用してマッチング結果を走査することをお勧めします。このイテレータは、一致するすべての結果をコンテナに保存して、後続の操作を容易にすることができます。

概要

この記事では、C の正規表現とその応用テクニックを紹介します。正規表現を使用すると、文字列の照合や検索などの操作を簡単に実行できます。読者は、この記事のサンプル コードと組み合わせて、実際のニーズに基づいて正規表現をより適切に適用して開発上の問題を解決できます。

以上がC++ の正規表現とその応用スキルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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