文書の過去の版を表示しています。
Regex クラス (System.Text.RegularExpressions)
大文字/小文字を区別せずにマッチさせる
Windowsのファイルシステムでは、ファイル名やフォルダ名の比較を行う際に大文字/小文字を区別しない。そのため、「ファイル名が正規表現パターンにマッチするか?」というような処理を記述する場合、正規表現はデフォルトで大文字/小文字を区別してしまうので注意が必要である。
以下の例では、Regex クラスの引数に RegexOptions.IgnoreCase を指定することで、大文字/小文字を区別しないで正規表現のパターンマッチを行っている。
[C#]
using System; using System.Text.RegularExpressions; namespace SampleApplicationCS { public class SampleAppCS { private static void IsMatchFileName(string fileName, string pattern) { if (Regex.IsMatch(fileName, pattern, RegexOptions.IgnoreCase)) // 大文字/小文字を区別しない { Console.WriteLine( "ファイル名: '{0}' はパターン: '{1}' にマッチしました。", fileName, pattern); } else { Console.WriteLine( "ファイル名: '{0}' はパターン: '{1}' にマッチしません。", fileName, pattern); } } static void Main(string[] args) { const string fileName1 = @"AAA_00001.txt"; const string fileName2 = @"AAA_00001.txt"; // 半角ファイル名の正規表現 const string TARGET_FILENAME_REGEX = @"aaa_\d{5}.txt"; // 全角ファイル名の正規表現 const string TARGET_FILENAME_MULTI_BYTE_REGEX = @"aaa_\d{5}.txt"; // ファイル名のパターンマッチ IsMatchFileName(fileName1, TARGET_FILENAME_REGEX); IsMatchFileName(fileName2, TARGET_FILENAME_MULTI_BYTE_REGEX); IsMatchFileName(fileName1, TARGET_FILENAME_MULTI_BYTE_REGEX); IsMatchFileName(fileName2, TARGET_FILENAME_REGEX); } } }
[実行結果]
ファイル名: 'AAA_00001.txt' はパターン: 'aaa_\d{5}.txt' にマッチしました。 ファイル名: 'AAA_00001.txt' はパターン: 'aaa_\d{5}.txt' にマッチしました。 ファイル名: 'AAA_00001.txt' はパターン: 'aaa_\d{5}.txt' にマッチしません。 ファイル名: 'AAA_00001.txt' はパターン: 'aaa_\d{5}.txt' にマッチしません。