RegexCompilationInfo.MatchTimeout プロパティ

定義

正規表現の既定のタイムアウト間隔を取得または設定します。Gets or sets the regular expression's default time-out interval.

public:
 property TimeSpan MatchTimeout { TimeSpan get(); void set(TimeSpan value); };
public TimeSpan MatchTimeout { get; set; }
member this.MatchTimeout : TimeSpan with get, set
Public Property MatchTimeout As TimeSpan

プロパティ値

RegexMatchTimeoutException がスローされる前にパターン一致操作で経過できる既定の最大時間間隔、またはタイムアウトが無効な場合は InfiniteMatchTimeoutThe default maximum time interval that can elapse in a pattern-matching operation before a RegexMatchTimeoutException is thrown, or InfiniteMatchTimeout if time-outs are disabled.

次の例では、入力文字列に含まれる同じ文字の複数の出現箇所を識別する DuplicateChars という名前の1つのコンパイルされた正規表現を定義します。The following example defines a single compiled regular expression named DuplicateChars that identifies two or more occurrences of the same character in an input string. コンパイルされた正規表現の既定のタイムアウトは2秒です。The compiled regular expression has a default time-out of 2 seconds. この例を実行すると、コンパイル済みの正規表現を含む RegexLib という名前のクラスライブラリが作成されます。When you execute the example, it creates a class library named RegexLib.dll that contains the compiled regular expression.

using System;
using System.Reflection;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
        // Match two or more occurrences of the same character.
        string pattern = @"(\w)\1+";
        
        // Use case-insensitive matching. 
        var rci = new RegexCompilationInfo(pattern, RegexOptions.IgnoreCase,
                                           "DuplicateChars", "CustomRegexes", 
                                           true, TimeSpan.FromSeconds(2));

        // Define an assembly to contain the compiled regular expression.
        var an = new AssemblyName();
        an.Name = "RegexLib";
        RegexCompilationInfo[] rciList = { rci };

        // Compile the regular expression and create the assembly.
        Regex.CompileToAssembly(rciList, an);
   }
}
Imports System.Reflection
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
        ' Match two or more occurrences of the same character.
        Dim pattern As String = "(\w)\1+"
        
        ' Use case-insensitive matching. 
        Dim rci As New RegexCompilationInfo(pattern, RegexOptions.IgnoreCase,
                                            "DuplicateChars", "CustomRegexes", 
                                            True, TimeSpan.FromSeconds(2))

        ' Define an assembly to contain the compiled regular expression.
        Dim an As New AssemblyName()
        an.Name = "RegexLib"
        Dim rciList As RegexCompilationInfo() = New RegexCompilationInfo() { rci }

        ' Compile the regular expression and create the assembly.
        Regex.CompileToAssembly(rciList, an)
   End Sub
End Module

正規表現パターン (\w)\1+ は、次の表に示すように定義されています。The regular expression pattern (\w)\1+ is defined as shown in the following table.

[パターン]Pattern 説明Description
(\w) 任意の単語文字と一致し、最初のキャプチャグループに割り当てます。Match any word character and assign it to the first capturing group.
\1+ 最初のキャプチャグループの値の1回以上の出現と一致します。Match one or more occurrences of the value of the first captured group.

次の例では、DuplicatedChars 正規表現を使用して、文字列配列内の重複する文字を識別します。The following example uses the DuplicatedChars regular expression to identify duplicate characters in a string array. DuplicatedChars コンストラクターを呼び出すと、タイムアウト間隔が. 5 秒に変更されます。When it calls the DuplicatedChars constructor, it changes the time-out interval to .5 seconds.

using CustomRegexes;
using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      var rgx = new DuplicateChars(TimeSpan.FromSeconds(.5));
      
      string[] values = { "Greeeeeat", "seed", "deed", "beam", 
                          "loop", "Aardvark" };
      // Display regex information.
      Console.WriteLine("Regular Expression Pattern: {0}", rgx);
      Console.WriteLine("Regex timeout value: {0} seconds\n", 
                        rgx.MatchTimeout.TotalSeconds);
      
      // Display matching information.
      foreach (var value in values) {
         Match m = rgx.Match(value);
         if (m.Success)
            Console.WriteLine("'{0}' found in '{1}' at positions {2}-{3}",
                              m.Value, value, m.Index, m.Index + m.Length - 1);
         else
            Console.WriteLine("No match found in '{0}'", value);
      }                                                         
   }
}
// The example displays the following output:
//       Regular Expression Pattern: (\w)\1+
//       Regex timeout value: 0.5 seconds
//       
//       //eeeee// found in //Greeeeeat// at positions 2-6
//       //ee// found in //seed// at positions 1-2
//       //ee// found in //deed// at positions 1-2
//       No match found in //beam//
//       //oo// found in //loop// at positions 1-2
//       //Aa// found in //Aardvark// at positions 0-1
Imports CustomRegexes
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim rgx As New DuplicateChars(TimeSpan.FromSeconds(.5))
      
      Dim values() As String = { "Greeeeeat", "seed", "deed", "beam", 
                                 "loop", "Aardvark" }
      ' Display regex information.
      Console.WriteLine("Regular Expression Pattern: {0}", rgx)
      Console.WriteLine("Regex timeout value: {0} seconds", 
                        rgx.MatchTimeout.TotalSeconds)
      Console.WriteLine()
      
      ' Display matching information.
      For Each value In values
         Dim m As Match = rgx.Match(value)
         If m.Success Then
            Console.WriteLine("'{0}' found in '{1}' at positions {2}-{3}",
                              m.Value, value, m.Index, m.Index + m.Length - 1)
         Else
            Console.WriteLine("No match found in '{0}'", value)
         End If   
      Next                                                         
   End Sub
End Module
' The example displays the following output:
'       Regular Expression Pattern: (\w)\1+
'       Regex timeout value: 0.5 seconds
'       
'       'eeeee' found in 'Greeeeeat' at positions 2-6
'       'ee' found in 'seed' at positions 1-2
'       'ee' found in 'deed' at positions 1-2
'       No match found in 'beam'
'       'oo' found in 'loop' at positions 1-2
'       'Aa' found in 'Aardvark' at positions 0-1

注釈

MatchTimeout プロパティは、コンパイルされた正規表現の既定のタイムアウト間隔を定義します。The MatchTimeout property defines the default time-out interval for the compiled regular expression. この値は、コンパイルされた正規表現が、操作がタイムアウトになる前に単一の一致操作を実行するおおよその時間を表します。この値は、次のタイミングチェックで、正規表現エンジンが RegexMatchTimeoutException 例外をスローします。This value represents the approximate amount of time that a compiled regular expression will execute a single matching operation before the operation times out and the regular expression engine throws a RegexMatchTimeoutException exception during its next timing check.

重要

コンパイル済みの正規表現には、常に既定のタイムアウト値を設定することをお勧めします。We recommend that you always set a default time-out value for a compiled regular expression. 正規表現ライブラリのコンシューマーは、新しいタイムアウト間隔を表す TimeSpan 値を、コンパイルされた正規表現のクラスコンストラクターに渡すことによって、そのタイムアウト値をオーバーライドできます。Consumers of your regular expression library can override that time-out value by passing a TimeSpan value that represents the new time-out interval to the compiled regular expression's class constructor.

次のいずれかの方法で、RegexCompilationInfo オブジェクトに既定のタイムアウト値を割り当てることができます。You can assign a default time-out value to a RegexCompilationInfo object in any of the following ways:

妥当なタイムアウト期間を設定するには、次の要因を考慮してください。To set a reasonable time-out interval, consider the following factors:

  • 正規表現パターンの長さと複雑さ。The length and complexity of the regular expression pattern. 長くて複雑な正規表現の方が、短くて単純な式よりも多くの時間を必要とします。Longer and more complex regular expressions require more time than shorter and simpler ones.

  • 予想されるコンピューター負荷。The expected machine load. CPU とメモリの使用率が高いシステムでは、処理に時間がかかります。Processing takes more time on systems with high CPU and memory utilization.

適用対象

こちらもご覧ください