正则表达式中[^\x20-\x7E]的用途

Ger*_*ton 40 regex

 [^\x20-\x7E]
Run Code Online (Sandbox Code Playgroud)

我看到这个模式用于正则表达式,其目标是从字符串中删除非ascii字符.这是什么意思?

Fla*_*tef 45

它说是这样的:这不是(所有字符^范围内)\x20-\x7E(十六进制0x200x7E).

根据http://www.asciitable.com/,这些是从太空到角色的角色~.

  • 即可打印的字符 (8认同)

Ale*_*own 8

它表示匹配任何不打印字符的字符.

打印字符包括a到z,A到Z,0到9以及符号,例如",; $#%等.

^ not
\x20 hex code for space character
- to 
\x7e hex code for ~ (tilde) character
Run Code Online (Sandbox Code Playgroud)

所有ascii打印字符都介于这两者之间.

此语句匹配非ascii字符以及ascii控件(非打印)字符,如bell,tab,null等.

看着

man ascii
Run Code Online (Sandbox Code Playgroud)

在unix系统上查看它匹配的字符.

在perl中,您也可以将其写为

[^ -~]
Run Code Online (Sandbox Code Playgroud)

要么

[[:^cntrl:]]
Run Code Online (Sandbox Code Playgroud)

最后一个略有不同,因为它匹配任何非控制字符,包括扩展的ascii(例如重音字符)和unicode.

您可能不希望仅限于ascii,因为非美国地区通常使用此小范围之外的有效打印字符,例如øüéåç...