我一直在使用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)