Windows判断一个字符串是否纯十六进制数

发布时间 2023-12-28 10:41:46作者: 快雪
#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]+$”用于匹配十六进制数,并可以忽略大小写。让我们分解这个正则表达式的每一部分:

  1. ^: 匹配字符串的开始。
  2. 0[xX]: 匹配字符 "0" 后跟 "x" 或 "X"。这用于匹配十六进制数的前缀 "0x"。
  3. [0-9A-Fa-f]+: 匹配一个或多个十六进制数字。这包括数字 0-9 和字母 A-F(不区分大小写)。
  4. $: 匹配字符串的结束。
  5. |: 逻辑或,用于分隔两个不同的匹配模式。
  6. ^[0-9A-Fa-f]+$: 这与前面的模式相似,但不需要 "0x" 前缀。

所以,这个正则表达式可以匹配两种情况:

  1. 以 "0x"(或0X) 开头的十六进制数,如 "0x1A"。
  2. 不带 "0x"(或0X) 前缀的十六进制数,如 "1A"。

注意:这个正则表达式仅适用于以十六进制表示的整数。如果你想匹配包含字母的十六进制字符串(例如十六进制颜色代码或十六进制编码),则需要使用不同的正则表达式。