Windows判断一个字符串是否纯十六进制数
#include <regex> using namespace std; bool IsHexDigit(const TCHAR* s) { TCHAR* pattern = _T("^0[xX][0-9A-Fa-f]+$|^[0-9A-Fa-f]+$"); #ifdef UNICODE std::wregex re(pattern); #else std::regex re(pattern); #endif // UNICODE return std::regex_match(s, re); }
这个正则表达式“^0[xX][0-9A-Fa-f]+$|^[0-9A-Fa-f]+$
”用于匹配十六进制数,并可以忽略大小写。让我们分解这个正则表达式的每一部分:
^
: 匹配字符串的开始。0[xX]
: 匹配字符 "0" 后跟 "x" 或 "X"。这用于匹配十六进制数的前缀 "0x"。[0-9A-Fa-f]+
: 匹配一个或多个十六进制数字。这包括数字 0-9 和字母 A-F(不区分大小写)。$
: 匹配字符串的结束。|
: 逻辑或,用于分隔两个不同的匹配模式。^[0-9A-Fa-f]+$
: 这与前面的模式相似,但不需要 "0x" 前缀。
所以,这个正则表达式可以匹配两种情况:
- 以 "0x"(或0X) 开头的十六进制数,如 "0x1A"。
- 不带 "0x"(或0X) 前缀的十六进制数,如 "1A"。
注意:这个正则表达式仅适用于以十六进制表示的整数。如果你想匹配包含字母的十六进制字符串(例如十六进制颜色代码或十六进制编码),则需要使用不同的正则表达式。