php使用正则表达式「正则表达式和正则文法」
今天给大家普及一下php使用正则表达式「正则表达式和正则文法」相关知识,最近很多在问php使用正则表达式「正则表达式和正则文法」,希望能帮助到您。
正则表达式是一种描述字符串结构的语法规则,是一个特定的格式化模式。可以匹配、替换、截取匹配的字符串。
一个完整的正则表达式由两部分构成,元字符和文本字符。元字符就是具有特殊含义的字符,如“*”,“?”。文本字符就是普通的文本,如字母和数字等。PCRE风格的正则表达式会字定界符“/”的中间。如:/^http://(www.)?. .?$/。下面的例子没有遵守这个风格。
下面介绍它的语法规则
一、行定位符(^和$)行定位符就是用来描述字符串的边界。“^”表示行的开始,“$”表示行的结尾。
如:^stu 表示是匹配字符串是stu开头的,student,study 就可以被找出来,而tastu,tbstuay就不能匹配了。
stu$ 表示是匹配字符串是stu结尾的,tastu就可以被找出来了。
如果想要匹配的字符串可以出现在字符串的任意位置,那么直接写stu就可以了。
二、单词定界符(b、B)想匹配字符串出现的任意位置,可以直接使用字符串。像tm可以在 html,utmost中被找出来。但现在如果要匹配单词tm,而不是单词的一部分,就可以使用单词界定符b表示要查找的字符串为一个完整的单词。如:btmb
B 的意思是匹配的字符串不能是一个完整的单词,而是其他单词或者字符串的一部分。和b的意思的刚好相反的。
三、字符类([])正则表达式是区分大小写的,如果要忽略大小写可以使用方括号表达式“[]”。只要匹配的字符串出现在方括号内,即可表示匹配成功。要注意的是,一个方括号只能匹配一个字符。如要匹配字符串tm不区分大小写,可以写作:[Tt][Mm]
四、选择字符(|)选择字符可以理解为或。T|tM|m 意思就是字母T或者t开头,后面接一个字母M或者m。“[]”和“|”使用区别在于“[]”只能匹配单个字符,而“|”可以匹配任意长度的字符串。
五、连字符(-)连字符可以表示字符的范围。比如我们规定一个字符串只能是小写字母开头,我们可以写[a,b,c,d,.....],用连字符就可以之间写[a-z]
六、排除字符([^])^放进了方括号中,表示的是排除的意思。如:[^a-z] 表示的就是不能以小写字母开头
七、限定符(?,*, ,{n,m})?:匹配前面的字符零次或者一次。如:colou?r,该表达式可以匹配 colour 和 color
:匹配前面的字符一次或者多次。如:go gle,该表达式可以匹配的范围从google到goo...gle
*:匹配前面的字符零次或者多次。如:go*gle,该表达式可以匹配的范围从ggle到goo...gle
{n}:匹配前面的字符n次。如:go{2}gle,该表达式只匹配google
{n,}:匹配前面的字符最少n次。如:go{n,}gle,该表达式可以匹配的范围从google到goo..gle
{n,m}:匹配前面的字符最少n次,最多m次。如:employe{0,2},该表达式可以匹配employ,employe和employee这3种情况。
八、点号字符(.)点字符可以匹配出除换行符外的任意一个字符。如匹配s开头,t结尾,中间包含一个字母的单词,可以写作:^s.t$。可以匹配到sat、set、sit等等。匹配一个单词,它的第一个字母是r,第3个字母是s,最后一个字母是t。那么可以写作:^r.s.*t$
九、转义字符()正则表达式也是用转义字符将特殊字符(如:“.”,“?”,“”等等)变为普通的字符。如匹配127.0.0.1的IP地址,可以写成:[0-9]{1,3}(.[0-9]{1-3}){3}
这里的点就是通过转义。
十、反斜线()“”可以做转义字符外,还能做其他功能。
1、将一些不可打印的字符显示出来
a:警报
b:退格
e:escape
f:换页符
r:回车符
t:水平制表符
xhh:十六进制代码
ddd:八进制代码
cx:也就是control-x的缩写,匹配由x指明的控制字符,x是任意字符
2、还可以指定预定义字符集
d:任意一个十进制数字,相当于[0-9]
D:任意一个非十进制数字
s:任意一个空白字符(空格、换行符、换页符、回车符、水平制表符),相当于[fnrt]
S:任意一个非空白字符
w:任意一个单词字符,相当于[a-zA-Z0-9]
W:任意一个非单词字符
3、定义断言
b:单词界定符,用来匹配字符串中的某些位置。b是以统一的定界符来匹配。
B:非单词定界符序列
A:总是能够匹配待搜索文本的起始位置
Z:表示在未指定任何模式下匹配的字符,通常是字符串的末尾位置,或者是在字符串末尾的换行符之前的位置
z:只匹配字符串的末尾,而不考虑任何换行符
G:当前匹配的起始位置
十一、括号字符(())1、可以改变限定符的作用范围(如:“|”,“*”,“^”等等)。比如:(thir|four)th,这个表达式的意思是可以匹配单词thirth或者fonrth,如果不用小括号,可以匹配单词thir和fourth
2、可以分组,也就是子表达式。如:(.[0-9]{1,3}){3},就是对分组(.[0-9]{1,3})进行重复操作。
十二、反向引用反向引用,就是依靠子表达式的“记忆”功能来匹配连续出现的字串或字母。如匹配连续两个it,首先将单词it作为分组,然后后面加上“1”即可。格式为:(it)1。如果匹配的子串不固定,那么就将括号内的字串写成一个正则表达式。如果使用了多个分组,那么可以使用“1”、“2”来表示每个分组(顺序是从左到右)。
如:([a-z])([A-Z])12
除了可以使用数字来表示分组外,还可以自己来指定分组名称。
语法格式:(?P<subname>)如果想要反向引用该分组,使用如下语法:
语法格式:(?P=subname)重写表达式([a-z])([A-Z])12,为这两个分组分别命名,并反向引用他们,正则表达式如下:
(?P<fir>[a-z])(?P<sec>[A-Z])(?P=fir)(?P=sec)
十三、模式修饰符(待了解)模式修饰符的作用就是设定模式。也就是规定正则表达式应该如何解释和应用。php的主要模式修饰符如下:
修饰符:i 表达式写法:(?i)...(?-i)、(?i:...)
说明:忽略大小写模式
修饰符:m 表达式写法:(?m)...(?-m)、(?m:...)
说明:多文本模式。也就是说字串内部有个换行符时候,影响“^”和“$”的匹配。
修饰符:s 表达式写法:(?s)...(?-s)、(?s:...)
说明:单文本模式。在此模式下,元字符点号(.)可以匹配换行符。其他模式则不能匹配换行符。
修饰符:x 表达式写法:(?x)...(?-x)、(?x:...)
说明:忽略空白字符
明天来看看php中一些正则表达式函数。