#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}
В котором говорится
- Отклонить, если оно начинается с 00
- Принять, если значение равно 0-9 или A-F
- Возьмите два символа