gpt4 book ai didi

匹配电话模式逻辑的正则表达式

转载 作者:行者123 更新时间:2023-12-02 00:52:34 30 4
gpt4 key购买 nike

我正在尝试创建一个正则表达式字符串以使用以下逻辑匹配电话号码:

1) 对于NPA(区号),3位,第一位是[2-9],第二和第三位是[0-9]

2) 对于 NXX(交换 – NPA 之后的下 3 位数字),规则与 NPA 相同。另外,如果第2位为'1',则第3位不能为'1'(为公共(public)服务保留)

3) 对于 XXXX(数字 - NXX 之后的下 4 位数字),4 位数字中的每一位为 [0-9]。

我已经使用以下字符串完成了步骤 1 和 3 以及步骤 2 的一部分:

^\(?([2-9]{1})\)?([0-9]{2})?[-.*]?([2-9]{1})\)?([0-9]{2})?[-.*]?([0-9]{4})$

但我坚持尝试合并此处所述的逻辑:

对于 NXX(交换 – NPA 之后的下 3 位数字),与 NPA 的规则相同。另外,如果第2位为'1',则第3位不能为'1'(为公共(public)服务保留)

如果有人能对此有所帮助,我们将不胜感激。

False 是我希望我的正则表达式不匹配的,而 true 是我希望它继续匹配的。它目前匹配两个集合。

错误:4807119320 4805119439 4809114739

正确:4805218482 4805123848 4809128327 4809418482

最佳答案

如果在第二部分第二个数字不能为 1 如果第三个数字是 1,您可以使用否定先行 (?!11) 来断言右边的不是 11 .

将其添加到您的模式中,它看起来像:

^\(?([2-9])\)?([0-9]{2})?[-.*]?([2-9])\)?((?!11)[0-9]{2})?[-.*]?([0-9]{4})$
^^^^^^

Regex demo

请注意,由于\(?\)? 等问号以及第二次关闭,很多部分是可选的括号 缺少左括号,因此这也匹配 (2)33-2)21-2222

如果第二部分的左括号和右括号应该与第一部分相同,它可能如下所示:

^\(?([2-9])\)?([0-9]{2})?[-.*]?\(?([2-9])\)?((?!11)[0-9]{2})?[-.*]?([0-9]{4})$
^^^

如果第一个字符类中匹配的内容应该与第二个字符类中的匹配,您还可以使用另一个捕获组 ([-.*]?) 和一个反向引用 \3 所以 (2)33-(2)212222 不匹配:

Regex demo

关于匹配电话模式逻辑的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56401070/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com