Шаблоны глобусов в Tcl намного проще, чем регулярные выражения. Все, что они поддерживают:
*
для обозначения любого числа любых символов. ?
для обозначения любого отдельного символа. […]
для означает любой одиночный символ из набора (символы в скобках, которые могут включать диапазоны). \x
означает буквальный x
(который может быть любым символом). Вот как вы помещаете метасимвол глобуса в шаблон глобуса.
Они также всегда привязаны к обоим концам. (Регулярные выражения намного мощнее. Они также медленнее. Вы платите за мощность.)
Чтобы сопоставить шестнадцатеричные числа, такие как 0xF00d
, вы должны использовать такой шаблон глобуса:
0x[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]
(или, как фактическая команда Tcl; мы помещаем образец в {
фигурные скобки }
, чтобы избежать необходимости использовать множество обратных косых черт для всех скобок ...)
string match {0x[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]} $value
Обратите внимание, что у нас есть чтобы соответствовать точному количеству символов. (Вы можете сократить шаблон, используя сопоставление без учета регистра, до 0x[0-9a-f][0-9a-f][0-9a-f][0-9a-f]
.)
Сопоставление шестнадцатеричных чисел лучше выполнять с помощью regexp
или scan
(который также анализирует шестнадцатеричное число). Все любят забывать scan
для парсинга, но у него неплохо получается ...
regexp {^0x([[:xdigit:]]+)$} $value -> theHexDigits
scan $value "0x%x" theParsedValue