📅  最后修改于: 2023-12-03 15:27:15.285000             🧑  作者: Mango
电话号码是现代通讯的重要工具,经常需要在程序中对电话号码进行操作和验证。本文将介绍如何使用 C++ 编写正则表达式,以匹配电话号码。
正则表达式是一种表达文本模式的字符串,常用于字符串匹配和替换。在 C++ 中,可以使用 <regex>
头文件来实现正则表达式功能。
正则表达式的基本语法包括以下几种元字符:
| 元字符 | 描述 |
| --- | --- |
| .
| 匹配任意一个字符 |
| *
| 匹配前一个字符的零个或多个出现 |
| +
| 匹配前一个字符的一个或多个出现 |
| ?
| 匹配前一个字符的零个或一个出现 |
| []
| 匹配一组字符中的任意一个 |
| [a-z]
| 匹配小写字母 a 到 z 中的任意一个 |
| [A-Z]
| 匹配大写字母 A 到 Z 中的任意一个 |
| \d
| 匹配数字字符 |
| \s
| 匹配空白字符 |
| \\
| 转义字符 |
电话号码通常包含数字和一些特殊符号,如空格、括号和横线。以下是一些常见的电话号码格式:
为了匹配这些电话号码格式,我们可以使用如下的正则表达式:
std::regex pattern("\\d{3}([- .])?\\d{3}\\1?\\d{4}");
其中,\d
表示数字字符,\\d{3}
表示匹配三个数字字符,([- .])?
表示匹配一个可选的括号、空格或横线,\1
表示匹配第一个括号、空格或横线的字符,\\d{4}
表示匹配四个数字字符。
我们可以通过以下代码来测试上述正则表达式的匹配结果:
#include <iostream>
#include <regex>
#include <string>
int main() {
std::regex pattern("\\d{3}([- .])?\\d{3}\\1?\\d{4}");
std::string s1 = "(123) 456-7890";
std::cout << s1 << " : " << std::regex_match(s1, pattern) << std::endl;
std::string s2 = "1234567890";
std::cout << s2 << " : " << std::regex_match(s2, pattern) << std::endl;
std::string s3 = "123-456-7890";
std::cout << s3 << " : " << std::regex_match(s3, pattern) << std::endl;
std::string s4 = "123.456.7890";
std::cout << s4 << " : " << std::regex_match(s4, pattern) << std::endl;
return 0;
}
输出结果为:
(123) 456-7890 : 1
1234567890 : 1
123-456-7890 : 1
123.456.7890 : 1
可以看到,以上四种电话号码格式都能成功匹配。
使用正则表达式可以方便地匹配各种电话号码格式。当我们需要在程序中对电话号码进行操作和验证时,可以使用上述的正则表达式来实现。