文書の表示以前のリビジョンバックリンク文書の先頭へ この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。 ====== Regex クラス (System.Text.RegularExpressions) ====== ===== 大文字/小文字を区別せずにマッチさせる ===== Windowsのファイルシステムでは、ファイル名やフォルダ名の比較を行う際に大文字/小文字を区別しない。そのため、「ファイル名が正規表現パターンにマッチするか?」というような処理を記述する場合、正規表現はデフォルトで大文字/小文字を区別してしまうので注意が必要である。\\ \\ 以下の例では、Regex クラスの引数に **RegexOptions.IgnoreCase** を指定することで、大文字/小文字を区別しないで正規表現のパターンマッチを行っている。\\ [VB] <code vbnet> Imports System Imports System.Text.RegularExpressions Module SampleAppVB Private Sub IsMatchFileName(ByVal fileName As String, ByVal pattern As String) If Regex.IsMatch(fileName, pattern, _ RegexOptions.IgnoreCase) Then ' 大文字/小文字を区別しない Console.WriteLine( _ "ファイル名: '{0}' はパターン: '{1}' にマッチしました。", _ fileName, pattern) Else Console.WriteLine( _ "ファイル名: '{0}' はパターン: '{1}' にマッチしません。", _ fileName, pattern) End If End Sub Sub Main() Dim fileName1 As String = "AAA_00001.txt" Dim fileName2 As String = "AAA_00001.txt" ' 半角ファイル名の正規表現 Const TARGET_FILENAME_REGEX As String = "aaa_\d{5}.txt" ' 全角ファイル名の正規表現 Const TARGET_FILENAME_MULTI_BYTE_REGEX As String = "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) End Sub End Module </code> [C#] <code csharp> 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) { string fileName1 = @"AAA_00001.txt"; 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); } } } </code> [C++] <code cpp> using namespace System; using namespace System::Text::RegularExpressions; 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); } } int main(array<System::String ^> ^args) { String^ fileName1 = "AAA_00001.txt"; 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, (String^)TARGET_FILENAME_REGEX); IsMatchFileName(fileName2, (String^)TARGET_FILENAME_MULTI_BYTE_REGEX); IsMatchFileName(fileName1, (String^)TARGET_FILENAME_MULTI_BYTE_REGEX); IsMatchFileName(fileName2, (String^)TARGET_FILENAME_REGEX); return 0; } </code> [実行結果] <code> ファイル名: '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' にマッチしません。 </code> ===== グループ化構成体を利用した値の抽出 ===== [VB] <code vbnet> Imports System Imports System.Text.RegularExpressions Module SampleAppVB Sub Main() Dim fileName1 As String = "fileA_20090304_00001.txt" Dim fileName2 As String = "fileB_20090305_00002.txt" ' グループ名定義 Const REGEX_GROUP_DATE As String = "date" ' 日付 Const REGEX_GROUP_COUNTER As String = "counter" ' カウンタ ' ファイル名の正規表現 Const TARGET_FILENAME_REGEX As String = _ "file[AB]_" & _ "(?<" & REGEX_GROUP_DATE & ">\d{8})_" & _ "(?<" & REGEX_GROUP_COUNTER & ">\d{5}).txt" ' パターンマッチ情報を取得 Dim mt1 As Match = Regex.Match(fileName1, TARGET_FILENAME_REGEX) ' 日付、および、カウンタを抽出して表示 Console.WriteLine( _ "ファイル名: '{0}' (日付: '{1}'、カウンタ: '{2}')", _ fileName1, _ mt1.Groups(REGEX_GROUP_DATE).Value, _ mt1.Groups(REGEX_GROUP_COUNTER).Value) ' パターンマッチ情報を取得 Dim mt2 As Match = Regex.Match(fileName2, TARGET_FILENAME_REGEX) ' 日付、および、カウンタを抽出して表示 Console.WriteLine( _ "ファイル名: '{0}' (日付: '{1}'、カウンタ: '{2}')", _ fileName2, _ mt2.Groups(REGEX_GROUP_DATE).Value, _ mt2.Groups(REGEX_GROUP_COUNTER).Value) End Sub End Module </code> [実行結果] <code> ファイル名: 'fileA_20090304_00001.txt' (日付: '20090304'、カウンタ: '00001') ファイル名: 'fileB_20090305_00002.txt' (日付: '20090305'、カウンタ: '00002') </code> dotnet/regex.txt 最終更新: 2019/05/18 02:23by 非ログインユーザー