如何构建匹配十六进制数字的正则表达式?

时间:2014-08-11 08:23:20

标签: java regex hex hexdump

我正在尝试为字节序列创建一个正则表达式。序列是来自用户的输入字符串,例如:

00 a5 88

正则表达式应检查输入是否是正确的字节序列。所以这不应该是可能的:

00 0 66

但这两个应该:

a b
a 05 b

到目前为止,我有这个正则表达式:

(^[a-fA-F\\d]{1,2})((\\s[a-fA-F\\d]{2})*)

问题是结束。

这适用于0145 452但不适用于45 44 54 00 55 4

我尝试了这个:(^[a-fA-F\\d]{1,2})((\\s[a-fA-F\\d]{2})*)([a-fA-F\\d]{1,2}$)

但我的想法并没有发挥作用。

Ihe输入应该是十六进制字节,因为之后我在转储字符串中搜索此输入,看起来像这样:

Hexdump screenshot

这对我很有用:

BYTE_REGEX = "(^(\\p{XDigit}{1,2}))(\\s\\p{XDigit}{2})*(\\s\\p{XDigit})?";

2 个答案:

答案 0 :(得分:0)

这是128字节的正则表达式,表示为十六进制:

^([0-9|a-f|A-F][0-9|a-f|A-F]){1,64}$

如果你想要X字节,只需将X / 2值放在正则表达式中:

^([0-9|a-f|A-F][0-9|a-f|A-F]){1,X/2}$

答案 1 :(得分:0)

我应该使用的东西:

BYTE_REGEX ="(^ \ s *(\ p {XDigit} {1,2}))(\ s + \ p {XDigit} {2})*(\ s + \ p {XDigit})? &#34 ;;

这是你自己的一个小变化,允许:

  • 字符串开头的空格(不确定是否有用)
  • 多个空格作为删除者

因为转储通常每行显示16个字节,按4或8分组,组之间的间隔较大。