はじめに
正規表現(Regex)は、文字列操作のための強力なツールです。パターンマッチング、検索、置換など、複雑な文字列操作を簡潔に記述することができます。C#には、正規表現を扱うための豊富な機能が用意されています。この記事では、C#における正規表現の基本から応用までを詳しく解説し、実際のコード例を通じてその使い方を学びます。
正規表現の基本
正規表現とは?
正規表現は、特定の文字列パターンを表現するための特殊な文字列です。これを使用することで、文字列内の特定のパターンを検索、抽出、置換することができます。
正規表現の構文
正規表現には多くの特殊文字と構成があります。以下は、その一部です:
.: 任意の一文字に一致^: 文字列の開始に一致$: 文字列の終了に一致*: 直前の文字が0回以上繰り返される+: 直前の文字が1回以上繰り返される?: 直前の文字が0回または1回現れる[]: 文字クラス。中のいずれかの文字に一致|: OR演算子。どちらかのパターンに一致\: エスケープ文字。特殊文字をエスケープするために使用
基本的な例
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string pattern = @"\d+"; // 一つ以上の数字に一致
string input = "There are 123 apples and 456 oranges.";
MatchCollection matches = Regex.Matches(input, pattern);
foreach (Match match in matches)
{
Console.WriteLine(match.Value); // 出力: 123, 456
}
}
}
この例では、文字列中の数字をすべて検索して出力しています。
正規表現を使用した文字列操作
検索とマッチング
正規表現を使用して、文字列内の特定のパターンを検索することができます。
string input = "The quick brown fox jumps over the lazy dog.";
string pattern = @"\b\w{4}\b"; // ちょうど4文字の単語に一致
MatchCollection matches = Regex.Matches(input, pattern);
foreach (Match match in matches)
{
Console.WriteLine(match.Value); // 出力: "quick", "over", "lazy"
}
置換
正規表現を使用して、文字列中の特定のパターンを置換することもできます。
string input = "The quick brown fox jumps over the lazy dog.";
string pattern = @"\bfox\b";
string replacement = "cat";
string result = Regex.Replace(input, pattern, replacement);
Console.WriteLine(result); // 出力: The quick brown cat jumps over the lazy dog.
分割
正規表現を使用して、文字列を特定のパターンで分割することができます。
string input = "one,two;three four";
string pattern = @"[,; ]"; // カンマ、セミコロン、スペースで分割
string[] result = Regex.Split(input, pattern);
foreach (string s in result)
{
Console.WriteLine(s); // 出力: "one", "two", "three", "four"
}
正規表現の応用
電子メールアドレスの検証
正規表現を使用して、電子メールアドレスの形式を検証する例です。
string email = "example@example.com";
string pattern = @"^[^@\s]+@[^@\s]+\.[^@\s]+$";
if (Regex.IsMatch(email, pattern))
{
Console.WriteLine("Valid email address.");
}
else
{
Console.WriteLine("Invalid email address.");
}
URLの抽出
文字列中からURLを抽出する例です。
string text = "Visit our site at https://example.com or http://example.org.";
string pattern = @"https?://\S+";
MatchCollection matches = Regex.Matches(text, pattern);
foreach (Match match in matches)
{
Console.WriteLine(match.Value); // 出力: https://example.com, http://example.org
}
電話番号のフォーマット
正規表現を使用して、電話番号の形式を整える例です。
string phone = "123-456-7890";
string pattern = @"(\d{3})-(\d{3})-(\d{4})";
string replacement = "($1) $2-$3";
string result = Regex.Replace(phone, pattern, replacement);
Console.WriteLine(result); // 出力: (123) 456-7890
パフォーマンスとベストプラクティス
パフォーマンスの考慮
正規表現は強力ですが、複雑なパターンを多用するとパフォーマンスに影響を与えることがあります。特に大量のデータを処理する場合は、効率的なパターンを設計することが重要です。
ベストプラクティス
- 簡潔なパターンを使用する:必要以上に複雑な正規表現は避け、シンプルなパターンを心がける。
- エスケープシーケンスに注意する:特殊文字は適切にエスケープする。
- 正規表現のテスト:ツールを使用して正規表現の動作をテストし、期待通りの結果を得られるか確認する。
まとめ
C#における正規表現は、文字列操作を強力かつ効率的に行うための重要なツールです。正規表現を使用することで、パターンマッチング、検索、置換、分割など、複雑な文字列操作を簡単に実現できます。この記事で紹介した基本的な構文と応用例を参考にして、正規表現を効果的に活用し、C#プログラミングのスキルを向上させてください。

