Bagikan melalui


RegexCompilationInfo.MatchTimeout Properti

Definisi

Mendapatkan atau mengatur interval batas waktu default ekspresi reguler.

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

Nilai Properti

Interval waktu maksimum default yang dapat berlalu dalam operasi pencocokan pola sebelum RegexMatchTimeoutException dilemparkan, atau InfiniteMatchTimeout jika waktu habis dinonaktifkan.

Contoh

Contoh berikut mendefinisikan satu ekspresi reguler yang dikompilasi bernama DuplicateChars yang mengidentifikasi dua atau lebih kemunculan karakter yang sama dalam string input. Ekspresi reguler yang dikompilasi memiliki waktu habis default 2 detik. Saat Anda menjalankan contoh, itu membuat pustaka kelas bernama RegexLib.dll yang berisi ekspresi reguler yang dikompilasi.

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

Pola regex (\w)\1+ didefinisikan seperti yang ditunjukkan pada tabel berikut.

Pola Deskripsi
(\w) Cocokkan karakter kata apa pun dan tetapkan ke grup penangkapan pertama.
\1+ Cocokkan satu atau beberapa kemunculan nilai grup pertama yang diambil.

Contoh berikut menggunakan DuplicatedChars ekspresi reguler untuk mengidentifikasi karakter duplikat dalam array string. Ketika memanggil DuplicatedChars konstruktor, itu mengubah interval waktu habis menjadi .5 detik.

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

Keterangan

Properti MatchTimeout menentukan interval waktu habis default untuk ekspresi reguler yang dikompilasi. Nilai ini menunjukkan perkiraan waktu ekspresi reguler yang dikompilasi akan menjalankan satu operasi pencocokan sebelum waktu operasi habis dan mesin ekspresi reguler memberikan RegexMatchTimeoutException pengecualian selama pemeriksaan waktu berikutnya.

Penting

Kami menyarankan agar Anda selalu menetapkan nilai batas waktu default untuk ekspresi reguler yang dikompilasi. Konsumen pustaka ekspresi reguler Anda dapat mengambil alih nilai waktu habis tersebut dengan meneruskan TimeSpan nilai yang mewakili interval waktu habis baru ke konstruktor kelas ekspresi reguler yang dikompilasi.

Anda dapat menetapkan nilai batas waktu default ke RegexCompilationInfo objek dengan salah satu cara berikut:

Untuk mengatur interval waktu habis yang wajar, pertimbangkan faktor-faktor berikut:

  • Panjang dan kompleksitas pola ekspresi reguler. Ekspresi reguler yang lebih panjang dan lebih kompleks membutuhkan lebih banyak waktu daripada ekspresi yang lebih pendek dan lebih sederhana.

  • Beban komputer yang diharapkan. Pemrosesan membutuhkan lebih banyak waktu pada sistem dengan pemanfaatan CPU dan memori yang tinggi.

Berlaku untuk

Lihat juga