Регулярное выражение для сопоставления шестнадцатеричных чисел?

#c# #regex #hex #match

#c# #регулярное выражение #шестнадцатеричное #совпадение

Вопрос:

Итак, я пытаюсь выяснить, как использовать регулярное выражение для сопоставления шестнадцатеричной строки. Текущее регулярное выражение, которое я использую, является:

 [^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

Ответ №1:

Это будет соответствовать номеру по номеру:

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

Онлайн-пример

Это будет соответствовать всей строке:

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

Онлайн-пример

Ответ №2:

Я немного смущен тем, как ваше регулярное выражение совпадает 50 , и не только 5 . Но в целом проблема с вашим регулярным выражением заключается в том, что оно просто выполняется, пока не достигнет 0, и вы хотите, чтобы оно продолжалось, пока вы не нажмете два последовательных нуля. Стандартный способ сделать это — осмотр:

 . ?(?= 00)
  

. Будет соответствовать любым символам как можно дольше. Вторая часть регулярного выражения (называемая положительным прогнозом) выполняет поиск двух нулей и завершает сопоставление непосредственно перед появлением 00 . Причина выполнения . ? вместо just . заключается в том, что последнее будет соответствовать всему до последнего 00 , тогда как вам нужно все только до первого 00 . ? Преобразует . в отложенное регулярное выражение, поэтому оно соответствует минимально необходимому, а не максимально возможному. В этом случае это означает, что оно будет совпадать до первого 00 , а не до последнего 00 .

Обратите внимание, что внутри обзора я включил пробел, чтобы ваше совпадение не включало пробел в конце строки. Не уверен, имеет ли это значение для вас.

Комментарии:

1. кроме того, вы правы, он соответствовал только 5 идентификаторам повторите, если бы я мог, я только что создал свою учетную запись, поэтому я не могу и благодарю вас за объяснение того, как это работает, теперь я лучше понимаю регулярное выражение

2. Нет проблем, рад, что помогло

Ответ №3:

Вы можете написать что-то вроде этого:

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

В котором говорится

  1. Отклонить, если оно начинается с 00
  2. Принять, если значение равно 0-9 или A-F
  3. Возьмите два символа