
在C++中使用正则表达式需要包含头文件
1. 基本匹配:regex_match
std::regex_match 用于判断整个字符串是否完全匹配指定正则表达式。
示例:
#include#include #include int main() { std::string str = "hello123"; std::regex pattern(R"([a-zA-Z]+\d+)"); // 匹配字母后跟数字 if (std::regex_match(str, pattern)) { std::cout << "完全匹配!" << std::endl; } else { std::cout << "不匹配。" << std::endl; } return 0; }
只有当整个字符串符合模式时才返回 true。
立即学习“C++免费学习笔记(深入)”;
2. 部分匹配:regex_search
std::regex_search 用于查找字符串中是否存在与正则匹配的子串。
示例:
#include#include #include int main() { std::string str = "abc hello123 world"; std::regex pattern(R"([a-zA-Z]+\d+)"); std::smatch match; if (std::regex_search(str, match, pattern)) { std::cout << "找到匹配内容:" << match.str() << std::endl; } return 0; }
match 是一个 std::smatch 对象,可以提取出匹配的子字符串。
3. 提取匹配内容(捕获组)
使用括号 () 定义捕获组,可以从匹配结果中提取特定部分。
示例:提取用户名和域名
#include#include #include int main() { std::string email = "contact@example.com"; std::regex pattern(R"(([a-zA-Z0-9._%+-]+)@([a-zA-Z0-9.-]+\.[a-zA-Z]{2,}))"); std::smatch match; if (std::regex_search(email, match, pattern)) { std::cout << "用户名: " << match[1].str() << std::endl; std::cout << "域名: " << match[2].str() << std::endl; } return 0; }
match[0] 是完整匹配,match[1]、match[2] 分别对应第一个和第二个捕获组。
4. 常见匹配方法总结
- std::regex_match(str, pattern):全字符串匹配,必须全部吻合。
- std::regex_search(str, pattern):搜索任意位置的匹配子串。
- std::regex_search(str, match, pattern):带捕获组的结果提取。
- std::sregex_iterator:遍历所有匹配项(适合多次匹配)。
基本上就这些。注意正则表达式字符串建议使用原始字符串字面量 R"(...)",避免转义问题。c++ regex 功能强大但性能一般,频繁使用时可考虑缓存 regex 对象。不复杂但容易忽略细节,比如全匹配和部分匹配的区别。基本上就这些。











