今回は、VB.NETでの正規表現の使い方と種類についてご紹介します。
正規表現とは
正規表現(Regular Expression)は、文字列中の特定パターンを検索・抽出・置換するための手法です。
VB.NETでは、System.Text.RegularExpressions 名前空間の Regex クラスを利用することで、正規表現を使った多彩な文字列操作が可能です。
例えば、特定の形式の文字列が含まれているかどうかを確認したり、複数の一致箇所をまとめて抽出したりする際に役立ちます。
正規表現パターンの種類
正規表現は、さまざまな特殊記号を組み合わせてパターンを定義します。
ここでは、代表的な要素をいくつかご紹介します。
文字クラス
角括弧 [ ] 内に指定した文字のどれか1文字にマッチします。
例えば、[A-Za-z]+ は英字が1文字以上連続する部分を対象とします。
量指定子
直前の要素が出現する回数を表します。
- *:0回以上
- +:1回以上
- ?:0回または1回
- {n,m}:n回からm回まで
例えば、\d{3,4} は3~4桁の数字にマッチします。
アンカー
文字列や行の先頭・末尾を表す特殊文字です。
- ^:行の先頭
- $:行の末尾
例えば、^\d{3}$ は行全体が3桁の数字だけの場合にマッチします。
グループ化とキャプチャ
丸括弧 ( ) を使って部分パターンをグループ化し、抽出結果をさらに細かく扱うことができます。
例えば、(\d{3})-(\d{4}) はハイフンで区切られた3桁と4桁の数字を別々にキャプチャできます。
オルタネーション
パイプ記号 | を使って複数のパターンのいずれかにマッチさせることができます。
例えば、cat|dog は “cat” または “dog” にマッチします。
VB.NETでの主なメソッドと基本的な使い方
正規表現を使った文字列操作を行う、Regexクラスの主要なメソッドとしては、Match、Matches、Replace、Splitなどがあります。
ここでは、それぞれの使い方を簡単にご紹介します。
Regex.Matchの使用例
Regex.Matchは、指定した文字列の中から最初にマッチした部分を取得するためのメソッドです。
以下の例では、文字列から数字のみを抜き出します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Imports System.Text.RegularExpressions '数字列を抽出する例 Module Module1 Sub Main() Dim input As String = "abc123xyz" Dim pattern As String = "\d+" '1回以上連続する数字にマッチ Dim m As Match = Regex.Match(input, pattern) If m.Success Then Console.WriteLine("抽出した数値: " & m.Value) Else Console.WriteLine("数値は見つかりませんでした。") End If End Sub End Module |
抽出した数値: 123
Regex.Matchesの使用例
Regex.Matchesは、指定した文字列の中からパターンにマッチするすべての部分を抽出します。
例えば、複数の電話番号が含まれた文字列から番号をすべて取得したい場合に便利です。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Imports System.Text.RegularExpressions '電話番号をすべて抽出する例 Module Module2 Sub Main() Dim input As String = "連絡先: 03-1234-5678, 045-9876-5432" Dim pattern As String = "\d{2,4}-\d{3,4}-\d{4}" '市外局番や番号のパターン Dim matches As MatchCollection = Regex.Matches(input, pattern) For Each m As Match In matches Console.WriteLine("見つかった電話番号: " & m.Value) Next End Sub End Module |
見つかった電話番号: 03-1234-5678
見つかった電話番号: 045-9876-5432
Regex.Replaceの使用例
Regex.Replaceは、文字列中の一致部分を別の文字列に置換します。
不要な情報をマスクしたり、数字をまとめて置き換えたりする場合に活用できます。
1 2 3 4 5 6 7 8 9 10 |
Imports System.Text.RegularExpressions '数字部分を「数字」という文字列に置換する例 Module Module3 Sub Main() Dim input As String = "Hello 123, welcome 456" Dim pattern As String = "\d+" Dim replaced As String = Regex.Replace(input, pattern, "数字") Console.WriteLine("置換結果: " & replaced) End Sub End Module |
置換結果: Hello 数字, welcome 数字
Regex.Splitの使用例
Regex.Splitは、指定したパターンで文字列を分割し、配列として取得します。
複数種類の区切り文字を同時に扱いたいときなどに便利です。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Imports System.Text.RegularExpressions 'カンマ、セミコロン、スペースで文字列を分割する例 Module Module4 Sub Main() Dim input As String = "apple,orange;banana grape" Dim pattern As String = "[,; ]+" Dim words As String() = Regex.Split(input, pattern) For Each word As String In words Console.WriteLine("分割要素: " & word) Next End Sub End Module |
分割要素: apple
分割要素: orange
分割要素: banana
分割要素: grape
具体的な応用例
VB.NETで正規表現を使うと、各種バリデーションやログ解析など、実用的なシーンで大いに活用できます。
メールアドレスの形式チェック
正規表現を使ってメールアドレスの形式を簡易的に検証できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Imports System.Text.RegularExpressions 'メールアドレスの形式をチェックする例 Module Module5 Sub Main() Dim email As String = "test@example.com" Dim emailPattern As String = "^[\w\.-]+@[\w\.-]+\.\w{2,}$" If Regex.IsMatch(email, emailPattern) Then Console.WriteLine("正しいメールアドレスです。") Else Console.WriteLine("メールアドレスの形式が正しくありません。") End If End Sub End Module |
正しいメールアドレスです。
ログファイルからエラー箇所を抽出
ログファイルの内容から、特定のパターンにマッチする行を抜き出す例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Imports System.Text.RegularExpressions 'ログからエラーメッセージを取得する例 Module Module6 Sub Main() Dim logEntry As String = "2025-02-21 10:15:00 ERROR: ファイルが見つかりません" Dim pattern As String = "ERROR:\s+(.*)" Dim m As Match = Regex.Match(logEntry, pattern) If m.Success Then Console.WriteLine("エラーメッセージ: " & m.Groups(1).Value) Else Console.WriteLine("エラーは検出されませんでした。") End If End Sub End Module |
エラーメッセージ: ファイルが見つかりません
注意点
正規表現を利用する際は、以下の点に留意するとより安全かつ効率的に開発ができます。
- パフォーマンス:複雑なパターンや大規模なテキストを扱う場合、処理に時間がかかることがあります。
- 可読性:長いパターンはメンテナンスが難しくなるため、必要に応じてコメントや分割を行うことが重要です。
- エスケープの扱い:VB.NETの文字列リテラル内では、バックスラッシュは特別な意味を持ちます。二重に記述するなど注意が必要です。
- 入力検証:すべての妥当性を正規表現だけで保証するのは難しいため、補助的なロジックとの組み合わせが望ましいです。
- 文化依存性:大文字・小文字の扱いなど、使用環境によって結果が変わる場合があります。オプションの設定を適切に行いましょう。
まとめ
VB.NETの正規表現は文字列処理を大幅に効率化できます。
Regex.MatchやReplaceなどのメソッドの使い方と、パターンの組み立て方を理解するとさまざまな場面で役立ちます。
パフォーマンスや可読性に配慮しながら、必要に応じて正規表現を使いこなすことがポイントです。