首页 > 代码库 > 正则表达式——从匹配北美电话号码和邮箱地址学习

正则表达式——从匹配北美电话号码和邮箱地址学习

一般北美电话号码的格式为:

         999-999-9999

或者999x999x9999 (x表示任意字符)

用字符组来匹配:

[0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]


用字符组简写式:

\d\d\d-\d\d\d-\d\d\d\d


括选文字符:

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


第一个^表示电话号码会出现在一行的起始位置

左括号{为捕获分组的起始符

\(表示左括号本身(转义字符)

\d匹配一位数字

\d后的{3}是量词,表示匹配三位数字

\}匹配右括号本身(转义字符)

|表示选择,也就是从多个可选项中选择多个

^匹配行起始位置

\d匹配一位数字

{3}表示匹配三位数字的量词

[.-]?匹配一个可选的点号或者连字符

右括号)为捕获分组的结束符

?表示分组可选,即分组中的前缀可有可无

\d匹配一位数字

{3}表示匹配三位数字的量词

[.-]?匹配另一个可选的点号或者连字符

\d匹配一位数字

{4}是表示匹配四位数字的量词

$匹配行结束位置

 

 

下面再说一个匹配北美电话号码的正则表示式:

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

其中(?:xxxx)表示的是非捕获分组,非捕获分组不会将其内容存储在内存中,可以带来更高的性能。

 


匹配电子邮件地址的正则表达式:

^([\w-.!#$%&'*-+=/?^_{|}~]+)@((?:\w+\.)+)(?:[a-zA-Z]{2,4})$

 

 

预定义字符集:

 

\w匹配一个单词字符,相当于[a-zA-Z0-9]

\W匹配一个非单词字符[\^\w]

\d表示匹配一个数字[0-9]

\D匹配一个非数字[^\d]

\s匹配一个空白字符[<空格> \t\r\n\f\v]

\S匹配一个非空白字符[^\s]


 

量词:

 

*匹配前一个字符0或无限次

+匹配前一个字符1次或者无限次

?匹配前一个字符0或1次

{m}匹配前一个字符m次

{m,n}匹配前一个字符m-n次

 

 

边界

 

^匹配字符串开头,在多行模式中匹配每一行的开头

$匹配字符串末尾,在多行模式中国匹配每一行的末尾

\A仅匹配字符串开头

\Z仅匹配字符串末尾

\b匹配\w和\W之间

\B匹配[^\b]

 

 

[]一般表示字符集

{}一般表示量词

()一般表示分组

(?:)一般表示非捕获分组