【问题标题】:Perl regex syntax for single letter hex单字母十六进制的 Perl 正则表达式语法
【发布时间】:2012-01-29 21:07:44
【问题描述】:

在 perl 中,我尝试使用正则表达式搜索特定的十六进制字符,但我不确定 xB 语法是否有效(即引用垂直制表符)还是应该只是 \B?另外,x9 有效还是应该只是 9?

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

【问题讨论】:

  • “十六进制字符”是什么意思? [0-9A-Fa-f]?还是某些已定义字符集中的特定值?
  • 你到底想匹配什么?标签是\x09
  • 垂直标签是\x0B
  • 一切都是十六进制的。 'Z' 在我的系统中是 0x7A。你想匹配'Z'吗?或者您想匹配表示十六进制值的字符?你想用什么?对? 00 01 02... C 风格? (0xAA, 0xFF) 大型机风格? (x'00, x'FF)?
  • 如果我输入 x1F 那么我想匹配单位分隔符

标签: linux perl shell unix scripting


【解决方案1】:
perl -lne 'print if /[\x00-\x09\x0b\x0c\x0e-\x1f\x7f-\xff]/'

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

[一些序列,包括] \x 也很特殊,并且与括号字符类之外的含义相同。

【讨论】:

  • 为了更直接地回答部分问题(它隐含在您的回答中):不应该使用\x9;而是拼写为\x09\x{9}
猜你喜欢
  • 1970-01-01
  • 2014-03-05
  • 2019-04-25
  • 2017-02-27
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多