我在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位数?
答案 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})
也给出了所有这些的预期输出,并且更短更简单。