Как создать регулярное выражение, которое определяет шестнадцатеричные числа в тексте?
Например, '0x0f4,' 0acdadecf822eeff32aca5830e438cb54aa722e3 и '8BADF00D.
Как создать регулярное выражение, которое определяет шестнадцатеричные числа в тексте?
Например, '0x0f4,' 0acdadecf822eeff32aca5830e438cb54aa722e3 и '8BADF00D.
Как насчет следующего?
0[xX][0-9a-fA-F]+
Соответствует выражению, начинающемуся с 0, следуя либо нижнему, либо верхнему регистру x, за которым следуют один или несколько символов в диапазонах 0-9 или a-f или A-F
Точный синтаксис зависит от ваших точных требований и языка программирования, но в основном:
/[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
Неважно, но большинство движков регулярных выражений поддерживают классы символов POSIX, а там [:xdigit:]
для сопоставления шестнадцатеричных символов, что проще, чем обычный материал 0-9a-fA-F
.
Итак, регулярное выражение в соответствии с запросом (т.е. с опциональным 0x
): /(0x)?[[:xdigit:]]+/
Это будет соответствовать префиксу 0x
или без него
(?:0[xX])?[0-9a-fA-F]+
Следует отметить, что обнаружение MD5 (который является одним из примеров) может быть выполнено с помощью
[0-9a-fA-F]{32}
Если вы используете Perl или PHP, вы можете заменить
[0-9a-fA-F]
с:
[[:xdigit:]]
Только для записи я бы указал следующее:
/^[xX]?[0-9a-fA-F]{6}$/
Что отличается тем, что он проверяет, что он имеет, чтобы содержать шесть действительных символов, а в нижнем и верхнем регистре x, если у нас есть один.
Если вы ищете определенный шестнадцатеричный символ в середине строки, вы можете использовать "\ xhh", где hh - символ в шестнадцатеричном формате. Я пробовал и работает. Я использую фреймворк для С++ Qt, но он может решать проблемы в других случаях, зависит от вкуса, который вам нужно использовать (php, javascript, python, golang и т.д.).
Этот ответ был взят из: http://ult-tex.net/info/perl/
Это гарантирует, что у вас есть не более трех допустимых пар:
(([a-fA-F]|[0-9]){2}){3}
Невозможно сопоставить любые или более трех пар допустимых символов.