dotnet:regex

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

次のリビジョン
前のリビジョン
dotnet:regex [2009/03/02 16:51] – 作成 ともやんdotnet:regex [2019/05/18 02:23] (現在) – 外部編集 非ログインユーザー
行 1: 行 1:
 ====== Regex クラス (System.Text.RegularExpressions) ====== ====== 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.1235980281.txt.gz
  • 最終更新: 2019/05/18 02:23
  • (外部編集)