所以我试图弄清楚如何使用正则表达式匹配十六进制字符串。我正在使用的当前正则表达式是:
[^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
答案 0 :(得分:5)
答案 1 :(得分:1)
我对你的正则表达式如何与50
匹配而不仅仅是5
有点困惑。但总的来说,你的正则表达式的问题在于它只是在它达到0之前,你想要的是它直到你连续两个零。执行此操作的标准方法是环顾四周:
.+?(?= 00)
.+
将尽可能匹配任何字符。正则表达式的第二部分(称为正向前瞻)搜索两个零,并在00
出现之前终止匹配。执行.+?
而不仅仅是.+
的原因是后者将匹配所有内容直到最后00
,而您只需要一直到第一个00
。 ?
将.+
转换为惰性正则表达式,因此它匹配所需的最小值而不是最大值。在这种情况下,这意味着它将匹配到第一个00
而不是最后一个00
。
请注意,在环视中我添加了一个空格,以便您的匹配不会在字符串末尾包含空格。不确定这对你是否重要。
答案 2 :(得分:0)
你可以这样写:
(?!00)[0-9A-F]{2}
其中说
答案 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.