2011-12-29 33 views
1

在Perl中我试图使用正则表达式搜索特定的十六进制字符,但我不确定xB语法是否有效(即指垂直制表符)还是它应该是\ B?此外,是X9有效或应该只是9?Perl正则表达式的单个字母十六进制的语法

perl -ane '{ if(m/([\x0-\x9]|[\xB-\xC]|[\xE-\x1F]|[\x7F-\xFF])/) { print } }' 
+0

“十六进制字符”是什么意思? '[0-9A-发F]'?或者某些定义的字符集中的特定值? – 2011-12-29 12:53:40

+0

十六进制字符 – toop 2011-12-29 12:58:08

+2

一切都是十六进制。 'Z'在我的系统中是0x7A。你想匹配'Z'吗?或者你想匹配代表*十六进制值的字符吗?你想用什么?对? 00 01 02 ... C风格? (0xAA,0xFF)主机风格? (x'00,x'FF)? – 2011-12-29 13:02:46

回答

5
perl -lne 'print if /[\x00-\x09\x0b\x0c\x0e-\x1f\x7f-\xff]/' 

记录在http://perldoc.perl.org/perlrecharclass.html#Bracketed-Character-Classes

[某些序列,包括] \ X也特殊,并且具有相同的含义,因为他们做一个括号字符类的外部。

+1

为了更直接地回答部分问题(它隐含在你的答案中):不应该使用'\ x9';而是拼写为'\ x09'或'\ x {9}'。 – hobbs 2011-12-29 14:55:10