Regex.MatchTimeout 属性

定义

获取当前实例的超时间隔。

public:
 property TimeSpan MatchTimeout { TimeSpan get(); };
public TimeSpan MatchTimeout { get; }
member this.MatchTimeout : TimeSpan
Public ReadOnly Property MatchTimeout As TimeSpan

属性值

RegexMatchTimeoutException 引发之前或如果时间超期被禁用 InfiniteMatchTimeout ,在样式匹配操作符中可以经过的最长时间间隔。

注解

属性MatchTimeout定义实例在操作超时前执行单个匹配操作的大致最大时间间隔Regex。正则表达式引擎在超时间隔过后的下一个RegexMatchTimeoutException计时检查引发异常。 这可以防止正则表达式引擎处理需要过多回溯的输入字符串。 有关详细信息,请参阅正则表达式的回溯和最佳做法。

此属性为只读。 可以通过调用 Regex.Regex(String, RegexOptions, TimeSpan) 构造函数为单个Regex对象显式设置其值;可以通过调用 AppDomain.SetData 方法并为“REGEX_DEFAULT_MATCH_TIMEOUT”属性提供值TimeSpan来为应用程序域中的所有Regex匹配操作设置其值,如以下示例所示。

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      AppDomain domain = AppDomain.CurrentDomain;
      // Set a timeout interval of 2 seconds.
      domain.SetData("REGEX_DEFAULT_MATCH_TIMEOUT", TimeSpan.FromSeconds(2));
      Object timeout = domain.GetData("REGEX_DEFAULT_MATCH_TIMEOUT");
      Console.WriteLine("Default regex match timeout: {0}",
                         timeout == null ? "<null>" : timeout);

      Regex rgx = new Regex("[aeiouy]");
      Console.WriteLine("Regular expression pattern: {0}", rgx.ToString());
      Console.WriteLine("Timeout interval for this regex: {0} seconds",
                        rgx.MatchTimeout.TotalSeconds);
   }
}
// The example displays the following output:
//       Default regex match timeout: 00:00:02
//       Regular expression pattern: [aeiouy]
//       Timeout interval for this regex: 2 seconds
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim domain As AppDomain = AppDomain.CurrentDomain
      ' Set a timeout interval of 2 seconds.
      domain.SetData("REGEX_DEFAULT_MATCH_TIMEOUT", TimeSpan.FromSeconds(2))
      Dim timeout As Object = domain.GetData("REGEX_DEFAULT_MATCH_TIMEOUT")
      Console.WriteLine("Default regex match timeout: {0}",
                         If(timeout Is Nothing, "<null>", timeout))

      Dim rgx As New Regex("[aeiouy]")
      Console.WriteLine("Regular expression pattern: {0}", rgx.ToString())
      Console.WriteLine("Timeout interval for this regex: {0} seconds",
                        rgx.MatchTimeout.TotalSeconds)
   End Sub
End Module
' The example displays the following output:
'       Default regex match timeout: 00:00:02
'       Regular expression pattern: [aeiouy]
'       Timeout interval for this regex: 2 seconds

如果未显式设置超时间隔,则使用默认值 Regex.InfiniteMatchTimeout ,并且匹配的操作不会超时。

适用于