Как создать регулярное выражение, определяющее шестнадцатеричные числа в тексте?
Например, «0x0f4», «0acdadecf822eeff32aca5830e438cb54aa722e3» и «8BADF00D».
Как создать регулярное выражение, определяющее шестнадцатеричные числа в тексте?
Например, «0x0f4», «0acdadecf822eeff32aca5830e438cb54aa722e3» и «8BADF00D».
Ответы:
Как насчет следующего?
0[xX][0-9a-fA-F]+
Соответствует выражению, начинающемуся с 0, за которым следует либо нижний, либо верхний регистр x, за которым следует один или несколько символов в диапазоне 0–9, или af, или AF.
/0x[\da-f]/i
+1.
Точный синтаксис зависит от ваших требований и языка программирования, но в основном:
/[0-9a-fA-F]+/
или, проще говоря, i
делает его нечувствительным к регистру.
/[0-9a-f]+/i
Если вам посчастливилось использовать Ruby, вы можете:
/\h+/
ИЗМЕНИТЬ - Ответ Стивена Шредера заставил меня понять, что мое понимание бита 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:]]+/
Стоит отметить, что обнаружение MD5 (что является одним из примеров) может быть выполнено с помощью:
[0-9a-fA-F]{32}
Это будет соответствовать с 0x
префиксом или без него
(?:0[xX])?[0-9a-fA-F]+
Если вы используете Perl или PHP, вы можете заменить
[0-9a-fA-F]
с участием:
[[:xdigit:]]
Для протокола я бы уточнил следующее:
/^[xX]?[0-9a-fA-F]{6}$/
Который отличается тем, что он проверяет, что он должен содержать шесть действительных символов и строчные или прописные буквы x, если он у нас есть.
Если вы ищете определенный шестнадцатеричный символ в середине строки, вы можете использовать «\ xhh», где hh - это шестнадцатеричный символ. Я пробовал, и это работает. Я использую фреймворк для C ++ Qt, но он может решить проблемы в других случаях, в зависимости от того, какой вкус вам нужен (php, javascript, python, golang и т. Д.).
Этот ответ был взят из: http://ult-tex.net/info/perl/
Это гарантирует, что у вас не более трех действительных пар:
(([a-fA-F]|[0-9]){2}){3}
Любые более или менее трех пар действительных символов не совпадают.
Другой пример: шестнадцатеричные значения для цветов css начинаются со знака решетки или решетки (#), а затем шести символов, которые могут быть цифрой или буквой от A до F включительно.
^#[0-9a-fA-F]{6}
В случае, если вам это нужно внутри ввода, где пользователь может ввести 0
и 0x
тоже, но не шестнадцатеричное число без 0x
префикса:
^0?[xX]?[0-9a-fA-F]*$