正则表达式提供了一种高级的、但不直观的字符串匹配和处理的方法。它描述了一种字符串匹配的模式,可以用来判断一个字符串是否满足某种格式,或者一个字符串是否含有某个子串等。
字符集
正则表达式中可以使用的用于匹配的字符集如表3.1
所示。
表3.1
字符集
字符
|
作用
|
.
|
匹配除
/n
以外的任何一个字符。
|
[ ]
|
匹配包含在方括号内的任何一个字符。
|
^
|
用在方括号中表示匹配除方括号中字符以外的任何字符。
|
示例:
.at
:匹配以任意字符开头,后面为at
的字符串。如“cat
”、“bat
”、“#at
”等。
[a-z]
:匹配任意一个小写字母(a
到z
之间的)。如“a
”、“c
”、“e
”等。
[aeiou]
:匹配任意一个元音字母。
[a-zA-Z]
:匹配任意一个大写或小写字母。
[^a-z]
:匹配任何不在a
到z
之间的字符。
重复
用于确定重复次数的字符如表3.2
所示。
表3.2
重复次数
字符
|
作用
|
*
|
表示重复
0
次或以上。
|
+
|
表示重复
1
次或以上。
|
?
|
表示重复
0
次或
1
次。
|
示例:
[a-zA-Z]*
:匹配任意大小写字母构成的字符串,也可以是空字符串。如:“abc
”。
[0-9]+
:匹配任何由数字构成的字符串,该字符串至少包含一个字符。如:“1234
”
。
[a-z0-9]?
:匹配空字符串,或者一个小写字母或数字。
子表达式
子表达式的格式和作用如表3.3
所示。
表3.3
子表达式
字符
|
作用
|
()
|
将多个字符作为一个子表达式。
|
示例:
(very )*large
:匹配“large
”、“very large
”、“very very large
”等。注意very
后面的空格。
子表达式计数
子表达式可以出现多次,子表达式的计数如表3.4
所示。
表3.4
子表达式计数
字符
|
作用
|
{n}
|
表示重复
n
次。
|
{m,n}
|
表示重复
m~n
次。
|
{m,}
|
表示重复
m
次以上。
|
示例:
(very ){1}
:匹配“very
”。
(very ){1,3}
:匹配“very
”、“very very
”、“very very very
”。
(very ){1,}
:匹配由一个或一个以上“very
”构成的字符串。
指定字符串的开始和末尾
字符串的开始和结束符如表3.5
所示。
表3.5
开始和结尾
字符
|
作用
|
^
|
指定以某个字符串开始。
|
$
|
指定以某个字符串结尾。
|
^
和
$
|
表示精确匹配某个字符串。
|
示例:
^zhang
:匹配以“zhang
”开头的任意字符串。如“zhangsan
”。
cn$
:匹配以“cn
”结束的任意字符串。如:“sina.com.cn
”。
^[a-z]$
:匹配只包含a
到z
之间任意一个字符的字符串。如:“a
”。
注意:如果一个模式不包括^
和$
,那么它与任何包含该模式的字符串匹配。
思考:^[a-z]
和[a-z]$
分别匹配什么样的字符串?
分支
表示分支的字符如表3.6
所示。
表3.6
分支
字符
|
作用
|
|
|
表示匹配多个模式串中的任意一个。
|
示例:
com|edu|net
:匹配com
、edu
或net
。
匹配特殊字符
在匹配特殊字符的时候需要用到转义字符,转义字符如表3.7
所示。
表3.7
特殊字符
字符
|
作用
|
/
|
用来转义特殊字符
。
|
示例:
//
:匹配一个反斜杠。
/.
:匹配一个圆点。
常见用法举例
^[a-zA-Z][a-zA-Z0-9_]*$
:匹配以字母开头,由字母、数字和下划线组成的字符串。如:“abc_123
”。
^[a-zA-Z0-9]{6,}$
:匹配由字母和数字组成,长度不少于6
位的字符串。如:“123456
”
。
^[ 0-9]{4}-[0-9]{2}-[0-9]{2}$
:匹配格式为“xxxx-xx-xx
”的字符串,要求x
只能是数字。常用于匹配日期,如:“2007-05-01
”。
^[a-zA-Z][a-zA-Z0-9_/-]*@([a-zA-Z0-9/-]+/.)+[a-z]{2,3}$
:常用于匹配Email
。要求@
符号前面是以字母开头,由字母、数字、下划线或减号组成的字符串;@
符号后面的域名可以包含多个字符串,每个字符串由字母、数字或减号组成;最后一级域名只能包含2
个或3
个字母(例如cn
、com
等)。
^0[0-9]{2,3}-[0-9]{7,8}$
:常用于匹配电话号码。要求区号由0
开始,包含3
到4
位数字,区号和电话号码之间用减号分隔,电话号码由7
位或者8
位数字组成。