[英]Need help understanding this 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位数字?
您的第一个组由第一个(
。
(\d{1}?(\d{2}))
^ ^
| |
| |
everything inside here
因此,它将捕获所有三个数字。
编写正则表达式的更好方法可能是:
(\d{2,3})
捕获所有两位或三位数字。
如果您也希望捕获第一个数字(即1 800
):
((\d\s)?\d{2,3})
正如@Mateen Ulhaq的答案所提到的,第一组是给出的整个正则表达式。 至于您的其他问题,似乎没有任何理由将数字匹配分为两组。 如果区号偶尔是两位数字,这是有道理的,但在任何给定的示例中都并非如此。 正则表达式(\\d{3})
也为所有它们提供了预期的输出,并且更短,更简单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.