PowerShell-匹配与-like

Bad*_*Bad 3 regex powershell match

阅读官方文档,很明显PowerShell -match运算符比-like(由于正则表达式)功能更强大。其次,根据本文https://www.pluralsight.com/blog/software-development/powershell-operators-like-match,它的速度似乎提高了约10倍。

在某些情况下,我应该首选-like而不是-match?如果没有,我为什么要使用-like?是否由于历史原因而存在?

Wik*_*żew 5

请参阅之间的差异-Like-Match

简而言之,如果您正在考虑,“ 我可能需要通配符才能找到该项目 ”,然后从开始-Like。但是,如果您确定要查找的单词中的大多数字母,那么最好尝试一下-Match

这是一个更技术上的区别:-Match是正则表达式,而-Like只是通配符比较,是的子集-Match

因此,每当您不确定什么字符类别(例如,数字,字母,标点符号等)可以包含在其中时,当您只想匹配任何字符时,都应使用-Like通配符

如果您知道开头必须有一个数字,然后是1+个冒号序列,然后是字母数字字符,直到字符串的末尾,请使用-Match其强大的正则表达式


mjo*_*nor 5

我从来没有见过-match比更快的测试速度-like。通常我看到的-like速度大致相同或更好。

但是我从不依赖一个测试实例,通常每个实例要运行一万次。

如果您正在寻找性能,请始终选择符合要求的字符串方法:

$string = '123abc'    

(measure-command {
for ($i=0;$i -lt 1e5;$i++)
 {$string.contains('3ab')}
}).totalmilliseconds

(measure-command {
for ($i=0;$i -lt 1e5;$i++)
 {$string -like '*3ab*'}
}).totalmilliseconds

(measure-command {
for ($i=0;$i -lt 1e5;$i++)
 {$string -match '3ab'}
}).totalmilliseconds

265.3494
586.424
646.4878
Run Code Online (Sandbox Code Playgroud)