工具函數
bool regex_match(const string& s, const regex& r) {
return std::regex_match(s, r);
}
常用模式
| 用途 | 正則 | 說明 |
| 純數字 | ^[0-9]*$ | 允許空串,嚴格用 + |
| 純字母 | ^[[:alpha:]]*$ | 區分大小寫 |
| 字母數字 | ^[[:alnum:]]*$ | |
| 整數 | ^[-]?(0|([1-9][0-9]*))$ | 不允許前導零 |
| 實數 | ^-?(0|([1-9][0-9]*))\.[0-9]+$ | 必須有小數點 |
| IPv4 | ^((25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)$ | 每段 0-255 |
| 手機號 | ^[01]\d{10}$ | 11 位,首位 0/1 |
| 日期 | ^[12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$ | 1900-2999 年 |
| Email | ^[[:alnum:]]+@[[:alnum:]]+\.[a-z]+$ | 簡化版 |
代碼示例
bool is_int(const string& s) {
static const regex r("^[-]?(0|([1-9][0-9]*))$");
return regex_match(s, r);
}
注意
- C++
regex 默認用 ECMAScript 語法,性能一般,高頻調用建議預編譯 static const regex。
- 轉義:字符串字面量中反斜杠需雙寫
\\.,原始字符串 R"(\.)" 更清晰。