c regex tutorial regular expressions c with examples
C ++正規表現または正規表現に関するチュートリアルでは、正規表現の一致、検索、置換、入力検証、トークン化の機能を含む、C ++での正規表現の動作について説明しています。
正規表現またはregexesまたはregexpは、一般的に呼ばれているため、文字列またはテキストの特定のパターンを表すために使用されます。正規表現は、文字列の標準的なテキスト構文を示すためによく使用されます。
最高の無料のyoutubeからmp3へのコンバーター
=> すべてのC ++トレーニングシリーズを見るには、ここにアクセスしてください。
正規表現の各文字は、文字通りの意味を持つ文字か、特別な意味を持つ「メタ文字」のいずれかを持っています。
例えば 、正規表現「a (a-z)」は、値「aa」、「ab」、「ax」などを持つことができます。ここで、aは文字通りの意味を持ち、(a-z)はaからzまでの小文字を示します。
もちろん、上記の例は最も単純な例です。一致するより複雑なパターンを持つ正規表現を持つことができます。
ほとんどすべてのプログラミング言語が正規表現のサポートを提供します。 C ++は、C ++ 11以降の正規表現を直接サポートしています。プログラミング言語は別として、レクサー、高度なテキストエディターなどのほとんどのテキスト処理プログラムは正規表現を使用します。
このチュートリアルでは、C ++プログラミングに関してだけでなく、一般的な正規表現の詳細についても説明します。
学習内容:
C ++の正規表現(regex)
正規表現または正規表現は、文字列検索アルゴリズム、検索または検索/置換アルゴリズムなどで使用できる特定の検索パターンを定義する一連の文字を含む式です。正規表現は、入力の検証にも使用されます。
ほとんどのプログラミング言語は、正規表現の組み込み機能またはライブラリを介して提供します。 C ++ 11以降、C ++は、ヘッダーを介して標準ライブラリを使用して正規表現のサポートを提供します。
正規表現を解析するために使用される正規表現プロセッサは、正規表現を内部表現に変換し、実行されて、検索対象のテキストを表す文字列と照合されます。 C ++ 11は、正規表現のデフォルトの文法としてECMAScript文法を使用します。 ECMAScriptはシンプルですが、強力な正規表現機能を提供します。
Range Specification、RepeatedPatternsなどの正規表現で指定するパターンのいくつかを見てみましょう。
範囲仕様
文字またはリテラルの範囲を指定することは、正規表現で使用される最も単純な基準の1つです。
例えば、 次のように、aからzまでの小文字の範囲を指定できます。
(a-z)
これは、1つの小文字に正確に一致します。
次の基準、
(A-Za-z0-9)
上記の式は、1つの大文字、1つの小文字、および0から9までの数字を含む範囲を指定します。
上記の式の角かっこ(())には特別な意味があります。つまり、範囲を指定するために使用されます。式の一部として角かっこを含める場合は、角かっこをエスケープする必要があります。
したがって、次の式は、
( (0-9)
上記の式は、開始ブラケットと0〜9の範囲の数字を正規表現として示しています。
ただし、C ++でプログラミングしているため、次のようにC ++固有のエスケープシーケンスを使用する必要があることに注意してください。
(\ (0-9)
繰り返しパターン
上記で指定した範囲の例は、1つの文字またはリテラルにのみ一致します。複数の文字を照合する場合は、通常、パターンとともに「式修飾子」を指定して、繰り返しパターンにします。
式修飾子は、パターンの出現を1回以上一致させることを示唆する「+」にすることも、パターンの出現を0回以上一致させることを示唆する「*」にすることもできます。
例えば、次の式、
(a-z) + a、aaa、abcd、softwaretestinghelpなどの文字列に一致します。空白の文字列には一致しないことに注意してください。
表現、
(a-z) * 空白の文字列または上記の文字列のいずれかに一致します。
1回以上一致する文字のグループを指定する場合は、次のように括弧を使用できます。
(Xyz)+
上記の式は、Xyz、XyzXyz、XyzXyzXyzなどに一致します。
C ++正規表現の例
以下に示すように、MS-DOSファイル名に一致する正規表現について考えてみます。
char regex_filename() = “(a-zA-Z_) (a-zA-Z_0-9)*\.(a-zA-Z0-9)+”;
上記の正規表現は次のように解釈できます。
文字(小文字、次に大文字)またはアンダースコアを一致させます。次に、0個以上の文字を一致させます。各文字は、文字、アンダースコア、または数字です。次に、リテラルドット(。)に一致します。ドットの後に、1つ以上の文字を一致させます。各文字は、ファイル拡張子を示す文字または数字です。
C ++正規表現で使用される関数テンプレート
次に、C ++で正規表現をプログラミングする際の重要な関数テンプレートのいくつかについて説明します。
regex_match()
この関数テンプレートは、指定されたパターンに一致させるために使用されます。指定された式が文字列と一致する場合、この関数はtrueを返します。それ以外の場合、関数はfalseを返します。
以下は、regex_match関数を示すC ++プログラミングの例です。
#include #include #include using namespace std; int main () { if (regex_match ('softwareTesting', regex('(soft)(.*)') )) cout 出力:

上記のプログラムでは、最初に、regex_match関数を使用して、文字列「softwareTesting」を正規表現「(“(soft)(。*)」と照合します。次に、文字列オブジェクトを渡すことにより、regex_matchのさまざまなバリエーションを示します。範囲など
regex_search()
関数regex_search()は、正規表現に一致する文字列内のパターンを検索するために使用されます。
regex_search()の使用法を示す次のC ++プログラムについて考えてみます。
#include #include #include using namespace std; int main() { //string to be searched string mystr = 'She sells_sea shells in the sea shore'; // regex expression for pattern to be searched regex regexp('s(a-z_)+'); // flag type for determining the matching behavior (in this case on string objects) smatch m; // regex_search that searches pattern regexp in the string mystr regex_search(mystr, m, regexp); cout<<'String that matches the pattern:'< 出力:

文字列を指定してから、regexオブジェクトを使用して正規表現を指定します。この文字列と正規表現は、smatchフラグタイプとともにregex_search関数に渡されます。この関数は、入力文字列で最初に出現するパターンを検索し、一致した文字列を返します。
regex_replace()
関数regex_replace()は、正規表現に一致するパターンを文字列に置き換えるために使用されます。
C ++プログラムを使用して、regex_replace()関数を示しましょう。
#include #include #include #include using namespace std; int main() { string mystr = 'This is software testing Help portal
'; cout<<'Input string: '< 出力:

ここに、入力文字列があります。 「p」で始まる文字列に一致する正規表現を提供します。次に、一致した単語を「ウェブサイト」という単語に置き換えます。次に、「ウェブサイト」という言葉をポータルに戻します。
C ++入力検証
正規表現を使用したパターンマッチングに使用される主要な関数テンプレートについて説明しました。正規表現が提供する主な目的が入力の検証であることは注目に値します。正規表現を使用して、標準の入力デバイスから入力された入力を検証できます。
以下のプログラムをチェックして、正規表現を使用して受信データを検証する方法を示してください。
#include #include #include using namespace std; int main() { string input; regex integer_expr('(\+|-)?((:digit:))+'); //As long as the input is correct ask for another number while(true) { cout<>input; if(!cin) break; //Exit when the user inputs q if(input=='q') break; if(regex_match(input,integer_expr)) cout<<'Input is an integer'< 出力:

このプログラムは、ユーザーが入力した入力と照合して、整数かどうかを検証します。上記の出力は、整数を入力すると適切なメッセージが表示され、他のデータを入力すると無効な入力としてメッセージが表示されることを示しています。
結論
正規表現は、検索エンジンで、ワードプロセッサやテキストエディタなどのアプリケーションのパターンの検索、ダイアログの検索と置換に使用されます。正規表現は、sed、awkなどのUNIXユーティリティや、プログラムの字句解析でも使用されます。
このチュートリアルでは、パターンの照合、検索、置換に使用される関数を見てきました。これらの関数を使用すると、基本的に、正規表現を使用して目的の機能を実装する効率的なアプリケーションを開発できます。
正規表現を使用すると、入力または検索を効率的に検証し、パターンにパッチを適用して文字列を置き換えることができます。これは、非常に数行のC ++コードを使用して実行できます。
また読む=> Java正規表現チュートリアル
=> ここですべてのC ++チュートリアルを確認してください。
推奨読書