理解正则表达式

时间:2014-03-15 16:33:44

标签: regex

我正在研究以下正则表达式,到目前为止只理解了它的一部分。 以下是10位北美电话号码格式的正则表达式

^(\(\d{3}\)|^\d{3}[.-]?)?\d{3}[.-]?\d{4}$
  1. 开头的胡萝卜字符和最后的美元会使这个正则表达式只允许10位数字吗?

  2. 第二个胡萝卜字符在那里,因为它意味着下一个3位数字的开头而且它的遗漏做了我试图删除它但没有发现任何变化?

  3. 垂直条形或竖线字符表明我没有得到它?

  4. 第一个反向斜线用于停止,第二个用于3位数。

2 个答案:

答案 0 :(得分:2)

^(\(\d{3}\)|^\d{3}[.-]?)?\d{3}[.-]?\d{4}$
  • ^ - 查找匹配项的行的开头,它是一个锚点。
  • ( - 开始匹配捕获以最终获取要提取的文本/信息。
  • \( - 寻找文字括号。
  • \d - 正则表达式替换,指定查找数字或数字
  • {3} - 在前一项上表达的量词,在这种情况下,它说找到三位数。可以改写为\d\d\d。因此,请考虑这一句话\d{3}意味着找到三位数。
  • \)寻找文字的结尾括号。
  • | - 正则表达式或者,到目前为止它在两个括号内的匹配3数字,现在做Or ....
  • ^ - 再次开始行,建议不必以这种方式指定锚点,只需在开头留下一个,然后将Or作为子匹配。
  • \d{3} - 与上述相同。
  • [ - 表示一组字符的开头。这就像文字\情况,但对于多个字符。集[ ]中的所有内容都可以是这些字符中的任何一个。
  • .-句点(。)和短划线的字面字符。不要与其他情境中的.混淆,因为那时候any character or whitespace就是]。在一个集合中,就像它现在一样,它只意味着一个文字期间。
  • [.-] - 结束。该集合为?,表示一组两个可能的字符,只有一个是mathc。
  • )量词表示前一个声明,即集合可能匹配或不匹配。
  • ?子匹配捕获结束。
  • $子匹配可能会也可能不会发生。 我再次认为用户在括号中出错了

....与上述相同的模式,相同的解释。

  • {{1}}行尾锚点。这表示发送的整个文本必须符合模式或失败

答案 1 :(得分:1)

 # ^(?:\(\d{3}\)|\d{3}[.-]?)?\d{3}[.-]?\d{4}$

 # Optional area code
 ^                             # Beginning of string
 (?:                           # Cluster group start
      \( \d{3} \)                   # '(' 3-digit area code ')'
   |                              # or, 
      \d{3} [.-]?                   # just 3-digit area code, optional dot or dash
 )?                            # Cluster group end
 # 7 digit phone number
 \d{3} [.-]? \d{4}             # ( 3-digits, optional dot or dash, 4-digits )
 $                             # End of string