如何使用PowerShell来执行.net Regex匹配方法并添加超时?

bvhaajcl  于 2022-12-05  发布在  Shell
关注(0)|答案(2)|浏览(484)

我一直在尝试使用PowerShell创建一个regex对象并使用Regex.Matches()方法......这一切都很好。但现在我在PowerShell中创建了一个TimeSpan对象(同样很简单),我想将其传递给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。)

polkgigr

polkgigr1#

我将使用允许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+中的一个新特性

nwnhqdif

nwnhqdif2#

静态Regex.Matches()方法有an overload,它也接受一个timeout参数:

$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)

相关问题