崩溃的powershell和我的CPU与Regex挂钩 - 如何/为什么?

时间:2012-10-17 23:41:53

标签: regex powershell crash

执行以下命令后,我的powershell固定在97%CPU并完全冻结。 我能够始终如一地重现此行为。知道这是一个错误还是我做了一些禁忌?

$anew -match '((.*)+([v]\d{1}\.\d{1}\..*)$)'

$ anew是一个大约35行的数组,它保存来自服务器的配置转储。它看起来与此相似:

目录:\ aaa.net \ builds \ directedbuilds \ bbbb \ ccc \ dddd \ eee

模式LastWriteTime长度名称 ---- ------------- ------ ---- d ---- 10/15/2012 6:12 PM v2.1.0.69 环境:AB-34 Servers_in_Environment:SERVER01; SERVER02 NgatRootFolder:E:\ DIRNAME PFXfilename:star.dom.net.pfx 等...

1 个答案:

答案 0 :(得分:2)

您的模式以(.*)+开头,由于回溯,这可能会导致O(n 3 )性能。您应该使用(^(.*)([v]\d{1}\.\d{1}\..*)$)(没有额外的+,并且已锚定)以避免回溯评估速度非常慢的问题。