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

Как создать регулярное выражение, которое определяет шестнадцатеричные числа в тексте?

Например, '0x0f4,' 0acdadecf822eeff32aca5830e438cb54aa722e3 и '8BADF00D.

Ответ 1

Как насчет следующего?

0[xX][0-9a-fA-F]+

Соответствует выражению, начинающемуся с 0, следуя либо нижнему, либо верхнему регистру x, за которым следуют один или несколько символов в диапазонах 0-9 или a-f или A-F

Ответ 2

Точный синтаксис зависит от ваших точных требований и языка программирования, но в основном:

/[0-9a-fA-F]+/

или более просто, i делает регистр нечувствительным к регистру.

/[0-9a-f]+/i

Если вам посчастливилось использовать Ruby, вы можете сделать:

/\h+/

EDIT - ответ Стивена Шредера заставил меня понять, что мое понимание 0x бит было неправильным, поэтому я обновил свои предложения соответственно. Если вы также хотите совместить 0x, эквиваленты

/0[xX][0-9a-fA-F]+/
/0x[0-9a-f]+/i
/0x[\h]+/i

ДОБАВИТЬ БОЛЬШЕ. Если 0x должно быть необязательным (как следует из вопроса):

/(0x)?[0-9a-f]+/i

Ответ 3

Неважно, но большинство движков регулярных выражений поддерживают классы символов POSIX, а там [:xdigit:] для сопоставления шестнадцатеричных символов, что проще, чем обычный материал 0-9a-fA-F.

Итак, регулярное выражение в соответствии с запросом (т.е. с опциональным 0x): /(0x)?[[:xdigit:]]+/

Ответ 4

Это будет соответствовать префиксу 0x или без него

(?:0[xX])?[0-9a-fA-F]+

Ответ 5

Следует отметить, что обнаружение MD5 (который является одним из примеров) может быть выполнено с помощью

[0-9a-fA-F]{32}

Ответ 6

Если вы используете Perl или PHP, вы можете заменить

[0-9a-fA-F]

с:

[[:xdigit:]]

Ответ 7

Только для записи я бы указал следующее:

/^[xX]?[0-9a-fA-F]{6}$/

Что отличается тем, что он проверяет, что он имеет, чтобы содержать шесть действительных символов, а в нижнем и верхнем регистре x, если у нас есть один.

Ответ 8

Если вы ищете определенный шестнадцатеричный символ в середине строки, вы можете использовать "\ xhh", где hh - символ в шестнадцатеричном формате. Я пробовал и работает. Я использую фреймворк для С++ Qt, но он может решать проблемы в других случаях, зависит от вкуса, который вам нужно использовать (php, javascript, python, golang и т.д.).

Этот ответ был взят из: http://ult-tex.net/info/perl/

Ответ 9

Это гарантирует, что у вас есть не более трех допустимых пар:

(([a-fA-F]|[0-9]){2}){3}

Невозможно сопоставить любые или более трех пар допустимых символов.