Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês

Classe RegexMatchTimeoutException

.NET Framework (current version)
 

A exceção que é gerada quando o tempo de execução de um método de correspondência de padrão de expressão regular excede o intervalo de tempo limite.

Namespace:   System.Text.RegularExpressions
Assembly:  System (em System.dll)

System.Object
  System.Exception
    System.SystemException
      System.TimeoutException
        System.Text.RegularExpressions.RegexMatchTimeoutException

[SerializableAttribute]
public class RegexMatchTimeoutException : TimeoutException, ISerializable

NomeDescrição
System_CAPS_pubmethodRegexMatchTimeoutException()

Inicializa uma nova instância de RegexMatchTimeoutException classe com uma mensagem fornecida pelo sistema.

System_CAPS_protmethodRegexMatchTimeoutException(SerializationInfo, StreamingContext)

Inicializa uma nova instância de RegexMatchTimeoutException classe com dados serializados.

System_CAPS_pubmethodRegexMatchTimeoutException(String)

Inicializa uma nova instância de RegexMatchTimeoutException classe com a cadeia de caracteres de mensagem especificada.

System_CAPS_pubmethodRegexMatchTimeoutException(String, Exception)

Inicializa uma nova instância de RegexMatchTimeoutException classe com uma mensagem de erro especificada e uma referência à exceção interna que é a causa dessa exceção.

System_CAPS_pubmethodRegexMatchTimeoutException(String, String, TimeSpan)

Inicializa uma nova instância de RegexMatchTimeoutException classe com informações sobre o padrão de expressão regular, o texto de entrada e o intervalo de tempo limite.

NomeDescrição
System_CAPS_pubpropertyData

Obtém uma coleção de pares chave/valor que fornecem informações adicionais definidas pelo usuário sobre a exceção. (Herdado de Exception.)

System_CAPS_pubpropertyHelpLink

Obtém ou define um link para o arquivo de ajuda associado a esta exceção.(Herdado de Exception.)

System_CAPS_pubpropertyHResult

Obtém ou define HRESULT, um valor numérico codificado que é atribuído a uma exceção específica.(Herdado de Exception.)

System_CAPS_pubpropertyInnerException

Obtém a instância Exception que causou a exceção atual.(Herdado de Exception.)

System_CAPS_pubpropertyInput

Obtém o texto de entrada que o mecanismo de expressões regulares estava processando quando o tempo limite ocorreu.

System_CAPS_pubpropertyMatchTimeout

Obtém o intervalo de tempo limite para uma correspondência da expressão regular.

System_CAPS_pubpropertyMessage

Recebe uma mensagem que descreve a exceção atual.(Herdado de Exception.)

System_CAPS_pubpropertyPattern

Obtém o padrão de expressão regular que foi usado na operação de correspondência quando o tempo limite ocorreu.

System_CAPS_pubpropertySource

Obtém ou define o nome do aplicativo ou do objeto que causa o erro. (Herdado de Exception.)

System_CAPS_pubpropertyStackTrace

Obtém uma representação de cadeia de caracteres de quadros imediatos na pilha de chamadas.(Herdado de Exception.)

System_CAPS_pubpropertyTargetSite

Obtém o método que gera a exceção atual.(Herdado de Exception.)

NomeDescrição
System_CAPS_pubmethodEquals(Object)

Verifica se o objeto especificado é igual ao objeto atual. (Herdado de Object.)

System_CAPS_protmethodFinalize()

Permite que um objeto tente liberar recursos e executar outras operações de limpeza antes que ele seja recuperado pela coleta de lixo. (Herdado de Object.)

System_CAPS_pubmethodGetBaseException()

Quando substituído em uma classe derivada, retorna a Exception que é a causa raiz de uma ou mais exceções subsequentes.(Herdado de Exception.)

System_CAPS_pubmethodGetHashCode()

Serve como a função de hash padrão.(Herdado de Object.)

System_CAPS_pubmethodGetObjectData(SerializationInfo, StreamingContext)

Quando substituído em uma classe derivada, define o SerializationInfo com informações sobre a exceção.(Herdado de Exception.)

System_CAPS_pubmethodGetType()

Obtém o tipo em tempo de execução da instância atual. (Herdado de Exception.)

System_CAPS_protmethodMemberwiseClone()

Cria uma cópia superficial do Object atual.(Herdado de Object.)

System_CAPS_pubmethodToString()

Cria e retorna uma representação da cadeia de caracteres da exceção atual. (Herdado de Exception.)

NomeDescrição
System_CAPS_proteventSerializeObjectState

Ocorre quando uma exceção é serializada para criar um objeto de estado de exceção que contém dados serializados sobre a exceção.(Herdado de Exception.)

NomeDescrição
System_CAPS_pubinterfaceSystem_CAPS_privmethodISerializable.GetObjectData(SerializationInfo, StreamingContext)

Preenche uma SerializationInfo objeto com os dados necessários para serializar uma RegexMatchTimeoutException objeto.

The presence of a T:System.Text.RegularExpressions.RegexMatchTimeoutException exception generally indicates one of the following conditions:

  • The regular expression engine is backtracking excessively as it attempts to match the input text to the regular expression pattern.

  • The time-out interval has been set too low, especially given high machine load.

The way in which an exception handler handles an exception depends on the cause of the exception:

  • If the time-out results from excessive backtracking, your exception handler should abandon the attempt to match the input and inform the user that a time-out has occurred in the regular expression pattern-matching method. If possible, information about the regular expression pattern, which is available from the P:System.Text.RegularExpressions.RegexMatchTimeoutException.Pattern property, and the input that caused excessive backtracking, which is available from the P:System.Text.RegularExpressions.RegexMatchTimeoutException.Input property, should be logged so that the issue can be investigated and the regular expression pattern modified. Time-outs due to excessive backtracking are always reproducible.

  • If the time-out results from setting the time-out threshold too low, you can increase the time-out interval and retry the matching operation. The current time-out interval is available from the P:System.Text.RegularExpressions.RegexMatchTimeoutException.MatchTimeout property. When a T:System.Text.RegularExpressions.RegexMatchTimeoutException exception is thrown, the regular expression engine maintains its state so that any future invocations return the same result, as if the exception did not occur. The recommended pattern is to wait for a brief, random time interval after the exception is thrown before calling the matching method again. This can be repeated several times. However, the number of repetitions should be small in case the time-out is caused by excessive backtracking.

The example in the next section illustrates both techniques for handling a T:System.Text.RegularExpressions.RegexMatchTimeoutException.

The following example illustrates two possible approaches to handling the T:System.Text.RegularExpressions.RegexMatchTimeoutException exception. A constant whose value is two seconds defines the maximum time-out interval. The M:System.Text.RegularExpressions.Regex.IsMatch(System.String,System.String,System.Text.RegularExpressions.RegexOptions,System.TimeSpan) method is initially called with a time-out interval of one second. Each T:System.Text.RegularExpressions.RegexMatchTimeoutException exception causes the time-out interval to be increased by one second and results in another call to the M:System.Text.RegularExpressions.Regex.IsMatch(System.String,System.String,System.Text.RegularExpressions.RegexOptions,System.TimeSpan) method if the current time-out interval is less than the maximum time-out interval. However, if the current time-out interval exceeds the maximum time-out interval, the exception handler writes information to the event log and abandons the processing of the regular expression.

using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Security;
using System.Text.RegularExpressions;
using System.Threading;

public class Example
{
   const int MaxTimeoutInSeconds = 2;

   public static void Main()
   {
      TimeSpan timeout = new TimeSpan(0, 0, 1);
      string input = "aaaaaaaaaaaaaaaaaaaaaa>";
      if (ValidateInput(input, timeout))
         // Perform some operation with valid input string.
         Console.WriteLine("'{0}' is a valid string.", input); 
   } 

   private static bool ValidateInput(string input, TimeSpan timeout)
   {
      string pattern = "(a+)+$";      
      try {
         return Regex.IsMatch(input, pattern, 
                              RegexOptions.IgnoreCase, timeout);
      }
      catch (RegexMatchTimeoutException e) {
         // Increase the timeout interval and retry.
         timeout = timeout.Add(new TimeSpan(0, 0, 1));
         Console.WriteLine("Changing the timeout interval to {0}", 
                           timeout); 
         if (timeout.TotalSeconds <= MaxTimeoutInSeconds) {
            // Pause for a short period.
            Thread.Sleep(250);
            return ValidateInput(input, timeout);
         }   
         else {
            Console.WriteLine("Timeout interval of {0} exceeded.", 
                              timeout);
            // Write to event log named RegexTimeouts
            try {
               if (! EventLog.SourceExists("RegexTimeouts"))
                  EventLog.CreateEventSource("RegexTimeouts", "RegexTimeouts");

               EventLog log = new EventLog("RegexTimeouts");
               log.Source = "RegexTimeouts";
               string msg = String.Format("Timeout after {0} matching '{1}' with '{2}.",
                                          e.MatchTimeout, e.Input, e.Pattern);
               log.WriteEntry(msg, EventLogEntryType.Error);
            }
            // Do nothing to handle the exceptions.
            catch (SecurityException) { }
            catch (InvalidOperationException) { }
            catch (Win32Exception) { }
            return false;
         }   
      }
   }
}
// The example writes to the event log and also displays the following output:
//       Changing the timeout interval to 00:00:02
//       Changing the timeout interval to 00:00:03
//       Timeout interval of 00:00:03 exceeded.

Plataforma Universal do Windows
Disponível desde 8
.NET Framework
Disponível desde 4.5
Biblioteca de Classes Portátil
Com suporte no: plataformas portáteis do .NET
Windows Phone Silverlight
Disponível desde 8.0
Windows Phone
Disponível desde 8.1

Quaisquer membros estáticos públicos ( Compartilhado no Visual Basic) desse tipo são thread-safe. Não há garantia de que qualquer membro de instância seja thread-safe.

Retornar ao início
Mostrar: