c regex tutorial what is c regular expression
このC#Regexチュートリアルでは、C#の正規表現とは何か、その構文、Regexクラスメソッド、および例を使用してこれらのメソッドを使用する方法について説明します。
C#の正規表現は、特定の文字パターンを照合するために使用されます。正規表現は、ユーザーが繰り返しパターンを見つけたり、データ検証を行ったり、データのフォーマットをチェックしたりする必要がある場合に使用されます。
正規表現は、文字列に特定の文字パターンが含まれているか、一致しているかを確認するために使用されます。正規表現は、主にパターンを表す文字シーケンスです。
パターンは、数字、文字、またはすべての組み合わせの範囲の任意のものにすることができます。正規表現は検証に広く使用されています。文字列の解析または照合、 例えば、 文字列が通貨形式、電話番号、または日付形式と一致するかどうかを検索します。
Android携帯電話に最適なスパイウェア
学習内容:
C#の正規表現クラス
正規表現クラスは、正規表現操作を実行するためにC#で使用されます。これには、正規表現に関連するさまざまな操作を実行するために使用できるいくつかの異なるメソッドが含まれています。
一致の実行、置換、または文字シーケンスの分割に使用できるメソッドを使用して、大きなテキストを解析して特定の文字シーケンスを見つけるために使用できます。
正規表現クラスは名前空間内に存在します。 System.Text.RegularExpression。このクラスは、文字シーケンスの形式の文字列をパラメータとして受け入れます。
C#正規表現メソッド
IsMatch
Regexクラスで最も単純で最も便利なメソッドは、IsMatchメソッドです。このメソッドには、さまざまなパラメーターに基づいて文字のマッチングを実行するためのさまざまなオーバーロードがあります。
最も単純なものは IsMatch(文字列テキスト) 、このメソッドを使用すると、ユーザーは文字列を照合するための文字シーケンスを提供できます。
2番目の過負荷 IsMatch(文字列テキスト、整数位置)。 このメソッドはブール値を返し、2つの(文字列と整数)パラメーターを取ります。パラメータで指定された文字列テキストは、基本的に、整数パラメータで指定された開始位置からの文字シーケンスと一致する正規表現コンストラクタです。
したがって、このメソッドは、指定された文字列の整数パラメータによって提供される位置で入力された文字列を照合しようとします。
3番目の過負荷、 IsMatch(文字列テキスト、文字列パターン) 2つのパラメーターを受け入れ、ブール値を返します。最初のパラメーターは、ユーザーがパターンを見つける必要があるテキストであり、次のパラメーターは、ユーザーが指定されたテキストで検索しているパターンを提供します。
推奨読書= >> MySQLでのパターンマッチング
Replace(文字列テキスト、文字列replacementText)
replaceメソッドは2つのパラメーターを受け入れ、文字列値を返します。最初のパラメーターは、一致に使用する文字シーケンスまたは正規表現であり、2番目のパラメーターは正規表現の置換です。
このメソッドは、指定されたテキストの一致を見つけて、それをユーザーが提供した置換テキストで置き換えることによって機能します。メソッドシグネチャは public string Replace(string text、string replaceText)
パブリック文字列()分割(文字列テキスト)
正規表現クラスのsplitメソッドは、パラメーターとして文字列入力を受け入れ、部分文字列を含む配列を返します。メソッドに渡されるパラメーターは、分割する必要のある文字列です。
このメソッドは、文字列内で一致する入力パターンを見つけ、一致するパターンを特定すると、その場所で文字列を小さな部分文字列に分割します。各一致するパターンがブレークポイントになります。次に、このメソッドはすべての部分文字列を含む配列を返します。
正規表現C#メソッドの使用
簡単なプログラムを作成して、これらのメソッドの使用法を見てみましょう。
public static void Main(string() args) { string patternText = 'Hello'; Regex reg = new Regex(patternText); //IsMatch(string input) Console.WriteLine(reg.IsMatch('Hello World')); //IsMatch(string input, int index) Console.WriteLine(reg.IsMatch('Hello', 0)); //IsMatch(string input, string pattern) Console.WriteLine(Regex.IsMatch('Hello World', patternText)); //Replace(string input, string replacement) Console.WriteLine(reg.Replace('Hello World', 'Replace')); //Split(string input, string pattern) string() arr = Regex.Split('Hello_World_Today', '_'); foreach(string subStr in arr) { Console.WriteLine('{0}', subStr); } }
上記のプログラムの出力
本当
本当
本当
世界を置き換える
こんにちは
世界
今日
上記のコードの説明:
プログラムの開始時にオブジェクトを作成し、後続の文字列入力でのコードマッチングに使用するパターンについては、最初はテキストの書式設定を使用して単純にしていますが、問題がなければ可能です。正規表現パターンの使用を開始します。 (このチュートリアルを進めるにつれ、正規表現パターンについて詳しく説明します)
次に、一致文字列を使用して、指定されたオブジェクトとして宣言した係数を入力文字列で入力します。一致した場合は、falseを返します。
次に使用したメソッドはIsMethod(string input、int index)です。このメソッドは2つのパラメーターを受け入れます。ここでは、入力文字列と、一致を開始する必要のあるインデックスを提供します。 例えば、 ここでは、入力文字列の先頭からマッチングを開始したいと思いました。
次に、IsMatch(文字列入力、文字列パターン)の使用方法を示しました。ここで入力文字列を指定し、パターンテキストが入力に存在するかどうかを確認したいと思いました。その存在する場合は(この場合のように)trueを返し、そうでない場合はfalseを返します。
私たちが議論した別の方法が置き換えられます。この方法は、入力データを変更したり、既存のデータの形式を変更したりするプログラムで非常に役立ちます。
ここでは、2つのパラメーターを提供します。最初のパラメーターは入力文字列で、2番目のパラメーターは前の文字列を置き換えるために使用できる文字列です。このメソッドは、前に定義した正規表現オブジェクトで定義されたパターンも使用します。
私たちが使用したもう1つの重要な方法は、分割です。このメソッドは、いくつかの繰り返しパターンに基づいて、指定された文字列を分割するために使用されます。ここでは、文字列「Hello_World_Today」を提供しています。
指定された文字列からアンダースコアを削除し、部分文字列を取得するとします。このために、入力パラメーターを指定してから、分割点として使用する必要のあるパターンを指定します。このメソッドは配列を返し、foreachのような単純なループを使用してすべての文字列を取得できます。
正規表現の構文
特定の入力から特定のパターンを照合するために使用できる特殊文字、数量詞、文字クラスなど、いくつかの異なる構文があります。
チュートリアルのこの部分では、正規表現によって提供される構文を深く掘り下げ、それらを使用していくつかの実際のシナリオを解決しようとします。先に進む前に、正規表現の基本的な考え方と、正規表現クラス内で使用できるさまざまなメソッドを理解していることを確認してください。
特殊文字
正規表現の特殊文字は、パターンにいくつかの異なる意味を割り当てるために使用されます。ここで、Regex.3で広く使用されている特殊文字とその意味のいくつかを見ていきます。
特殊文字 | 意味 |
---|---|
wと W | 小文字の「w」は英数字/アンダースコア文字を照合するために使用され、大文字の「W」は単語以外の文字を照合するために使用されます。 |
^ | これは、最も広く使用されている構文の1つです。これは、入力テキストの先頭から一致を開始した後の開始、単語、またはパターンを示します。 |
$ | この記号は、文字列の末尾から単語を照合するために使用されます。この記号の前に示されている単語/パターンは、文字列の最後にある単語と一致します。 |
。 (ドット) | ドットは、指定された文字列内の1つの文字を1回一致させるために使用されます。 |
n | これは改行に使用されます。 |
dおよび D | 小文字の「d」は数字を照合するために使用され、大文字の「D」は数字以外の文字を照合するために使用されます。 |
sおよび S | 小文字の「s」は空白に一致するために使用され、大文字の「S」は非空白に一致するために使用されます。 |
数量詞の構文
数量詞構文は、一致基準をカウントまたは定量化するために使用されます。 例えば、 特定の文字列にアルファベットが1回以上含まれているかどうかを確認する場合。正規表現で一般的に使用される数量詞のいくつかを見てみましょう。
数量詞の構文 | 意味 |
---|---|
* | この記号は、前の文字と一致させるために使用されます。 |
+ | この記号は、1行の1つ以上の文字を照合するために使用されます。 |
{n} | 中括弧内の数字は、中括弧内の数字で定義された前の文字の番号と一致するために使用されます。 |
{n、} | 中括弧内の数字とこの記号は、少なくともnと一致することを確認するために使用されます(つまり、中括弧内の数字)。 |
{n、m} | この記号は、前の文字をn回からm回まで照合するために使用されます。 |
? | この記号により、前の文字がオプションとして一致します。 |
キャラクタークラス
文字クラスは文字セットとも呼ばれ、これは正規表現エンジンに複数の文字から単一の一致を探すように指示するために使用されます。文字クラスは1つの文字にのみ一致し、文字セット内に含まれる文字の順序は重要ではありません。
キャラクタークラス | 意味 |
---|---|
( 範囲 ) | 角括弧記号は、文字の範囲を照合するために使用されます。たとえば、(a-z)のように角かっこで囲むことにより、アルファベット「a」から「z」までの範囲の任意の文字を定義できます。 または、(1-9)を示すことにより、数値の「1」から「9」に一致させることもできます。 |
(^範囲) | これは、文字クラスを否定することを示します。角かっこ内に示されている範囲ではなく、すべてに一致するために使用されます。 |
これは、独自の正規表現記号を持つ可能性のある特殊文字を照合するために使用されます。スラッシュは、リテラル形式の特殊文字を照合するために使用されます。 |
グループ化
丸括弧または括弧を使用して、正規表現の一部をグループ化できます。これにより、ユーザーは式に数量詞を追加できます。
グループ化 | 意味 |
---|---|
(グループ式) | 丸括弧は、式をグループ化するために使用されます。 |
| | |演算子は、たとえば(a | b)の代替を使用するために、丸括弧内で使用されます。 |
C#正規表現の例
前のセクションでは、正規表現記号について学習しました。このセクションでは、正規表現でのさまざまな記号の使用法と、さまざまな式を照合するために使用できる組み合わせについて詳しく説明します。
このチュートリアルでは、開発者がアプリケーションや単純なプログラムでユーザー入力を取得する際に直面する可能性のある、最も広く遭遇する現実のシナリオのいくつかについて説明します。
実際のシナリオでの正規表現の例
いくつかのリアルタイムの例を使用して、正規表現について詳しく学びましょう。
シナリオ1:入力文字列が6桁の大文字と小文字を区別しないアルファベット文字で構成されているかどうかを検証します。
正規表現の最も一般的なシナリオは、特定の単語を見つけて照合することです。 例えば、 ユーザーからのランダムなアルファベット文字列が必要で、その入力は正確に6桁の長さである必要があるとします。
単純な正規表現を使用できることを検証します。正規表現の記述と使用法をよりよく理解するためのプログラムを作成しましょう。
public static void Main(string() args) { string patternText = @'^(a-zA-Z){6}$'; Regex reg = new Regex(patternText); //When pattern matches Console.WriteLine(reg.IsMatch('Helios')); //When pattern doesnt match Console.WriteLine(reg.IsMatch('Helo')); }
出力
本当
誤り
説明
この例では、入力文字列を検証して、6桁のアルファベット文字が含まれているかどうかを確認しようとしています。文字は小文字と大文字の両方にすることができるので、それも考慮する必要があります。
そこで、ここでは変数「patternText」で正規表現パターンを定義し、それを正規表現オブジェクトに渡しました。これで、コードの次の行は非常に単純になりました。IsMatchメソッドを使用して、正規表現と入力文字列を比較しました。
ここで、私たちが考案した正規表現を見てみましょう。式(^ (a-zA-Z) {6} $)は、4つの異なる部分で構成されています。 「^」、「(a-zA-Z)」、「{6}」、「$」。 2番目の部分は、式のマッチングを実行するために使用されるマッチング文字を示します。小文字の場合は「a-z」、大文字の場合は「A-Z」です。
最初の部分の文字「^」は、文字列が2番目の部分で定義されたパターン(小文字と大文字のアルファベット)で始まることを保証します。
3番目の部分の中括弧は、定義されたパターン(この場合は6)で識別できる文字列の文字数を決定し、「$」記号は、2番目の部分で定義されたパターンで終わることを確認します。
^ (a-zA-Z) {6} $
シナリオ2:正規表現を使用して、「Super」で始まり、その後に空白がある単語を検証します。つまり、文の先頭に「Super」が存在するかどうかを検証します。
ユーザー入力を読んでいて、ユーザーが常に特定の単語、数字、またはアルファベットで文を開始するようにする必要があると仮定しましょう。これは、単純な正規表現を使用することで非常に簡単に実現できます。
サンプルプログラムを見てから、この式の書き方について詳しく説明しましょう。
public static void Main(string() args) { string patternText = @'^Supers'; Regex reg = new Regex(patternText); //When pattern matches Console.WriteLine(reg.IsMatch('Super man')); //When pattern doesnt match Console.WriteLine(reg.IsMatch('Superhero')); }
出力
本当
誤り
説明
この例でも、最初の例と同様のコード設定を使用しました。このシナリオの正規表現パターンでは、「スーパー」で始まる単語または文の組み合わせと一致させる必要があります。
^スーパー
したがって、単語シリーズの最初から一致させたいので、「^」記号を入力することから始め、次に一致させたいパターン(この場合は「スーパー」)を指定します。これで、「^ Super」を作成したパターンは、スーパーマンやスーパーナチュラルを含め、スーパーのすべての値と一致する可能性がありますが、「スーパー」という単語だけが必要なわけではありません。
これは、単語の終わりと別の単語の始まりを示すために、単語の後に空白が必要であることを意味します。これを行うには、パターンに記号「 s」を追加し、それによって最終的なパターンを次のようにします。
^スーパー s
シナリオ3:正規表現を使用して、画像ファイルタイプ拡張子の付いた有効なファイル名を検索します。
開発者がしばしば直面するもう1つの重要なリアルタイムのシナリオは、ファイルタイプの検証です。 UIにアップロードボタンがあり、画像ファイルタイプの拡張子のみを受け入れることができるとしましょう。
ユーザーのアップロードファイルを検証し、間違ったファイル形式をアップロードした場合に備えて通知する必要があります。これは、正規表現を使用することで簡単に実現できます。
以下に示すのは、これをチェックするための簡単なプログラムです。
public static void Main(string() args) jpeg
出力
本当
本当
本当
誤り
誤り
説明
ここでは、ファイル名を一致させる必要があります。有効なファイル名は3つの部分で構成されています( ファイルの名前+。 +ファイル拡張子 )。 3つの部分すべてに一致する正規表現を作成する必要があります。最初の部分、つまりファイルの名前を照合することから始めましょう。ファイル名には、英数字と特殊文字を含めることができます。
前に説明したように、それを示す記号は「 w」です。また、ファイル名は1文字以上にすることができるため、記号「+」を使用します。それらを組み合わせると、最初の部分のシンボルが得られます。
(w+)
ブラケットはこれを部分的に分離しました。次の部分はドット記号です。ドット記号は正規表現でその意味を持っているため、文字通りの意味を与えるために、その前に円記号を使用します。両方を組み合わせると、正規表現の最初の2つの部分がカバーされます。
(w+).
これで、3番目の最後の部分では、「|」で区切って必要なファイル拡張子を直接定義できます。 OR記号。これは、円形の角かっこで囲むことによって分離できます。末尾の「$」記号は、定義された拡張子が文字列の末尾にあることを確認します。それでは、それらを組み合わせて、最終的な正規表現を取得しましょう。
(w+).(jpg|png|jpeg|gif)$
これをプログラムで使用すると、正しい形式に一致してtrueを返しますが、形式が無効な場合はfalseを返します。
シナリオ4:正規表現を使用してWebサイトのアドレス形式を検証する
Webアドレスまたはドメインアドレスを受け入れるWebフォームがあると仮定します。フォームに入力する際に、ユーザーが正しいWeb /ドメインアドレスを入力するようにします。ユーザーが正しいWebアドレスを入力したかどうかを判断するには、正規表現が非常に役立ちます。
public static void Main(string() args) { string patternText = @'^www.(a-zA-Z0-9){3,20}.(com|in|org|co.in|net|dev)$'; Regex reg = new Regex(patternText); //When pattern matches Console.WriteLine(reg.IsMatch('www.selenium.dev')); //When pattern doesnt match Console.WriteLine(reg.IsMatch('ww.alsjk9874561230.movie.dont')); }
出力
本当
誤り
説明
ここでは、正規表現を使用して有効なドメイン名を照合します。有効なドメイン名は、略語「www」で始まり、ドット(。)が続き、その後にドット(。)が続くウェブサイトの名前、最後にドメイン拡張子が続きます。
したがって、前のシナリオと同様に、部分的に一致させようとします。まず、「www」を照合することから始めましょう。部。したがって、開始記号から始めて、次に「www」として示します。これは修正されたものであるため、開始記号の後に正確な単語を続けて一致させます。
“^www.”
次に、2番目の部分の作業を開始します。 Webアドレスの2番目の部分は、任意の英数字の名前にすることができます。したがって、ここでは、文字クラスに存在する角括弧を使用して、一致させる必要のある範囲を定義します。 2番目の部分を2番目の部分と追加した後、私たちに与えます。
“^www.(a-zA-Z0-9){3,20}”
ここでは、Webサイト名の最小文字長と最大文字長を定義するために、中括弧も追加しました。最小で3、最大で20を指定しました。任意の最小または最大の長さを指定できます。
これで、Webアドレスの最初と2番目の部分をカバーしたので、最後の部分、つまりドメイン拡張子だけが残ります。前のシナリオで行ったのと非常によく似ています。ORを使用し、有効なすべてのドメイン拡張子を角かっこで囲むことにより、ドメイン拡張子と直接照合します。
したがって、これらすべてを合計すると、有効なWebアドレスに一致する完全な正規表現が得られます。
マージソートc ++の例
www.(a-zA-Z0-9){3,20}.(com|in|org|co.in|net|dev)$
シナリオ5:正規表現を使用して電子メールID形式を検証する
ユーザーにメールアドレスの入力を求めるサインインフォームがウェブページにあるとします。明らかな理由により、無効なメールアドレスでフォームを続行することは望ましくありません。ユーザーが入力したメールアドレスが正しいかどうかを検証するために、正規表現を使用できます。
以下に示すのは、電子メールアドレスを検証するための簡単なプログラムです。
public static void Main(string() args) { string patternText = @'^(a-zA-Z0-9._-){5,25}.@.(a-z){2,12}.(com|org|co.in|net)'; Regex reg = new Regex(patternText); //When pattern matches Console.WriteLine(reg.IsMatch('software_test123@gmail.com')); Console.WriteLine(reg.IsMatch('Special.Char@yahoo.co.in')); //When pattern doesnt match Console.WriteLine(reg.IsMatch('ww.alsjk9874561230.mo@vie.dont')); }
出力
本当
本当
誤り
説明
有効な電子メールアドレスには、アルファベット、数字、およびドット(。)、ダッシュ(-)、アンダースコア(_)の後に「@」記号が続き、その後にドメイン名とドメイン拡張子が続く特殊文字が含まれます。
したがって、メールアドレスを4つの部分に分割できます。つまり、メール識別子、「@」記号、ドメイン名、最後の部分はドメイン拡張子です。
最初の部分の正規表現を書くことから始めましょう。いくつかの特殊文字を含む英数字にすることができます。式のサイズが5〜25文字であると想定します。以前に書いた方法(電子メールのシナリオ)と同様に、次の式を思いつくことができます。
^(a-zA-Z0-9._-){5,25}
さて、第二部に移ります。 「@」という1つの記号に一致するだけでよいため、比較的簡単です。上記の式に追加すると、次のようになります。
^(a-zA-Z0-9._-){5,25}.@
3番目の部分に移動すると、ドメイン名は常に一連の小文字のアルファベットになります。必要に応じて、数字または大文字のアルファベットを含めることもできますが、このシナリオでは、小文字のアルファベットを使用します。
長さが2〜12文字の小文字のアルファベットの式を追加すると、次の式になります。
^(a-zA-Z0-9._-){5,25}.@.(a-z){2,12}
これで、4番目のシナリオと同様に、ドメイン拡張の式が残りました。いくつかの特定のドメイン拡張を処理します。必要に応じて、角かっこで囲み、「|」で区切ることで、さらに追加できます。シンボル。
この式を前の式と統合すると、電子メール検証の最終的な式の値が得られます。
^(a-zA-Z0-9._-){5,25}.@.(a-z){2,12}.(com|org|co.in|net)
結論
このチュートリアルでは、正規表現とは何か、および正規表現を表すために使用される構文/記号について学習しました。正規表現を使用すると、ユーザーは文字列を特定のパターンに一致させることができます。
これは、ユーザーが自分のメールアドレスや電話番号を入力したときなど、入力の迅速な検証が必要な状況で非常に役立ちます。正規表現を使用すると、形式をすばやく検証し、ユーザーが間違った形式を入力した場合に問題についてユーザーに通知できます。
また、さまざまなアプリケーションに使用できるさまざまなシナリオに取り組むことも学びました。単語、アルファベット、Webサイトのアドレス、電子メールID、さらにはファイルの種類や拡張子に一致する式を作成するための段階的なプロセスを検討しました。
これらのシナリオは、多数のコード行を記述せずにユーザー入力をリアルタイムで検証するのに非常に役立ち、それによって時間を節約し、複雑さを軽減するのに役立ちます。これらの例は、ユーザーが独自の正規表現のセットを作成し、他のいくつかの異なるシナリオを処理するのに役立つようにガイドするために使用されています。
正規表現は、アルファベットや数字を使用して特定の一連の文字と一致させるように単純にすることも、特殊文字、数量詞、文字クラスなどを組み合わせて複雑な形式を検証したり、文字シリーズ内の特定のパターンを探すことによって複雑にすることもできます。
一言で言えば、正規表現はプログラマーにとって非常に強力なツールであり、データ照合または検証タスクで実行する必要のあるコードの量を減らすのに役立ちます。