0

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 刚刚跑掉,让我一个人在这个网站上。

4

2 回答 2

0

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

否则,您的正则表达式看起来不错,(\d{3})应该匹配并捕获前 3 位数字。

在问题中,请说明您使用的是哪种主机编程语言。可能存在与语言相关的反斜杠转义问题。一般的经验法则是在您的正则表达式中始终使用单个反斜杠(例如在 Perl \(\dRuby、JavaScript 中)或双反斜杠(例如在 Java\\(\\dC++ 中)。

于 2013-09-01T00:51:08.860 回答
0

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

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

我做了什么来修复它。

  1. 转义括号时删除双斜杠。
  2. 删除第二个和第三个捕获组。(这似乎混淆了测试代码)
于 2013-09-01T02:35:08.463 回答