[永久保存版][C#] 正規表現入門

スポンサーリンク

はじめに

正規表現(Regex)は、文字列のパターンを定義して検索や置換を行うための強力なツールです。C# では、System.Text.RegularExpressions 名前空間を使用して正規表現を操作します。このブログ記事では、C# における正規表現の基本を学び、実際の使用例を紹介します。

正規表現とは

正規表現は、特定の文字列パターンを記述する方法です。これにより、文字列の検索、検証、抽出、置換を効率的に行うことができます。たとえば、メールアドレスの形式を検証したり、特定のパターンに一致する文字列を検索したりする場合に使用します。

 

C# での正規表現の基本

C# で正規表現を使用するには、System.Text.RegularExpressions 名前空間をインポートします。主に使うクラスは Regex です。以下は基本的な使い方です。

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string pattern = @"\d+"; // 数字の1つ以上の出現
        string input = "私の番号は1234です。";

        Match match = Regex.Match(input, pattern);

        if (match.Success)
        {
            Console.WriteLine($"見つかった数字: {match.Value}");
        }
        else
        {
            Console.WriteLine("数字は見つかりませんでした。");
        }
    }
}

 

基本的な正規表現パターン

以下は、C# でよく使用される正規表現パターンの例です。

パターン 説明
\d 数字 (0-9)
\D 非数字
\w 単語文字 (英数字 + アンダースコア)
\W 非単語文字
\s 空白文字 (スペース、タブなど)
\S 非空白文字
. 任意の1文字
^ 行の先頭
$ 行の末尾
* 直前の文字が0回以上出現する
+ 直前の文字が1回以上出現する
? 直前の文字が0回または1回出現する
{n} 直前の文字がn回出現する
{n,} 直前の文字がn回以上出現する
{n,m} 直前の文字がn回以上m回以下出現する

 

C# での正規表現の使用例

次に、C# での正規表現を使用した具体的な例をいくつか示します。

例1: メールアドレスの検証

以下の例では、email変数に格納された文字列がメールアドレスであるかどうかを正規表現で検証し、メールアドレスである場合は、「有効なメールアドレスです。」という文字列を出力する例です。

string emailPattern = @"^[\w\.-]+@[\w\.-]+\.\w+$";
string email = "example@example.com";

if (Regex.IsMatch(email, emailPattern))
{
    Console.WriteLine("有効なメールアドレスです。");
}
else
{
    Console.WriteLine("無効なメールアドレスです。");
}

正規表現 @"^[\w\.-]+@[\w\.-]+\.\w+$" は、メールアドレスの形式を検証するためのパターンです。この正規表現がなぜメールアドレスのパターンに対応しているのかを、各部分を分解して説明します。

正規表現の各部分の解説

  1. ^:
    • これは行の先頭を示すメタキャラクタです。正規表現が文字列の最初からマッチを始めることを意味します。
  2. [\w\.-]+:
    • [...]: 角括弧の中は、どの文字がマッチするかを指定する文字クラスです。
    • \w: 単語文字を表します。これは英字(大文字と小文字)、数字、アンダースコア(_)を含みます。
    • .: ドット(ピリオド)です。この場合、ドット自体を含むことができることを示します。
    • -: ハイフンも許可します。
    • +: 直前の要素(この場合は [\w\.-])が1回以上出現することを要求します。これにより、メールアドレスのローカル部分(@の前の部分)が少なくとも1文字以上の長さであることが保証されます。
  3. @:
    • これはリテラル文字です。メールアドレスのローカル部分の後に必ず存在する @ を示しています。
  4. [\w\.-]+:
    • これも先ほどと同様の構造です。@の後に、ドメイン名が続く部分を表します。ここでも、単語文字(英数字、アンダースコア)、ドット、ハイフンが1回以上出現することを要求しています。
  5. \.:
    • リテラルのドットを示します。ドメイン名の中で、トップレベルドメイン(TLD)を示す部分の前に必要なドットです。
  6. \w+:
    • これはトップレベルドメインを示しています。TLDは、英字の1文字以上で構成されることが期待されるため、ここで \w を使用しています。たとえば、.com.net などがこれに当たります。
  7. $:
    • これは行の末尾を示すメタキャラクタです。正規表現のマッチが文字列の最後で終了することを意味します。

 

例2: 特定の文字列の置換

以下の例では、inputText変数に格納された文字列の中から、電話番号部分を XXX-XXX-XXXX に置換する例です。置換には、Regex.Replace を使用しています。

string inputText = "こんにちは、私の電話番号は123-456-7890です。";
string pattern = @"\d{3}-\d{3}-\d{4}";
string replacement = "XXX-XXX-XXXX";

string result = Regex.Replace(inputText, pattern, replacement);
Console.WriteLine(result); // こんにちは、私の電話番号はXXX-XXX-XXXXです。

正規表現 @"\d{3}-\d{3}-\d{4}" は、電話番号の形式を検証するためのパターンです。この正規表現がなぜ電話番号を表しているのかを、各部分を分解して説明します。

正規表現の各部分の解説

  1. \d:
    • これは数字を表すメタキャラクタです。具体的には、0から9までのいずれかの数字にマッチします。
  2. {3}:
    • これは直前の要素(この場合は \d)がちょうど3回出現することを要求する量指定子です。したがって、\d{3} は3桁の数字を意味します。
  3. -:
    • これはリテラル文字で、ハイフンを示します。この部分は、電話番号の各セクションを区切るために使用されます。
  4. \d{3}:
    • 再度、3桁の数字を示します。電話番号の最初の3桁(地域番号や交換番号など)を表します。
  5. -:
    • もう一度、リテラルのハイフンを示します。電話番号の各部分を分けるために必要です。
  6. \d{4}:
    • これは4桁の数字を示します。電話番号の最後の4桁(加入者番号)を表します。

まとめ

本記事では、C# における正規表現の基本的な概念と使用法について解説しました。正規表現は、文字列のパターンを定義し、検索や置換、バリデーションを行うための強力なツールです。特に C# では、System.Text.RegularExpressions 名前空間を使用して正規表現を扱います。

主なポイント

  1. 正規表現の基本構文:
    • 正規表現の構造や使用するメタキャラクタについて学びました。特に、^$\d\w などの意味を理解することで、文字列のパターンをより正確に指定できます。
  2. C# での正規表現の使用例:
    • メールアドレスの検証に使う正規表現 @"^[\w\.-]+@[\w\.-]+\.\w+$" を取り上げ、その各部分がどのようにしてメールアドレスの形式を表すかを詳細に説明しました。
    • 電話番号の形式を検証するための正規表現 @"\d{3}-\d{3}-\d{4}" についても解説し、電話番号の構造を表す理由を明確にしました。
  3. 実用性と注意点:
    • 正規表現を使用することで、データの整合性を保つための効率的な手段を提供する一方、国や地域によって異なる電話番号の形式やメールアドレスの仕様に応じて、正規表現を調整する必要があることも指摘しました。

今後、正規表現を活用することで、文字列操作の柔軟性を高め、アプリケーションのデータバリデーションや処理を効率的に行えるようになるでしょう。さらに、高度な正規表現のテクニックや最適化方法について学び、スキルを向上させていくことをお勧めします

Please follow and like us:

コメント

タイトルとURLをコピーしました