我在Code Golf Challenge上看到了这个powershell代码,用于删除所有不可打印的字符:
$text -replace "[^ -x7e]",""
应该这样做:
$text -replace "[^ \x21-\x7E]",""
我理解第二个表达式是什么,而不是第一个表达式如何使它成为同一个。
我的问题是:¿为什么第一个表达式在破折号之前什么都没有? (这是什么意思?)和¿为什么x7E之前没有反斜杠?
有人可以详细解释第一个表达吗?谢谢! :)
答案 0 :(得分:3)
[^ -x7e]
与[^\x20-x7e]
相同
那是因为空间的unicode是32.而Hexadecimall系统中的32是20
。
因此,不要使用空间转义序列,只需按原样使用空格即可。
在[^ \x21-x7e]
中,在开头有一个空格,除了空格或范围\x21-x7e
之外的任何东西。
这是多余的,因为你可以做\x20-x7e
答案 1 :(得分:1)
它在破折号之前有一些东西。它有一个空间。
删除空格,我希望它不会以相同的方式运行(它可能会被视为四个字符:短划线,x
,7
和e
但我和#39 ;我不确定。)
空格的十六进制值为x20
。所以[^ x21-x7e]
因此您可以通过删除显式x21
来将范围向下扩展一个。