RegexCompilationInfo.MatchTimeout プロパティ
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
正規表現の既定のタイムアウト間隔を取得または設定します。
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
プロパティ値
RegexMatchTimeoutException がスローされる前にパターン一致操作で経過できる既定の最大時間間隔、またはタイムアウトが無効な場合は InfiniteMatchTimeout。
例
次の例では、 という名前 DuplicateChars
の 1 つのコンパイル済み正規表現を定義し、入力文字列内で同じ文字が 2 回以上出現することを識別します。 コンパイルされた正規表現の既定のタイムアウトは 2 秒です。 この例を実行すると、コンパイルされた正規表現を含む RegexLib.dll という名前のクラス ライブラリが作成されます。
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
正規表現パターン (\w)\1+
は、次の表に示すように定義されています。
パターン | 説明 |
---|---|
(\w) |
任意の単語文字と一致し、最初のキャプチャ グループに割り当てます。 |
\1+ |
キャプチャされた最初のグループの値の 1 つ以上の出現箇所と一致します。 |
次の例では、 正規表現を DuplicatedChars
使用して、文字列配列内の重複する文字を識別します。 コンストラクターを DuplicatedChars
呼び出すと、タイムアウト間隔が .5 秒に変更されます。
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
注釈
プロパティは MatchTimeout 、コンパイルされた正規表現の既定のタイムアウト間隔を定義します。 この値は、コンパイルされた正規表現が 1 回の一致操作を実行してから操作がタイムアウトし、正規表現エンジンが次のタイミング チェック中に例外をRegexMatchTimeoutExceptionスローするおおよその時間を表します。
重要
コンパイルされた正規表現の既定のタイムアウト値を常に設定することをお勧めします。 正規表現ライブラリのコンシューマーは、コンパイルされた正規表現のクラス コンストラクターに新しいタイムアウト間隔を TimeSpan 表す値を渡すことによって、そのタイムアウト値をオーバーライドできます。
次のいずれかの方法で、オブジェクトに RegexCompilationInfo 既定のタイムアウト値を割り当てることができます。
メソッドを AppDomain.SetData 呼び出し、"REGEX_DEFAULT_MATCH_TIMEOUT" プロパティの値の TimeSpan 文字列表現を指定します。
コンストラクターを RegexCompilationInfo(String, RegexOptions, String, String, Boolean, TimeSpan) 呼び出し、 パラメーターの値を
matchTimeout
指定します。このプロパティの値を設定します。
適切なタイムアウト間隔を設定するには、次の要因を考慮してください。
正規表現パターンの長さと複雑さ。 より長く複雑な正規表現では、短くて単純な正規表現よりも多くの時間が必要です。
予想されるマシンの負荷。 CPU とメモリの使用率が高いシステムでは、処理に時間がかかります。
適用対象
こちらもご覧ください
.NET