用括号捕捉 - 出了什么问题?

时间:2013-09-01 00:36:03

标签: regex

  

415-555-1234
  650-555-2345
  (416)555-3456
  202 555 4567
  4035555678个
  1 416 555 9292

对于我的正则表达式课程,我正在尝试捕获上述数字的区号。 现在我的下面的表达式匹配所有数字,但我的第一对括号没有捕获任何数据。

1?\s?\\(?(\d{3})\s?-?\\)?(\d{3})\s?-?(\d{4})

我是否以某种方式将它们转换为非捕获组?怎么解决?

RegexOne.com就跑掉了,让我独自一人。

2 个答案:

答案 0 :(得分:0)

使用[(][)]来避免反斜杠和可能的双反斜杠(因为转义)并检查这是否可以解决您的问题。

否则你的正则表达式看起来没问题,(\d{3})应匹配并捕获前3位数字。

在问题中,请指出您使用的主机编程语言。可能存在反斜杠逃避与语言相关的问题。一般的经验法则是在例如Perl,Ruby,JavaScript中使用单个反斜杠(\(\d)或在例如中使用双反斜杠(\\(\\d Java和C ++)在你的正则表达式中始终如一。

答案 1 :(得分:0)

此正则表达式适用于http://regexone.com/example/1

1?\s?\(?(\d{3})\s?-?\)?\d{3}\s?-?\d{4}

我做了什么来解决它。

  1. 转义括号时删除双斜杠。
  2. 删除第二个和第三个捕获组。 (这似乎混淆了测试代码)