Bad*_*Bad 3 regex powershell match
阅读官方文档,很明显PowerShell -match
运算符比-like
(由于正则表达式)功能更强大。其次,根据本文https://www.pluralsight.com/blog/software-development/powershell-operators-like-match,它的速度似乎提高了约10倍。
在某些情况下,我应该首选-like
而不是-match
?如果没有,我为什么要使用-like
?是否由于历史原因而存在?
简而言之,如果您正在考虑,“ 我可能需要通配符才能找到该项目 ”,然后从开始
-Like
。但是,如果您确定要查找的单词中的大多数字母,那么最好尝试一下-Match
。这是一个更技术上的区别:
-Match
是正则表达式,而-Like
只是通配符比较,是的子集-Match
。
因此,每当您不确定什么字符类别(例如,数字,字母,标点符号等)可以包含在其中时,当您只想匹配任何字符时,都应使用-Like
其通配符。
如果您知道开头必须有一个数字,然后是1+个冒号序列,然后是字母数字字符,直到字符串的末尾,请使用-Match
其强大的正则表达式。
我从来没有见过-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)