请详细解释这个正则表达式(Powershell)

时间:2015-04-15 16:38:49

标签: regex powershell

我在Code Golf Challenge上看到了这个powershell代码,用于删除所有不可打印的字符:

$text -replace "[^ -x7e]",""

应该这样做:

$text -replace "[^ \x21-\x7E]",""

我理解第二个表达式是什么,而不是第一个表达式如何使它成为同一个。

我的问题是:¿为什么第一个表达式在破折号之前什么都没有? (这是什么意思?)和¿为什么x7E之前没有反斜杠?

有人可以详细解释第一个表达吗?谢谢! :)

2 个答案:

答案 0 :(得分:3)

[^ -x7e][^\x20-x7e]相同  那是因为空间的unicode是32.而Hexadecimall系统中的32是20
因此,不要使用空间转义序列,只需按原样使用空格即可。

[^ \x21-x7e]中,在开头有一个空格,除了空格或范围\x21-x7e之外的任何东西。  这是多余的,因为你可以做\x20-x7e

答案 1 :(得分:1)

它在破折号之前有一些东西。它有一个空间。

删除空格,我希望它不会以相同的方式运行(它可能会被视为四个字符:短划线,x7e但我和#39 ;我不确定。)

空格的十六进制值为x20。所以[^ x21-x7e]因此您可以通过删除显式x21来将范围向下扩展一个。