2011-12-29 34 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