概述:
正则表达式,就是一个匹配的模式,同时也是一个字符串(只是这个字符串中有一些语法规则,特殊字符)。
正则表达式这个字符串,一定要在对应的函数中使用,如分割函数,替换函数,查找函数,匹配函数。
使用PCRE函数来表示正则表达式(与Perl兼容)
正则表达式组成:定界符、原子、元字符、模式修正符
1,定界符:在字符串双引号里面用//号或其他({}等)单做定界符;如“/ efgrehrt/”
2,原子:需要匹配的字符就是一个原子(最小的匹配单位,放在定界符中),如果原子是一个特殊字符,如/,这时就需要用\来转义,变成\/。正则表达式中至少有一个原子。
(1)原子包括打印字符(a-z A-Z 0_9 !@#等)和非打印字符(回车\n,\.),转义字符\可以将有意义的字符转成没有意义的原子字符。所有没有意义的转义字符(除a-z A-Z 0_9 _外)加上转义也没有意义的,都是可加可不加如\@和@一样。
(2)代表所有的数字,所有的字,所有的字母,所有的特殊符号的原子()匹配多个原子。
\d 匹配任意一个数字
\D匹配任意一个非数字
\s匹配任意一个空白(空格、回车、tab键)
\S匹配任意一个非空白
\w匹配任意一个字 a-z、A-Z、 0_9、 _
\W匹配任意一个非字 (除a-z、A-Z、 0_9、 _外)
(3)自定义原子表(写自己需要匹配的集合),$reg = ‘/[1,3,5,7,9]/’ 来匹配奇数或‘/[^a-zA-Z]/’表示除了字母^表示除了。用(.)能代表任意一个字符
3,元字符:元字符不能单独使用,是用来扩展原子功能和限定功能的(写在定界符中)。例如“/7{5}/”中的{5}就是元字符,用来说明原子7必须出现5次
(1)元字符(*)用来修饰其前面的原子可以出现0个1个或多个 如$reg = ‘/go*gle/’ 可以匹配google
(2)元字符(+)用来修饰前面的原子可以出现1次或多次,不能没有
(3)元字符(?)用来修饰前面的原子可以出现0次或1次,不能多次
(4)元字符({n})用来修饰前面的原子只能出现n次,多少都不行
(5)元字符({n,m})用来修饰前面出现的原子的个数在n到m之间,包括端点
(6)元字符({n,})用来修饰前面出现的原子的个数至少n次,包括端点。不允许({,m})
(7)元字符(|)用来表示|两边的原子,只要有一个出现就可以。但是,| 的优先级是最低的。所以$reg = ‘/oracle|mysql/’是表示oracle和mysql出现而不是e和w(如果要e和w可以用扣号())
(8)元字符(^)和(\A)表示必须以什么开始,这个必须写在正则表达式的最前面,$reg = ‘/^abc/’表示必须以abc开始
(9)元字符($)和(\Z)表示必须以什么结尾,这个必须写在正则表达式的最后面,$reg = ‘/abc$/’表示必须以结尾
(10)$reg = ‘/^abc.*abc$/’可以表示以abc开始以abc结尾并且中间可以有任意字符。如果没有(.*)则只能匹配“abc”。
(11)元字符(\b)用来匹配单词边界,例如$reg = ‘/\bis\b/’表示is两边都是空白的
(12)元字符(\B)用来匹配不是单词边界,例如$reg = ‘/\bis\B/’表示is的右边不是空白,左边是空白的。
(13)元字符(())
一,可以来改变优先级,如 | 符号。
二,将小原子变成大原子,如$reg = ‘/(abc)*/ ,abc变成整体
三,子模式,整个表达式是一个大的模式,小括号中的是每个独立的子模式,例如$reg = ‘/(http|ftp|https)*/来匹配协议
四,反向引用$reg = "/\d{4}(-|\/)\d{2}\\1\d{2}/" 表示匹配日期2015-11-17,//1表示使用第一个括号中取到的字符,即如果前面取到-这里就变成-。第一个\表示不转意1前面的\,如果是‘’下的正则就只要\1就可以了,因为单引号下不转意。如果要想在其他的()不使用反向引用,即不参与排序,就在()里面的前面写(?:)。
4,模式修正符(单个字符):修正,对模式(正则)进行修正(对整个表达式进行修正,写在定界符外、右边)。例如“/a{5}/i”,加上i就不区分大小写
(1)模式修正符号,一个字符就是一个功能,可以组合使用。
(2)模式修正符号可以修正正则表达式的解释或扩充了正则表达式的功能。
(3)模式修正符(i)表示正则表达式不区分大小写,默认是区分大小写的
(4)模式修正符(m)表示正则表达式如果有回车换行等,将视为多行,在使用^和$这两个符号时,一行满足即可。默认是区分一行
例如:$str = "efewr
abcgre
frg"
这里使用$reg = ‘/^abc/’将匹配不到,如果是$reg = ‘/^abc/m’就可以匹配到第二行
(5)模式修正符(s),如果设定了此修正符,模式中的圆点元字符(.)匹配所有的字符,包括换行符,默认是不匹配换行符的
(6)模式修正符(x),如果设定了此修正符,则可以省略正则表达式的空白 $reg = ‘/a bc/x’ 只能匹配abc而不能匹配a bc
正则表达式需要放在函数里才能使用:例如$str = "aa3aa4aa5aa6aa8aaa9aa" $reg = "/\d/" preg_replace($reg, "c", $str),将$str中的数字替换成c字符
正则表达式函数(功能强大,但效率低,所有能用字符串处理函数处理的字符串,就不要使用正则处理)
1,匹配查找
字符串函数:strstr strpos substr
正则函数:preg_match preg_match_all preg_grep
preg_match("/\d/", $str); $str字符串来用第一个参数中的正则处理
preg_match_all为全匹配,比preg_match更贪婪,效率低
preg_grep的参数,第一个为正则,第二个为数组。输出为一个满足正则的数组内容。