需要帮助理解这个正则表达式

时间:2016-04-12 07:04:48

标签: regex

我在regexone.com上发现了这个问题 - http://regexone.com/problem/matching_phone_numbers。编写一个与数字匹配的正则表达式,并捕获正确的区号。

Exercise 2: Matching Phone Numbers

Task      Text          Capture   Groups     
Capture 415-555-1234    415      Success
Capture 650-555-2345    650      Success
Capture (416)555-3456   416      Success
Capture 202 555 4567    202      Success
Capture 4035555678      403      Success
Capture 1 416 555 9292  416      Success

此处表达式(\d{1}?(\d{2}))捕获区号,但我需要了解的是我的第一组仅用于1位数并且是可选的。而我的第二组只能保持2位数。如何捕获3位数?

2 个答案:

答案 0 :(得分:2)

您的第一个小组由第一个小组(提供。

(\d{1}?(\d{2}))
^             ^
|             |
|             |
everything inside here

因此,它捕获了所有三个数字。

编写正则表达式的更好方法可能是:

(\d{2,3})

捕获所有两位或三位数字。

如果您希望捕获第一个数字(即1 800):

((\d\s)?\d{2,3})

答案 1 :(得分:1)

正如@Mateen Ulhaq所说,第一组是整个正则表达式。至于你的另一个问题,似乎没有任何理由将数字匹配分成两组。如果区域代码偶尔是两位数,那将是有意义的,但在任何给定的例子中都不是这样。正则表达式(\d{3})也给出了所有这些的预期输出,并且更短更简单。