10.3 匹配北美电话号码
还记得第1章中匹配北美电话号码的例子吗?跟那时相比,你已经有了很明显的提高。
下面是一个更为可靠的匹配电话号码的正则表达式。这个正则表达式是由Goyvaerts 和 Levithan合著的Regular Expressions Cookbook,First Edition 一书第235页的例子改编而来。
^\(?(?:\d{3})\)?[-.]?(?:\d{3})[-.]?(?:\d{4})$
请用手头的工具试一下这个表达式(图10-2显示的是在Reggy中输入该表达式的情况)。现在你应该能轻而易举地分析清楚这个表达式了。真为你骄傲!不过,还是让我们一块再分析一次吧。
^
是判定一行或者主题词开头的零宽度断言。(?
是一个字面左括号,但它是可选的(?
)。(?:\d{3})
是一个匹配连续三位数字的非捕获分组。)?
是可选的右括号。[-.]?
允许有可选的连字符或者句点(点号)。(?:\d{3})
是另一个匹配连续三位数字的非捕获分组。[-.]?
再次允许有可选的连字符或者句号(点号)。(?:\d{4})
是匹配连续四位数字的非捕获分组。$
匹配一行或主题词的结尾。
这个表达式还可以再改进,这项任务就留给你了,因为你已经可以自己做了。
图10-2 在Reggy中匹配电话号码的正则表达式