C#のRegex(正規表現)クラス使い方ガイド!初心者向けパターン作成と検証方法
生徒
「ユーザーが入力したメールアドレスの形式が正しいか調べたいのですが、何かいい方法はありますか?」
先生
「それならC#のRegex(レジェックス)クラスというものが便利ですよ。特定の文字の並び方を指定して、一致するかどうかを瞬時に判断できます。」
生徒
「レジェックス……難しそうですね。私のような初心者でも使いこなせますか?」
先生
「大丈夫です。正規表現はパズルのようなものです。基本さえ覚えれば、文字列の検索や置き換えが自由自在になりますよ。一緒に学んでいきましょう!」
1. 正規表現とRegexクラスとは?
プログラミングの世界には、正規表現(せいきひょうげん)という非常に便利な技術があります。英語では「Regular Expression」と呼び、略して「Regex(レジェックス)」と言われます。C#でこの機能を使うために用意されているのが、Regexクラスです。
正規表現とは、一言で言えば「文字列のパターンを表現する方法」です。例えば、電話番号なら「数字が3つ、ハイフン、数字が4つ、ハイフン、数字が4つ」という形をしています。メールアドレスなら「名前、アットマーク、ドメイン名」という形です。このように、特定のルールに従った文字の並びを見つけ出したり、正しいかどうかをチェックしたりするのが正規表現の役割です。
C#のプログラムでこれを利用すると、入力されたデータが正しい形式か確認するバリデーション(妥当性確認)や、長い文章の中から特定のキーワードを抜き出す作業が、驚くほど簡単に記述できるようになります。パソコンを触り始めたばかりの方には少し不思議に感じるかもしれませんが、文字列を扱う上で欠かせない最強の道具なのです。
2. Regexクラスを使う準備をしよう
C#でRegexクラスを使用するには、まずプログラムの冒頭で「これを使います」という宣言をする必要があります。これを名前空間のインポートと呼びます。具体的には、ファイルの先頭に using System.Text.RegularExpressions; という一行を追加します。
この一行を書くことで、C#に備わっている正規表現の便利な機能がすべて呼び出せるようになります。もしこれを忘れてしまうと、パソコンは「Regexって何のこと?」と迷ってしまい、エラーが出てしまいます。まずは、この呪文を唱えることから始めましょう。また、正規表現のパターンを作るときは、文字列の前に @ 記号をつける「逐次形式文字列リテラル」を使うのが一般的です。これは、円マーク(バックスラッシュ)をそのまま扱えるようにするための、C#特有の書き方です。
3. 文字列がパターンに一致するか確認する
最もよく使われるのが、ある文字列が指定したパターンに合っているかを調べる IsMatch メソッドです。これは、結果を「はい(true)」か「いいえ(false)」の二択で返してくれます。例えば、特定のキーワードが含まれているかを調べる最もシンプルなプログラムを見てみましょう。
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string text = "プログラミングの世界へようこそ!";
string pattern = "プログラミング";
// textの中にpatternが含まれているかチェックします
if (Regex.IsMatch(text, pattern))
{
Console.WriteLine("キーワードが見つかりました!");
}
else
{
Console.WriteLine("キーワードはありませんでした。");
}
}
}
実行結果は以下のようになります。
キーワードが見つかりました!
この例では、単純に特定の単語があるかどうかを探していますが、ここからが正規表現の本領発揮です。次は、特定の形(パターン)を探す方法を解説します。
4. 基本的な正規表現の記号を覚えよう
正規表現では、特定の文字ではなく「種類」や「回数」を指定するための特殊な記号(メタ文字)を使います。これらを組み合わせることで、複雑なパターンを作成できます。代表的なものをいくつか紹介します。
- \d:半角数字(0から9のどれか)を表します。
- \w:英数字やアンダースコアを表します。
- .(ドット):何でもいい任意の一文字を表します。
- ^(ハット):行の先頭であることを表します。
- $(ドル):行の末尾であることを表します。
- {n}:直前の文字がn回繰り返されることを表します。
これらを組み合わせると、「数字が3回続く」というパターンは \d{3} と書くことができます。パズルのピースを組み立てる感覚に似ていますね。最初は難しく感じるかもしれませんが、使っていくうちに自然と覚えられるようになります。
5. 数字の形式をチェックする実践例
それでは、具体的に「郵便番号」のような形式をチェックするプログラムを作ってみましょう。日本の郵便番号は「3桁の数字、ハイフン、4桁の数字」というルールがあります。これを正規表現で表すと ^\d{3}-\d{4}$ となります。
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string input = "123-4567";
// ^ は先頭、\d{3} は数字3つ、- はハイフン、\d{4} は数字4つ、$ は末尾
string pattern = @"^\d{3}-\d{4}$";
if (Regex.IsMatch(input, pattern))
{
Console.WriteLine("正しい郵便番号の形式です。");
}
else
{
Console.WriteLine("郵便番号の形式が正しくありません。");
}
}
}
実行結果は以下のようになります。
正しい郵便番号の形式です。
もし入力が "12-345" だったり、文字が混ざっていたりすると、結果は「正しくありません」と表示されます。このように、ユーザーが誤った形式で入力したときに、すぐに間違いを教えてあげることができるようになります。これは、Webサイトの登録フォームなどで非常によく使われている技術です。
6. 特定の文字列を抜き出す方法
一致するかどうかを確認するだけでなく、長い文章の中から特定の場所だけを取り出したいときがあります。その場合は Match メソッドや Matches メソッドを使用します。例えば、文章の中から日付の部分だけを抜き出してみましょう。
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string sentence = "今日は2026年03月02日です。明日は2026年03月03日です。";
// 数字4つ、年、数字2つ、月、数字2つ、日 というパターン
string pattern = @"\d{4}年\d{2}月\d{2}日";
MatchCollection matches = Regex.Matches(sentence, pattern);
Console.WriteLine("見つかった日付一覧:");
foreach (Match m in matches)
{
Console.WriteLine(m.Value);
}
}
}
実行結果は以下のようになります。
見つかった日付一覧:
2026年03月02日
2026年03月03日
MatchCollection は、見つかった複数の結果をまとめて入れておくための箱のようなものです。foreach という命令を使って、その箱の中から一つずつ結果を取り出して表示しています。大量のテキストデータから特定の情報だけを抽出したいときに、手作業で探す必要がなくなるため、事務作業の自動化などにも役立ちます。
7. 文字列を別の文字に置き換える方法
正規表現のもう一つの強力な機能が、文字列の置き換えです。Regex.Replace メソッドを使うと、パターンに一致した部分を一括で別の文字に変更できます。例えば、文章の中にある不要なスペースや、特定の個人情報を伏せ字にする際などに便利です。
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string secretText = "私の電話番号は 090-1234-5678 です。";
// 数字3つ-数字4つ-数字4つ というパターンを「秘密」に置き換えます
string pattern = @"\d{3}-\d{4}-\d{4}";
string result = Regex.Replace(secretText, pattern, "XXX-XXXX-XXXX");
Console.WriteLine("変換前: " + secretText);
Console.WriteLine("変換後: " + result);
}
}
実行結果は以下のようになります。
変換前: 私の電話番号は 090-1234-5678 です。
変換後: 私の電話番号は XXX-XXXX-XXXX です。
このように、特定のルールに沿った部分だけを狙い撃ちして書き換えることができます。ワープロソフトの置換機能よりもずっと高度なことが、プログラムたった数行で実現できるのです。
8. 初心者が注意すべきポイント
正規表現はとても強力ですが、使い始めのころに陥りやすい落とし穴がいくつかあります。まず、全角と半角の違いです。正規表現で \d と書いた場合、通常は半角数字の 0123... を指します。全角の0123... は対象外になることが多いので注意しましょう。日本語の文字を扱うときは、その文字そのものをパターンに含めるのが一番確実です。
次に、パターンの作りすぎに注意です。あまりに複雑なパターンを一気に作ろうとすると、後で自分が見返したときに何を書いたか分からなくなってしまいます。最初は「数字だけ探す」「特定の文字から始まるものだけ探す」といった小さなステップから始め、徐々に組み合わせていくのが上達の近道です。また、正規表現の動作をテストできるWebサイトもたくさんあるので、プログラムを書く前にそこで実験してみるのも良いでしょう。
9. 正規表現をマスターするためのコツ
正規表現を自由に使いこなせるようになると、プログラミングの幅がぐっと広がります。最初は記号の羅列に見えて難しく感じるかもしれませんが、実は日常生活の中にある「ルール」を言葉にしているだけなのです。例えば、車のナンバープレートの形式、メールアドレスの決まり、ログインIDの制限など、私たちの周りにはたくさんの「パターン」があふれています。
これらを「どうすれば正規表現で表せるかな?」と考える癖をつけるだけで、上達スピードは格段に上がります。まずは自分の名前や誕生日など、身近なものを検索するパターンから作ってみてください。エラーが出ても、パソコンが壊れることはありません。何度も試行錯誤して、思い通りに文字が抜き出せた時の快感は、プログラミングの醍醐味の一つです。一歩ずつ、着実にスキルを身につけていきましょう。