如何使用PowerShell进行.NET REGEX匹配方法并添加超时



我一直在使用PowerShell来创建正则对象并使用Regex.Matches()方法...这一切都很好。但是现在我已经在PowerShell中创建了一个时间pan对象(再次,简单),我想将其传递给Matches()方法的matchTimeout属性,以限制匹配的.NET引擎允许的时间。

基本上,我所有的语法都降低了,除了将timespan应用于 matchTimeout属性:

$maxtime = new-timespan -seconds 1
$regex = new-object regex('hel.', ([System.Text.RegularExpressions.RegexOptions]::MultiLine,[System.Text.RegularExpressions.RegexOptions]::IgnoreCase))
$matchups = $regex.matches("helo hela helt help")
$matchups.count

如何插入$maxtime?(是的,这是一个琐碎的示例,还有其他方法可以做...我只是在寻找一个powershell语法的示例,以将值纳入matchTimeout。)

我将使用允许matchTimeout值的构造函数。

PS> [regex]::new
OverloadDefinitions                                                                                                                   
-------------------                                                                                                                   
regex new(string pattern)                                                                                                             
regex new(string pattern, System.Text.RegularExpressions.RegexOptions options)                                                        
regex new(string pattern, System.Text.RegularExpressions.RegexOptions options, timespan matchTimeout)
PS> $maxtime = new-timespan -seconds 1
PS> $regex = New-Object -TypeName regex -ArgumentList 'hel.', ([System.Text.RegularExpressions.RegexOptions]::MultiLine,[System.Text.RegularExpressions.RegexOptions]::IgnoreCase), $maxtime
PS> $regex.MatchTimeout.TotalSeconds
1

这在PS2.0中不起作用,因为MatchTimeout是.NET 4.5

中的新功能

静态Regex.Matches()方法的过载也需要超时参数:

$string   = 'helo hela helt help'
$pattern  = 'hel.'
$options  = [System.Text.RegularExpressions.RegexOptions]'MultiLine,IgnoreCase'
$maxtime  = New-TimeSpan -Seconds 1
$matchups = [regex]::Matches($string, $pattern, $options, $maxtime)

相关内容

  • 没有找到相关文章

最新更新