学习正则表达式匹配邮箱。。。。
#include <stdio.h> #include <regex.h> #include <string.h> // 检查是否为有效的电子邮件地址 int isEmail(const char* str) { regex_t regex; int ret; ret = regcomp(®ex, "^[a-zA-Z0-9_]+@[a-zA-Z0-9_]+\\.com$", REG_EXTENDED); if (ret) { return 0; // 编译失败 } ret = regexec(®ex, str, 0, NULL, 0); regfree(®ex); return !ret; } // 检查是否为有效的IP地址 int isIP(const char* str) { regex_t regex; int ret; //编译正则表达式,生成 regex_t 类型的对象。REG_EXTENDED 选项允许使用扩展的 POSIX 正则表达式语法。 ret = regcomp(®ex, "^(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\\." "(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\\." "(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\\." "(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])$", REG_EXTENDED); if (ret) { return 0; // 编译失败 } //执行正则表达式匹配操作,检查字符串是否匹配正则表达式。 ret = regexec(®ex, str, 0, NULL, 0); //释放 regex_t 对象占用的内存。 regfree(®ex); return !ret; } // 检查是否为有效的电话号码 int isPhone(const char* str) { regex_t regex; int ret; ret = regcomp(®ex, "^\\+\\d+-\\d+-[\\d#]+$", REG_EXTENDED); if (ret) { return 0; // 编译失败 } ret = regexec(®ex, str, 0, NULL, 0); regfree(®ex); return !ret; } int main() { int n; printf("Enter number of strings: "); scanf("%d", &n); getchar(); // 忽略换行符 char input[256]; while (n-- > 0) { printf("Enter string: "); //从标准输入读取一行,最多读取 255 个字符,剩下的一个字符留给字符串结束符 \0。 fgets(input, 256, stdin); input[strcspn(input, "\n")] = 0; // 去掉换行符 if (isEmail(input)) { printf("email\n"); } else if (isIP(input)) { printf("ip\n"); } else if (isPhone(input)) { printf("phone\n"); } else { printf("invalid\n"); } } return 0; }
#include <iostream> #include <vector> #include <regex> bool isEmail(const std::string& str) { //用正则表达式模式创建一个 std::regex 对象。 std::regex pattern("^[a-zA-Z0-9_]+@[a-zA-Z0-9_]+\\.com$"); //std::regex_match(str, pattern):检查整个字符串 str 是否与正则表达式 pattern 完全匹配。如果匹配,则返回 true,否则返回 false。 return std::regex_match(str, pattern); } bool isIP(const std::string& str) { std::regex pattern("^(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\\." "(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\\." "(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])\\." "(\\d{1,2}|1\\d{2}|2[0-4]\\d|25[0-5])$"); return std::regex_match(str, pattern); } bool isPhone(const std::string& str) { std::regex pattern("^\\+\\d+-\\d+-[\\d#]+$"); return std::regex_match(str, pattern); } int main() { int n; std::cin >> n; std::cin.ignore(); // 忽略换行符 //使用 std::vector 来存储结果,类似于 Java 中的 ArrayList。 std::vector<std::string> results; for (int i = 0; i < n; ++i) { std::string input; //读取一整行输入,包括空格。 std::getline(std::cin, input); if (isEmail(input)) { results.push_back("email"); } else if (isIP(input)) { results.push_back("ip"); } else if (isPhone(input)) { results.push_back("phone"); } else { results.push_back("invalid"); } } for (const auto& result : results) { std::cout << result << std::endl;\\std::endl会使result自动换行 } return 0; }
}