繁体   English   中英

需要帮助了解此正则表达式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM