C#のRegex.IsMatchを完全解説!正規表現で文字列パターンを判定する方法
生徒
「ユーザーが入力したメールアドレスが、正しい形式かどうかをチェックする機能を作りたいのですが、どうすればいいですか?」
先生
「それなら、C#のRegex.IsMatchという機能を使うのが一番ですよ。正規表現という仕組みを使って、文字列が特定のルールに合っているかを一瞬で判断できます。」
生徒
「正規表現って少し難しそうな響きですね。初心者でも使いこなせますか?」
先生
「大丈夫です!基本的な書き方さえ覚えれば、型判定や入力チェックが驚くほど楽になります。まずは基本から一緒に見ていきましょう!」
1. Regex.IsMatchとは何か?
プログラミングの世界では、入力された文字が「数字だけになっているか」「メールアドレスの形式になっているか」を確認する場面が頻繁にあります。これを実現するのがC#のRegex.IsMatchです。
Regex(レジェックス、またはリジェックス)は「Regular Expression」の略で、日本語では正規表現と呼びます。IsMatchは「一致するかどうか」という意味です。つまり、Regex.IsMatchとは「指定したルール(パターン)に、調べたい文字列が当てはまっているかを判定する魔法の道具」だと考えてください。
この機能を使うと、複雑なif文をいくつも書くことなく、たった一行で高度な文字チェックが可能になります。例えば、郵便番号が「3桁の数字、ハイフン、4桁の数字」になっているかを調べるのも、この機能の得意分野です。
2. 正規表現を使うための準備
C#でこの便利な機能を使うには、最初に「この道具を使いますよ」という宣言をする必要があります。これを名前空間の参照と呼びます。具体的には、プログラムのコードの先頭に以下の記述を追加します。
using System.Text.RegularExpressions;
これがないと、コンピューターはRegexという言葉を見ても「それは何のこと?」と混乱してエラーになってしまいます。パソコンで例えるなら、特定のソフトを動かすために必要なライブラリを読み込む作業のようなものです。この一行を書くだけで、強力な文字列判定機能があなたのプログラムで自由に使えるようになります。
3. 驚くほど簡単!基本的な使い方と戻り値
Regex.IsMatchの使い方は非常にシンプルです。基本的には「調べたい文字列」と「比較したいパターン」の二つを渡すだけです。このメソッドは、結果としてbool型(ブール型)という値を返してくれます。
bool型とは、「はい(True)」か「いいえ(False)」の二種類しかないデータ形式のことです。ルールに合っていればTrue、合っていなければFalseが返ってきます。これを利用して、if文で処理を分けるのが一般的な使い方です。
まずは、特定の文字が含まれているかを判定する、最もシンプルなプログラムを見てみましょう。
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(バックスラッシュd):数字のいずれか一文字を表します。
- +(プラス):直前の文字が1回以上繰り返されることを表します。
- [ ](ブラケット):括弧の中にある文字のいずれかに一致することを表します。
これらの記号を組み合わせることで、自由自在にルールを作ることができます。例えば、全てが数字であるかどうかを判定したい場合は、「先頭から最後まで数字が続いている」というルールを組み立てることになります。
5. 実践!数字だけかどうかを判定するプログラム
それでは、具体的に「入力された文字がすべて数字であるか」を判定する例を見てみましょう。これは電話番号や年齢の入力フォームなどで非常によく使われるテクニックです。
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string input1 = "12345";
string input2 = "12a45";
// パターン:先頭から最後まで数字が1回以上繰り返される
string pattern = @"^\d+$";
Console.WriteLine("入力1の結果:" + Regex.IsMatch(input1, pattern));
Console.WriteLine("入力2の結果:" + Regex.IsMatch(input2, pattern));
}
}
実行結果は以下のようになります。
入力1の結果:True
入力2の結果:False
ここで使われている @"^\d+$" という書き方の @ は、バックスラッシュをそのまま扱えるようにするC#の便利記号です。これをつけることで、正規表現をより読みやすく書くことができます。
6. 文字の範囲を指定する方法
数字だけでなく、アルファベットの範囲を指定することもできます。例えば「aからzまでの小文字だけを許可したい」といった場合です。これはブラケット [] とハイフン - を使って表現します。
例えば [a-z] は小文字のアルファベット、[A-Z] は大文字のアルファベット、[0-9] は数字を意味します。これを組み合わせて [a-zA-Z0-9] と書けば、半角英数字のどれかに一致するという意味になります。ユーザーIDの登録チェックなどで役立ちます。
7. 文字列の長さを制限するテクニック
正規表現では、文字の数も指定できます。{文字数} という形式を使います。例えば、郵便番号のように「3桁の数字、ハイフン、4桁の数字」というルールを作りたい場合は、以下のように記述します。
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string zipCode = "123-4567";
// パターン:数字3桁、ハイフン、数字4桁
string pattern = @"^\d{3}-\d{4}$";
if (Regex.IsMatch(zipCode, pattern))
{
Console.WriteLine("正しい郵便番号の形式です。");
}
else
{
Console.WriteLine("形式が正しくありません。");
}
}
}
実行結果は以下のようになります。
正しい郵便番号の形式です。
8. 大文字と小文字を区別せずに判定する方法
標準の設定では、Regex.IsMatchはアルファベットの大文字と小文字を厳密に区別します。しかし、検索機能などでは「Apple」も「apple」も同じように扱いたいことがあります。その場合は、RegexOptions.IgnoreCaseというオプションを追加します。
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string target = "CSharp";
string pattern = "csharp";
// オプションなし(デフォルト)
bool result1 = Regex.IsMatch(target, pattern);
// 大文字小文字を無視するオプションを指定
bool result2 = Regex.IsMatch(target, pattern, RegexOptions.IgnoreCase);
Console.WriteLine("オプションなし:" + result1);
Console.WriteLine("オプションあり:" + result2);
}
}
実行結果は以下のようになります。
オプションなし:False
オプションあり:True
このように、第三の引数にオプションを指定することで、より柔軟な判定が可能になります。
9. 正規表現を使う際の注意点
正規表現は非常に強力ですが、注意点もあります。あまりにも複雑なパターンを作ってしまうと、後からコードを見返したときに「何をしているのか分からない」という状態になりがちです。これをプログラミング用語で「可読性が下がる」と言います。
また、非常に長い文字列に対して複雑すぎるパターンで判定を行うと、コンピューターの処理に時間がかかってしまう場合もあります。初心者のうちは、まずはシンプルなパターンから使い始め、コメントをしっかり残して、自分や他の人が見ても意味がわかるように心がけましょう。
正規表現のパターンを確認するためのWebサイトなどもたくさんありますので、実際にC#でコードを書く前に、パターンのテストを行ってみるのも上達の近道です。
10. まとめとしての活用例
ここまで学んだことを活かせば、ログイン画面のパスワードチェック、電話番号のバリデーション(入力値検証)、禁止用語のフィルタリングなど、実用的な機能をたくさん作ることができます。Regex.IsMatchは、C#を学ぶ上で避けては通れない、しかし習得すれば最強の武器になる道具です。
プログラミングは、実際に手を動かしてコードを書いてみることが何よりの練習になります。まずは身近な文字列を使って、色々なパターンを試してみてください。最初はエラーが出るかもしれませんが、それを修正していく過程で、正規表現の仕組みがどんどん理解できるようになっていくはずです。