【发布时间】:2010-11-02 06:26:32
【问题描述】:
[^\x20-\x7E]
我看到这种模式用于正则表达式,其目标是删除非 ascii 字符串中的字符。什么意思?
【问题讨论】:
标签: regex
[^\x20-\x7E]
我看到这种模式用于正则表达式,其目标是删除非 ascii 字符串中的字符。什么意思?
【问题讨论】:
标签: regex
它表示类似:所有不在 (^) 范围内的字符 \x20-\x7E(十六进制 0x20 到 0x7E)。
根据http://www.asciitable.com/,这些是从空格到~的字符。
【讨论】:
括号 [] 中的脱字符 (^) 表示“不是”,\x20-\x7E 表示一段 ascii 字符,其中 \x20(空格)是范围的开头,\x7E(~ ) 结束。它基本上是任何不是字母、数字或普通标点符号的东西。
【讨论】:
这意味着匹配任何不是打印字符的字符。
打印字符包括a到z、A到Z、0到9以及“,;$#%等符号。
^ not
\x20 hex code for space character
- to
\x7e hex code for ~ (tilde) character
所有的 ascii 打印字符都介于这两者之间。
此语句匹配非 ascii 字符以及 ascii 控制(非打印)字符,例如 bell、tab、null 等。
看看
man ascii
在 unix 系统上查看它匹配的字符。
在 perl 中,你也可以写成
[^ -~]
或
[[:^cntrl:]]
最后一个略有不同,因为它匹配任何非控制字符,包括扩展 ascii(例如重音字符)和 unicode。
您可能不想只使用 ascii,因为非美国地区经常使用这个小范围之外的有效打印字符,例如øüéåç...
【讨论】:
它的意思是“任何不是十六进制范围 0x20 到 0x7E 的字符代码,即 32 到 126”。
【讨论】: