我已经在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/

10-11 04:07