10.3 匹配北美电话号码

还记得第1章中匹配北美电话号码的例子吗?跟那时相比,你已经有了很明显的提高。

下面是一个更为可靠的匹配电话号码的正则表达式。这个正则表达式是由Goyvaerts 和 Levithan合著的Regular Expressions Cookbook,First Edition 一书第235页的例子改编而来。

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

请用手头的工具试一下这个表达式(图10-2显示的是在Reggy中输入该表达式的情况)。现在你应该能轻而易举地分析清楚这个表达式了。真为你骄傲!不过,还是让我们一块再分析一次吧。

  • ^是判定一行或者主题词开头的零宽度断言。
  • (?是一个字面左括号,但它是可选的(?)。
  • (?:\d{3})是一个匹配连续三位数字的非捕获分组。
  • )?是可选的右括号。
  • [-.]?允许有可选的连字符或者句点(点号)。
  • (?:\d{3})是另一个匹配连续三位数字的非捕获分组。
  • [-.]?再次允许有可选的连字符或者句号(点号)。
  • (?:\d{4})是匹配连续四位数字的非捕获分组。
  • $匹配一行或主题词的结尾。

这个表达式还可以再改进,这项任务就留给你了,因为你已经可以自己做了。

图10-2 在Reggy中匹配电话号码的正则表达式

enter image description here