为什么PowerShell中的空字符串不匹配正则表达式'\s*'?
为什么空字符串没有被
'\s*'匹配过滤? 核心原因
你混淆了PowerShell的字符串比较运算符和正则匹配运算符:
-ne是逐字字符串比较运算符,执行完全字面量匹配,你写的$_ -ne '\s*'只是判断当前字符串是不是和字面量\s*完全相等,不会把\s*当作正则规则解析。- 你贴的第二段代码运行结果完全符合该逻辑:
''、now、is都不等于字面量\s*,所以三个元素都被输出,和你观察到的结果一致。
正确实现方式
如果要按照正则规则过滤掉空字符串、全空白字符串,需要使用正则匹配运算符 -notmatch,并且加上首尾定位符确保匹配整个字符串:
@('now','','is') | ?{ $_ -notmatch '^\s*$' }
运行后输出结果为:
now is
和预期完全一致。
内容的提问来源于stack exchange,提问作者lit
相关产品推荐
相关产品推荐

