dotnet:regex

文書の過去の版を表示しています。


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' にマッチしません。
  • dotnet/regex.1235987806.txt.gz
  • 最終更新: 2019/05/18 02:23
  • (外部編集)