gpt4 book ai didi

regex - PowerShell 条件效率 : -match vs. -like

转载 作者:行者123 更新时间:2023-12-03 00:26:54 24 4
gpt4 key购买 nike

我有一个简单的 Powershell 脚本,它使用一些过滤器收集 Exchange 邮件跟踪结果,然后返回主题中带有“*SPAM*”的项目。为此,我采用一组 Microsoft.Exchange.Management.TransportLogSearchTasks.MessageTrackingEvent 对象并将其通过管道传送到检查每个条目的 MessageSubject 属性的“位置”。

我发现当我使用以下内容比较 MessageSubject 属性时,代码需要很长时间(小时)才能完成约 70,000 条记录:

($_.messagesubject -like '`*SPAM`*')

但是,当我使用以下内容时,完成时间以秒为单位:

($_.messagesubject -match [regex]'^\*SPAM\*.*$')

我正在努力确定前者需要更长处理时间的具体原因。两种方法都不需要循环相同数量的对象吗?逐字符比较(for -like)与编译正则表达式的区别是什么? (用于匹配)

最佳答案

您确定切换运算符是版本之间唯一变化的东西吗?根据以下测试,运算符(operator)的性能不是问题。此外,正则表达式是最长的。我也相信您使用的类似模式是错误的,您需要转义星号,因为它们是特殊的通配符(参见 $sb4)。

PS> $msg = "just a sample spam message for testing"

PS> $sb1 = { 1..70000 | foreach {$msg -match [regex]'^\*SPAM\*.*$' } }
PS> $sb2 = { 1..70000 | foreach {$msg -match 'spam'} }
PS> $sb3 = { 1..70000 | foreach {$msg -like "*spam*" } }
PS> $sb4 = { 1..70000 | foreach {$msg -like "`*spam`*" } }

PS> (measure-command $sb1).TotalSeconds
8.1869412

PS> (measure-command $sb2).TotalSeconds
6.7244995

PS> (measure-command $sb3).TotalSeconds
7.9287195

PS> (measure-command $sb4).TotalSeconds
6.9678701

关于regex - PowerShell 条件效率 : -match vs. -like,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10603114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com