电话号码正则表达式:最后的括号

时间:2018-01-09 15:12:25

标签: regex

我有以下正则表达式来获取电话号码:

(?:\+?(\d{1,3}))?([-. (]*(\d{3})[-. )]*)?((\d{3})[-. ]*(\d{2,4})(?:[-.x ]*(\d+))?)

效果很好,但我需要在数字的末尾加上括号括起来的3位数字:

0528907701     - Detected
(052)8907701   - Detected
52555552       - Detected
+9720523344433 - Detected
8907701(052)   - Not detected
8907701 (052)  - Not detected

我试图在最后添加这个表达式:\((\d{1,3}\)?)但是它会阻止其他数字被检测到。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

似乎你混淆了一点点,正确的模式应该类似于

(?: *\(\d{1,3}\))?

(我添加了 *来说明上一个示例中的空格。)

答案 1 :(得分:1)

以下问题似乎您在旧的正则表达式或sed版本中混淆了字面括号<product>和组括号\(,但它通常可以反转。

  • (适用于某个群组,
  • (用于字面括号,在字符集中可以省略反斜杠。

因此,在模式末尾添加\(应该匹配。或者对于非捕获组( ?\(\d{1,3}\))?,必须遵循开放式括号?: