Regex на самом деле не разбирает. Попробуйте извлечь все числа, похожие на числа, и отсеять те, которые не являются шестнадцатеричными.
Blender
Ответы:
195
Как насчет следующего?
0[xX][0-9a-fA-F]+
Соответствует выражению, начинающемуся с 0, за которым следует либо нижний, либо верхний регистр x, за которым следует один или несколько символов в диапазоне 0–9, или af, или AF.
@NiklasB. Ваша стенография действительна только при использовании регулярного выражения Perl, при использовании регулярного выражения POSIX решение Стивена является самым коротким. В любом случае решение Стивена работает как для регулярных выражений Perl, так и для POSIX.
Дэвид М. Сыздек
Понял! Решение Стивена хорошо, если шестнадцатеричное число начинается с 0x или 0X. Этот должен работать лучше: ^ [0-9A-F] + $ Он также может распознавать шестнадцатеричные шаблоны, такие как: '535GH0G73'. Для Java мы можем использовать, например, String.matches () для проверки этого .. Спасибо, ребята, за ответ :)
saurcery
2
'0x [\ da-f] {2}', возможно, лучше также ограничить число
Язан Равашдех
2
Соответствует ли это второму и третьему примерам чисел, 0acdadecf822eeff32aca5830e438cb54aa722e3 и 8BADF00D?
Питер Мортенсен
45
Точный синтаксис зависит от ваших требований и языка программирования, но в основном:
/[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 должен быть необязательным (как следует из вопроса):
вы можете мне объяснить причину вышеупомянутого RE?
магазинчик
4
@noobDroid Что конкретно вы хотите, чтобы я объяснил?
SimonMayer
18
Ничего страшного, но большинство движков регулярных выражений поддерживают классы символов POSIX, и есть [:xdigit:]для сопоставления шестнадцатеричных символов, что проще, чем обычные 0-9a-fA-Fвещи.
Итак, регулярное выражение по запросу (т.е. с необязательным 0x):/(0x)?[[:xdigit:]]+/
Если вы ищете определенный шестнадцатеричный символ в середине строки, вы можете использовать «\ xhh», где hh - это шестнадцатеричный символ. Я пробовал, и это работает. Я использую фреймворк для C ++ Qt, но он может решить проблемы в других случаях, в зависимости от того, какой вкус вам нужен (php, javascript, python, golang и т. Д.).
Привет! Хотя это может быть верно для Perl, похоже, что это не относится к регулярным выражениям во всех языках программирования. По этому\x эквивалентно на \uдругих языках.
Морис
Что такое «особенная анда»?
Питер Мортенсен
1
Это гарантирует, что у вас не более трех действительных пар:
(([a-fA-F]|[0-9]){2}){3}
Любые более или менее трех пар действительных символов не совпадают.
Другой пример: шестнадцатеричные значения для цветов css начинаются со знака решетки или решетки (#), а затем шести символов, которые могут быть цифрой или буквой от A до F включительно.
Ответы:
Как насчет следующего?
Соответствует выражению, начинающемуся с 0, за которым следует либо нижний, либо верхний регистр x, за которым следует один или несколько символов в диапазоне 0–9, или af, или AF.
источник
/0x[\da-f]/i
+1.Точный синтаксис зависит от ваших требований и языка программирования, но в основном:
или, проще говоря,
i
делает его нечувствительным к регистру.Если вам посчастливилось использовать Ruby, вы можете:
ИЗМЕНИТЬ - Ответ Стивена Шредера заставил меня понять, что мое понимание бита 0x было неправильным, поэтому я соответствующим образом обновил свои предложения. Если вы также хотите сопоставить 0x, эквиваленты:
ДОБАВЛЕНО - Если 0x должен быть необязательным (как следует из вопроса):
источник
Ничего страшного, но большинство движков регулярных выражений поддерживают классы символов POSIX, и есть
[:xdigit:]
для сопоставления шестнадцатеричных символов, что проще, чем обычные0-9a-fA-F
вещи.Итак, регулярное выражение по запросу (т.е. с необязательным
0x
):/(0x)?[[:xdigit:]]+/
источник
Стоит отметить, что обнаружение MD5 (что является одним из примеров) может быть выполнено с помощью:
источник
Это будет соответствовать с
0x
префиксом или без него(?:0[xX])?[0-9a-fA-F]+
источник
Если вы используете Perl или PHP, вы можете заменить
с участием:
источник
Для протокола я бы уточнил следующее:
Который отличается тем, что он проверяет, что он должен содержать шесть действительных символов и строчные или прописные буквы x, если он у нас есть.
источник
Если вы ищете определенный шестнадцатеричный символ в середине строки, вы можете использовать «\ xhh», где hh - это шестнадцатеричный символ. Я пробовал, и это работает. Я использую фреймворк для C ++ Qt, но он может решить проблемы в других случаях, в зависимости от того, какой вкус вам нужен (php, javascript, python, golang и т. Д.).
Этот ответ был взят из: http://ult-tex.net/info/perl/
источник
\x
эквивалентно на\u
других языках.Это гарантирует, что у вас не более трех действительных пар:
Любые более или менее трех пар действительных символов не совпадают.
источник
Другой пример: шестнадцатеричные значения для цветов css начинаются со знака решетки или решетки (#), а затем шести символов, которые могут быть цифрой или буквой от A до F включительно.
источник
В случае, если вам это нужно внутри ввода, где пользователь может ввести
0
и0x
тоже, но не шестнадцатеричное число без0x
префикса:источник