【问题标题】:timeout regex in framework 4 [duplicate]框架4中的超时正则表达式
【发布时间】:2012-11-11 15:49:57
【问题描述】:

可能重复:
Implementing RegEx Timeout in .NET 4

Regex regexpr = new Regex(anchorPattern[item.Key], RegexOptions.Singleline, TimeSpan.FromMilliseconds(10));

“System.Text.RegulerExpression.Regex”不包含采用 3 个参数的构造函数。 注意:错误在framework 4,如果你使用framework 4.5就不会遇到这个错误。 但我一直在使用框架 4,我必须设置超时正则表达式。有什么办法解决这个问题?

【问题讨论】:

  • 看看Implementing RegEx Timeout in .NET 4 - 这有一个如何自己实现的示例。 (注意它不会让您创建一个固有超时的Regex,但它可以让您对Match 等的个别调用超时)

标签: c# regex


【解决方案1】:

没有像您在 .NET 4 中使用的那样的构造函数。看看documentation page;构造函数的唯一选项是:

正则表达式()

正则表达式(字符串)

正则表达式(SerializationInfo, StreamingContext)

正则表达式(字符串,正则表达式选项)

编辑

您可以使用Task 运行正则表达式和Wait 方法来传递超时。像这样的东西应该可以完成工作:

var regexpr = new Regex(anchorPattern[item.Key], RegexOptions.Singleline);
var task = Task.Factory.StartNew(()=>regexpr.Match(foo));
var completedWithinAllotedTime = task.Wait(TimeSpan.FromMilliseconds(10));

【讨论】:

  • 我知道 fw 4.0 中的正则表达式构造器。我一直在问如何在框架 4. 0 中将超时设置为正则表达式。
  • @alikoyuncu,请查看最新编辑。
  • 谢谢@RePierre。我解决了这个问题。
  • 虽然 task.wait 运行良好,但它让正则表达式在后台运行。要结束它,请调用 task.Wait(new System.Threading.CancelationToken(true));在第一次等待之后。捕获异常并将您的超时处理放在那里。
猜你喜欢
  • 2012-03-16
  • 1970-01-01
  • 2010-12-04
  • 2017-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-26
相关资源
最近更新 更多