プログラムで文字列を処理するとき、特定のパターンに一致するかどうかを確認したい場面はよくあります。例えば、ユーザーが入力したメールアドレスが正しい形式かどうか、電話番号が決められたルールに従っているかなどです。
C#では、正規表現をつかうことで、こうした文字列のパターンチェックを簡単に行うことができます。正規表現を使うと、複雑なルールでもシンプルなコードで実装できるため、フォーム入力のバリデーションやデータ抽出、文字列の置換処理など、さまざまな場面で活用されています。
この記事では、C#で正規表現を使って文字列をチェックする基本的な方法から、実用的な応用例までをわかりやすく解説していきます。正規表現に馴染みのない方でも理解しやすいように、具体的なコード例を交えながら説明するので、ぜひ最後まで読んでみてください!
C#で正規表現を使う基本
C#で正規表現を扱うには、System.Text.RegularExpressions
という名前空間を使用します。この名前空間には、正規表現を利用するためのRegex
クラスが含まれており、文字列のパターンマッチングを簡単に実装できます。
基本的な正規表現チェック(Regex.IsMatch)
最もシンプルな方法は、Regex.IsMatch()
メソッドを使う方法です。このメソッドは、指定した文字列が正規表現パターンに一致するかどうかを true
または false
で返します。
例:メールアドレスの形式チェック
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string email = "test@example.com";
string pattern = @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$";
bool isValid = Regex.IsMatch(email, pattern);
Console.WriteLine(isValid ? "有効なメールアドレスです。" : "無効なメールアドレスです。");
}
}
ポイント
Regex.IsMatch(email, pattern)
を使うことで、文字列email
がpattern
に一致するかを判定できます。pattern
は、メールアドレスの形式を表す正規表現です。
このように、Regex.IsMatch()
を活用すれば、入力値が特定のルールに従っているかを簡単にチェックできます。
次に、文字列の部分一致や抽出方法について詳しく見ていきましょう。
正規表現を使った文字列の部分一致・抽出
正規表現を使うと、文字列の一部が特定のパターンに一致するかどうかを調べたり、一致する部分を抽出したりすることができます。C#では、Regex.Match()
や Regex.Matches()
を使用することで、簡単に部分一致や複数の一致を取得できます。
Regex.IsMatch() を使った部分一致の取得
Regex.Match()
メソッドを使って、文字列の中から最初に一致した部分を取得していきます。
例:日付のフォーマット(YYYY-MM-DD)を抽出する
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string text = "今日の日付は 2025-03-17 です。";
string pattern = @"\d{4}-\d{2}-\d{2}";
Match match = Regex.Match(text, pattern);
if (match.Success)
{
Console.WriteLine("見つかった日付: " + match.Value);
/*
実行結果:
見つかった日付: 2025-03-17
*/
}
else
{
Console.WriteLine("日付は見つかりませんでした。");
}
}
}
ポイント
Regex.Match(text, pattern)
を使うと、text
内でpattern
に一致する最初の部分を取得できます。\d{4}-\d{2}-\d{2}
は「4桁の数字-2桁の数字-2桁の数字」(YYYY-MM-DD)の形式に一致する正規表現です。match.Value
を使って、一致した文字列を取得できます。
Regex.Matches() を使った複数一致の取得
Regex.Matches()
メソッドを使うと、文字列内のすべての一致する部分をリストとして取得できます。
例:文章の中からすべてのURLを抽出する
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string text = "公式サイト: https://example.com、ブログ: http://blog.example.com";
string pattern = @"https?://[a-zA-Z0-9.-]+(?:\.[a-zA-Z]{2,})+";
MatchCollection matches = Regex.Matches(text, pattern);
foreach (Match match in matches)
{
Console.WriteLine("見つかったURL: " + match.Value);
}
}
}
/*
実行結果:
見つかったURL: https://example.com
見つかったURL: http://blog.example.com
*/
ポイント
Regex.Matches(text, pattern)
を使うと、text
内でpattern
に一致するすべての部分をMatchCollection
として取得できます。https?://[a-zA-Z0-9.-]+(?:\.[a-zA-Z]{2,})+
は、http://
またはhttps://
から始まるURLに一致する正規表現です。foreach
ループを使って、一致したすべてのURLを取得・表示しています。
このように、Regex.Match()
を使えば最初の一致を、Regex.Matches()
を使えばすべての一致を取得できます。
よくある正規表現のパターン集
C#で正規表現を活用する際に、よく使われるパターンをいくつか紹介します。これらを覚えておくと、文字列のバリデーションやデータ抽出が効率的に行えます。
メールアドレスのチェック
ユーザーが入力したメールアドレスが正しい形式かどうかを確認します。
string pattern = @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$";
入力値 | マッチ結果 |
---|---|
test@example.com | ✅ 有効 |
user.name@domain.co.jp | ✅ 有効 |
invalid-email | ❌ 無効 |
電話番号のフォーマットチェック
日本の電話番号(ハイフン区切り)をチェックします。
string pattern = @"^\d{2,4}-\d{2,4}-\d{4}$";
入力値 | マッチ結果 |
---|---|
03-1234-5678 | ✅ 有効 |
090-1234-5678 | ✅ 有効 |
123456789 | ❌ 無効 |
郵便番号のチェック
郵便番号(123-4567
の形式)をチェックします。
string pattern = @"^\d{3}-\d{4}$";
入力値 | マッチ結果 |
---|---|
123-4567 | ✅ 有効 |
12-34567 | ❌ 無効 |
ひらがな・カタカナ・英数字のみ許可
フォーム入力で「ひらがな」「カタカナ」「英数字」のみを許可する場合に使います。
ひらがなのみ許可
string pattern = @"^[\p{IsHiragana}]+$";
カタカナのみ許可
string pattern = @"^[\p{IsKatakana}]+$";
英数字のみ許可
string pattern = @"^[a-zA-Z0-9]+$";
URLの抽出
文章内からURLを見つけ出すためのパターンです。
string pattern = @"https?://[a-zA-Z0-9.-]+(?:\.[a-zA-Z]{2,})+";
入力値 | マッチ結果 |
---|---|
https://example.com | ✅ 有効 |
http://blog.example.com | ✅ 有効 |
www.example.com | ❌ 無効 |
まとめ
この記事では、C#で正規表現を使って文字列のパターンチェックを行う方法を解説しました。正規表現をマスターすれば、データの検証や解析がより強力になります。ぜひ、実際のプログラムで活用してみてください!
コメント