RegexCompilationInfo.MatchTimeout Propriété
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Obtient ou définit le délai d'attente par défaut de l'expression régulière.
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
Valeur de propriété
Intervalle maximum par défaut qui peut s'écouler lors d'une opération de correspondance de modèles avant qu'une exception RegexMatchTimeoutException soit levée, ou InfiniteMatchTimeout si les délais d'attente sont désactivés.
Exemples
L’exemple suivant définit une seule expression régulière compilée nommée DuplicateChars
qui identifie au moins deux occurrences du même caractère dans une chaîne d’entrée. L’expression régulière compilée a un délai d’expiration par défaut de 2 secondes. Lorsque vous exécutez l’exemple, il crée une bibliothèque de classes nommée RegexLib.dll qui contient l’expression régulière compilée.
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
Le modèle d'expression régulière (\w)\1+
est défini comme indiqué dans le tableau suivant.
Modèle | Description |
---|---|
(\w) |
Faites correspondre n’importe quel caractère de mot et affectez-le au premier groupe de capture. |
\1+ |
Faire correspondre une ou plusieurs occurrences de la valeur du premier groupe capturé. |
L’exemple suivant utilise l’expression DuplicatedChars
régulière pour identifier les caractères en double dans un tableau de chaînes. Lorsqu’il appelle le DuplicatedChars
constructeur, il modifie l’intervalle de délai d’attente en .5 secondes.
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
Remarques
La MatchTimeout propriété définit l’intervalle de délai d’attente par défaut pour l’expression régulière compilée. Cette valeur représente la durée approximative pendant laquelle une expression régulière compilée exécute une seule opération de correspondance avant que l’opération expire et que le moteur d’expression régulière lève une RegexMatchTimeoutException exception lors de son case activée de minutage suivant.
Important
Nous vous recommandons de toujours définir une valeur de délai d’attente par défaut pour une expression régulière compilée. Les consommateurs de votre bibliothèque d’expressions régulières peuvent remplacer cette valeur de délai d’attente en transmettant une TimeSpan valeur qui représente le nouvel intervalle de délai d’attente au constructeur de classe de l’expression régulière compilée.
Vous pouvez affecter une valeur de délai d’attente par défaut à un RegexCompilationInfo objet de l’une des manières suivantes :
En appelant la AppDomain.SetData méthode et en fournissant la représentation sous forme de chaîne d’une TimeSpan valeur pour la propriété « REGEX_DEFAULT_MATCH_TIMEOUT ».
En appelant le RegexCompilationInfo(String, RegexOptions, String, String, Boolean, TimeSpan) constructeur et en fournissant une valeur pour le
matchTimeout
paramètre.En définissant la valeur de cette propriété.
Pour définir un intervalle de délai d’attente raisonnable, tenez compte des facteurs suivants :
Longueur et complexité du modèle d’expression régulière. Les expressions régulières plus longues et plus complexes nécessitent plus de temps que les expressions plus courtes et plus simples.
Charge de machine attendue. Le traitement prend plus de temps sur les systèmes avec une utilisation élevée du processeur et de la mémoire.