用于匹配十六进制数的正则表达式?

时间:2016-10-18 02:29:53

标签: c# regex hex match

所以我试图弄清楚如何使用正则表达式匹配十六进制字符串。我正在使用的当前正则表达式是:

[^0]+

我希望它匹配:50 6C 65 63 74 72 6F 6E 73 给出:

50 6C 65 63 74 72 6F 6E 73 00 00 00 00 00 00 00 
64 35 75 73 70 73 34 00 01 00 00 00 00 00 00 00 
52 61 79 74 69 6E 00 00 00 00 00 00 00 00 00 00 
63 38 63 61 70 73 34 00 01 00 00 00 00 00 00 00 
92 B6 B3 F5 00 00 00 01 8A 68 58 DD 00 00 00 00 
00 00 00 00 

但它只匹配50

当使用这个十六进制字符串时,它按照我想要的方式工作:

52 61 79 74 69 6E 00 00 00 00 00 00 00 00 00 00 
63 38 63 61 70 73 34 00 01 00 00 00 00 00 00 00 
52 69 70 74 69 64 65 31 30 33 30 00 00 00 00 00 
64 32 75 73 70 73 34 00 01 00 00 00 00 00 00 00 
B3 F4 0A 88 00 00 00 1F C0 95 41 99 00 00 00 00 
00 00 00 00 

匹配52 61 79 74 69 6E

4 个答案:

答案 0 :(得分:5)

这将匹配数字:

[a-fA-F0-9]{2}

Online example

这将匹配整个字符串:

^([a-fA-F0-9]{2}\s+)+

Online example

答案 1 :(得分:1)

我对你的正则表达式如何与50匹配而不仅仅是5有点困惑。但总的来说,你的正则表达式的问题在于它只是在它达到0之前,你想要的是它直到你连续两个零。执行此操作的标准方法是环顾四周:

.+?(?= 00)

.+将尽可能匹配任何字符。正则表达式的第二部分(称为正向前瞻)搜索两个零,并在00出现之前终止匹配。执行.+?而不仅仅是.+的原因是后者将匹配所有内容直到最后00,而您只需要一直到第一个00?.+转换为惰性正则表达式,因此它匹配所需的最小值而不是最大值。在这种情况下,这意味着它将匹配到第一个00而不是最后一个00

请注意,在环视中我添加了一个空格,以便您的匹配不会在字符串末尾包含空格。不确定这对你是否重要。

答案 2 :(得分:0)

你可以这样写:

(?!00)[0-9A-F]{2}

其中说

  1. 如果以00
  2. 开头则拒绝
  3. 如果值为0-9或A-F
  4. ,则接受
  5. 取两个字符

答案 3 :(得分:0)

如果你想匹配

50 6C 65 63 74 72 6F 6E 73

然后使用此正则表达式

(50|6C|65|63|74|72|6F|6E|73)

或者这个

[5-7][C|F|E|0|2-5]

这是在线example.

相关问题