【发布时间】:2014-08-11 08:23:20
【问题描述】:
我正在尝试为字节序列创建一个正则表达式。序列是来自用户的输入字符串,例如:
00 a5 88
正则表达式应该检查输入是否是正确的字节序列。因此,例如,这应该是不可能的:
00 0 66
但这两个应该:
a b
a 05 b
到目前为止,我有这个正则表达式:
(^[a-fA-F\\d]{1,2})((\\s[a-fA-F\\d]{2})*)
问题到此为止。
这适用于 01 或 45 45 或 2 但不适用于 45 4 或 4 5 或 4 00 55 4
我试过了:(^[a-fA-F\\d]{1,2})((\\s[a-fA-F\\d]{2})*)([a-fA-F\\d]{1,2}$)
但不是我想的那样。
我的输入应该是十六进制字节,因为之后我在一个看起来像这样的转储字符串中搜索这个输入:
这对我来说非常适合:
BYTE_REGEX = "(^(\\p{XDigit}{1,2}))(\\s\\p{XDigit}{2})*(\\s\\p{XDigit})?";
【问题讨论】:
-
“正确”是什么意思?为什么“00 0 66”无效而“00 a5 88”有效?
-
你试过解析十六进制吗?如果它失败或超出范围,它不是一个正确的序列......或者这是一个正则表达式的赋值:)
-
\p{XDigit}{1,2}( \p{XDigit}{2})*( \p{XDigit})?怎么样