我已经在Code Golf Challenge上看到了此powershell代码,以删除所有不可打印的字符:$text -replace "[^ -x7e]",""
应该这样做:$text -replace "[^ \x21-\x7E]",""
我了解是什么使第二个表达式产生,但不了解第一个表达式如何使相同。
我的问题是:¿为什么第一个表达式在破折号前什么都没有? (这是什么意思?)和¿为什么在x7E之前没有反斜杠?
有人可以详细解释第一个表达方式吗?谢谢! :)
最佳答案
[^ -x7e]
与[^\x20-x7e]
相同。
那是因为空间的unicode是32。而Hexadecimall系统中的32是20
。
因此,您不必按原样使用空格,而不必使用空格转义序列。
在[^ \x21-x7e]
中,开头有一个空格,表示除空格或\x21-x7e
范围内的任何内容以外的任何内容。
这是非常多余的,因为您可以执行\x20-x7e
关于regex - 请详细解释此正则表达式(Powershell),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29655961/