首页 > 代码库 > 正则表达式——从匹配北美电话号码和邮箱地址学习
正则表达式——从匹配北美电话号码和邮箱地址学习
一般北美电话号码的格式为:
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]
[]一般表示字符集
{}一般表示量词
()一般表示分组
(?:)一般表示非捕获分组