我有以下正则表达式来获取电话号码:
(?:\+?(\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}\)?)
但是它会阻止其他数字被检测到。
任何帮助都将不胜感激。
答案 0 :(得分:2)
似乎你混淆了一点点,正确的模式应该类似于
(?: *\(\d{1,3}\))?
(我添加了 *
来说明上一个示例中的空格。)
答案 1 :(得分:1)
以下问题似乎您在旧的正则表达式或sed版本中混淆了字面括号<product>
和组括号\(
,但它通常可以反转。
(
适用于某个群组,(
用于字面括号,在字符集中可以省略反斜杠。因此,在模式末尾添加\(
应该匹配。或者对于非捕获组( ?\(\d{1,3}\))?
,必须遵循开放式括号?: