📜  电话号码的正则表达式 c++ (1)

📅  最后修改于: 2023-12-03 15:27:15.285000             🧑  作者: Mango

电话号码的正则表达式 C++

电话号码是现代通讯的重要工具,经常需要在程序中对电话号码进行操作和验证。本文将介绍如何使用 C++ 编写正则表达式,以匹配电话号码。

正则表达式

正则表达式是一种表达文本模式的字符串,常用于字符串匹配和替换。在 C++ 中,可以使用 <regex> 头文件来实现正则表达式功能。

正则表达式的基本语法包括以下几种元字符:

| 元字符 | 描述 | | --- | --- | | . | 匹配任意一个字符 | | * | 匹配前一个字符的零个或多个出现 | | + | 匹配前一个字符的一个或多个出现 | | ? | 匹配前一个字符的零个或一个出现 | | [] | 匹配一组字符中的任意一个 | | [a-z] | 匹配小写字母 a 到 z 中的任意一个 | | [A-Z] | 匹配大写字母 A 到 Z 中的任意一个 | | \d | 匹配数字字符 | | \s | 匹配空白字符 | | \\ | 转义字符 |

匹配电话号码

电话号码通常包含数字和一些特殊符号,如空格、括号和横线。以下是一些常见的电话号码格式:

  • (123) 456-7890
  • 1234567890
  • 123-456-7890
  • 123.456.7890

为了匹配这些电话号码格式,我们可以使用如下的正则表达式:

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

可以看到,以上四种电话号码格式都能成功匹配。

结论

使用正则表达式可以方便地匹配各种电话号码格式。当我们需要在程序中对电话号码进行操作和验证时,可以使用上述的正则表达式来实现。