RegexCompilationInfo.MatchTimeout Propriedade

Definição

Obtém ou define o intervalo de tempo limite padrão da expressão regular.

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

Valor de Propriedade

O intervalo máximo de tempo padrão que pode decorrer numa operação de correspondência de padrões antes de a RegexMatchTimeoutException ser lançado, ou InfiniteMatchTimeout se os tempos mortos forem desativados.

Exemplos

O exemplo seguinte define uma única expressão regular compilada chamada DuplicateChars que identifica duas ou mais ocorrências do mesmo carácter numa cadeia de entrada. A expressão regular compilada tem um time-out padrão de 2 segundos. Quando executas o exemplo, cria-se uma biblioteca de classes chamada RegexLib.dll que contém a expressão regular compilada.

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

O padrão (\w)\1+ de expressão regular é definido conforme mostrado na tabela a seguir.

Pattern Descrição
(\w) Corresponde a qualquer carácter de palavra e atribui-o ao primeiro grupo que capturar.
\1+ Compare uma ou mais ocorrências do valor do primeiro grupo capturado.

O exemplo seguinte usa a DuplicatedChars expressão regular para identificar caracteres duplicados num array de cadeias de caracteres. Quando chama o DuplicatedChars construtor, altera o intervalo de tempo para 0,5 segundos.

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

Observações

A MatchTimeout propriedade define o intervalo de tempo por defeito para a expressão regular compilada. Este valor representa o tempo aproximado em que uma expressão regular compilada executa uma única operação de correspondência antes de a operação expirar e o motor de expressões regulares lançar uma RegexMatchTimeoutException exceção durante a sua próxima verificação de temporização.

Importante

Recomendamos que defina sempre um valor de time-out predefinido para uma expressão regular compilada. Os consumidores da sua biblioteca de expressões regulares podem sobrepor esse valor de time-out passando um TimeSpan valor que representa o novo intervalo de time-out ao construtor de classes da expressão regular compilada.

Pode atribuir um valor de tempo limite por defeito a um RegexCompilationInfo objeto de qualquer uma das seguintes formas:

Para definir um intervalo de tempo razoável, considere os seguintes fatores:

  • O comprimento e complexidade do padrão de expressão regular. Expressões regulares mais longas e complexas requerem mais tempo do que expressões mais curtas e simples.

  • A carga esperada da máquina. O processamento demora mais tempo em sistemas com elevada utilização de CPU e memória.

Aplica-se a

Ver também