RegexCompilationInfo.MatchTimeout Propriedade
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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:
Chamando o AppDomain.SetData método e fornecendo a representação em cadeia de um TimeSpan valor para a propriedade "REGEX_DEFAULT_MATCH_TIMEOUT".
Chamando o RegexCompilationInfo(String, RegexOptions, String, String, Boolean, TimeSpan) construtor e fornecendo um valor para o
matchTimeoutparâmetro.Definindo o valor desta propriedade.
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.