概述:
一个正则表达式是由普通字符(原子),有特殊功能的字符(元字符)和模式修正符组成。每个表达式至少要包含一个普通字符,且表达式要包含在两个反斜线‘/’之间
普通字符:
(1)包括所有的大小写字母和数字等。
比如:'/5/' 匹配字符串中是否有5这个数字
(2)在一些特殊字符(双引号“”, 单引号‘’, *,+,.) 前使用转义字符"\"取消它的特殊意义。
比如:'/\./'
(3)一些非打印字符(空白字符),如空格、回车、制表符号
比如\cx 匹配一个由未知数x指明的控制符,如\cm匹配 一个control-m
\f 匹配一个换页符
\n 匹配一个换行符
\r 匹配一个回车符
\t 匹配一个制表符
(4)通用字符,即匹配所有字母或数字
比如\d 匹配任意一个十进制数字 如0~9
\D 如^0~9
\s 匹配任意一个空白字符 如\f \r \n等
\S
\w 匹配任意一个数字、字母或下画线 如0~9、a~z或_
\W 如^0~9、a~z或_
如'/^\w+@\w+(\.\w+){0,3}$/' email的正则表达式
(5)自定义原子表[],定义一组形式一样的的原子,且从原子表中只能 选择一个原子进行匹配。
比如'/[apj]sp/' 匹配asp, psp, jsp三种,从这三种中选一个作为原子。
有特殊功能的字符:
(1)限定符:用来匹配多少次才能满足
*:匹配0次,1次或多次其前的普通符号
+:匹配1次或多次其前的普通符号
?:匹配0次或1次其前的普通符号
{n}:匹配n次其前的普通符号
{n,}:匹配至少n次其前的普通符号
{n,m}:匹配至少n次,最多m次其前的普通符号
比如:
'/a\s*b/' 可以匹配在a和b间0次空白,有一个空白或多个空白。
'/a\d+b/' 可以匹配在a和b间有一个数字或多个数字。如a2b,a234b。
'/a\W?b/' 可以匹配在a和b间0次或1次^0~9、a~z或_ 如ab,a#b,a%b
'/ax{4}b/' 可以匹配在a和b间有4次x 如axxxxb
'/ax{2,}b/' 可以匹配在a和b间至少有4次x 如axxxxxxb
'/ax{2,4}b/' 可以匹配在a和b间至少有2次x,最多有4次x 如axxb axxxxb axxxb
(2)边界限制:用来限制单词的边界范围
^或\A:表示字符串的开始
$或\Z:表示字符串的结束
\b:单词的前或后边界
\B:除单词边界以外的部分
如,有一个字符串“this is a test"
'/^this/' 匹配此字符串是否以this开始的,成功
'/test$/' 匹配此字符串是否以test开始的,成功
'/\bis\b' 匹配is两边是否都有边界,成功
'/\Bthis\b' 匹配this左边不能有边界,右边有边界,成功
(3)圆点. :用来匹配除换行符以外的任意一个字符
如'/a.b/' 匹配在a和b间的任意一个字符,如axb, ayb
(4)选择符|:用来匹配多个选择中的一个
如'/linux|apache|php/' 匹配其中的一个
(5)个体符:用来当作一个单元独立使用
如'/(very)*good/' 匹配good,very good, rery very good
再次引用:对于一个正则表达式模式或部分模式其两边添加圆括号()时,就会将其存储到一个临时缓冲区,以供再次使用。访问其则用\\n,n代表1~99个缓存区号
如:'/^\d{4}\W\d{2}\W\d{2}$/'
这是匹配日期的格式,如2008-08/12,但日期间的分隔符不对应
\W可以是任意的特殊字符,所以要使用再次引用
'/^\d{4}(\W)\d{2}\\1\d{2}/' 这样就会匹配成2008/08/12
当需要使用括号时又不想存储匹配到的结果,可以使用"?:", "?=",或"?!"
如:'/(windows)(linux)\\2os/' 再次引用linux
'/(?:windows)(linux)\\1os/' 忽略第一个的存储,所以用\\1引用linux
模式修正符:
i:不区分大小写(系统默认是区分的)
m:将字符串视为多行
s:模式中的圆点.就可以匹配所有的字符,包括换行符
x:忽略空白不计
.*?:取消贪婪模式
如:'/Web Server/ix' 可以用来匹配webserver,忽略大小写和空白
若字符串this is a test
'/^is/m' 可以匹配this<br>is<br>a<br>test,将字符串视为多行,第二行的开头为is,成功
若字符串this is a te
st
'/te.*st/s' .和s结合可以匹配任何字符,包括换行符,成功
若字符串this <b>is</b> a test <b>haha</b>
'/\<b\>.*?\<\/b\>/'
因为有特殊字符,所以用反斜线\转义,.*为贪婪模式,则会匹配is a test haha,若只想匹