Поделиться через


RegexCompilationInfo.MatchTimeout Свойство

Определение

Получает или задает интервал времени ожидания по умолчанию регулярного выражения.

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, или InfiniteMatchTimeout, если контроль времени ожидания отключен.

Примеры

В следующем примере определяется одно скомпилированное регулярное выражение с именем DuplicateChars , которое идентифицирует два или более вхождения одного и того же символа во входной строке. Время ожидания скомпилированного регулярного выражения по умолчанию составляет 2 секунды. При выполнении примера создается библиотека классов с именем RegexLib.dll, содержащая скомпилированное регулярное выражение.

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+ определяется, как показано в следующей таблице.

Шаблон Описание
(\w) Сопоставите любой символ слова и назначьте его первой захватываемой группе.
\1+ Сопоставление одного или нескольких вхождений значения первой захваченной группы.

В следующем примере регулярное DuplicatedChars выражение используется для идентификации повторяющихся символов в строковом массиве. При вызове конструктора DuplicatedChars интервал времени ожидания изменяется на 0,5 секунды.

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 определяет интервал времени ожидания по умолчанию для скомпилированного регулярного выражения. Это значение представляет приблизительное время выполнения скомпилированным регулярным выражением одной операции сопоставления до истечения времени ожидания операции, а обработчик регулярных выражений RegexMatchTimeoutException создает исключение во время следующего проверка времени.

Важно!

Рекомендуется всегда задавать значение времени ожидания по умолчанию для скомпилированного регулярного выражения. Потребители библиотеки регулярных выражений могут переопределить это значение времени ожидания, передавая TimeSpan значение, представляющее новый интервал времени ожидания, в конструктор класса скомпилированного регулярного выражения.

Значение времени ожидания RegexCompilationInfo по умолчанию для объекта можно назначить любым из следующих способов:

Чтобы задать разумный интервал времени ожидания, учитывайте следующие факторы:

  • Длина и сложность шаблона регулярного выражения. Для более длинных и сложных регулярных выражений требуется больше времени, чем для более коротких и простых выражений.

  • Ожидаемая загрузка компьютера. Обработка занимает больше времени в системах с высокой загрузкой ЦП и памяти.

Применяется к

См. также раздел