RegexCompilationInfo.MatchTimeout Properti
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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:
Dengan memanggil AppDomain.SetData metode dan memberikan representasi string dari TimeSpan nilai untuk properti "REGEX_DEFAULT_MATCH_TIMEOUT".
Dengan memanggil RegexCompilationInfo(String, RegexOptions, String, String, Boolean, TimeSpan) konstruktor dan memberikan nilai untuk
matchTimeout
parameter .Dengan mengatur nilai properti ini.
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.