Regex для соответствия четным шестнадцатеричным числам в Tcl?

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


person Community    schedule 31.03.2011    source источник
comment
Шестнадцатеричный номер легко. Проверка ровности по-прежнему возможна (на самом деле, все еще легко), потому что последняя цифра определяет это, но в целом вы должны прочитать stackoverflow.com/questions/4098086/ и прислушаться к его мудрости.   -  person    schedule 31.03.2011


Ответы (2)


Этот код tcl сделает работу:

if {[regexp -linestop -nocase {^[\da-f]*[02468ace]$} $input]} {
    # Success
} else {
    # Fail
}

Обратите внимание, что a, c и e также являются четными числами, и вам нужно -nocase, чтобы соответствовать a-f, а также AF.

person Staffan Nöteberg    schedule 31.03.2011
comment
Я добавил фигурные скобки вокруг условия if, чтобы отложить оценку. - person glenn jackman; 01.04.2011
comment
Вам, вероятно, не нужно -linestop; поведение по умолчанию «совпадение со всей строкой» подходит для такого рода задач. - person Donal Fellows; 02.04.2011

Это должно быть регулярное выражение?

proc is_even {n} {expr {($n & 1) == 0}}

if {[is_even 0xdeadbeef]} {puts even} else {puts odd}
person glenn jackman    schedule 31.03.2011