一个完全的正则表达式由两部分构成,元字符和文本字符。
元字符便是具有分外含义的字符,如“”,“?”。
文本字符便是普通的文本,如字母和数字等。
PCRE风格的正则表达式会字定界符“/”的中间。
如:/^http:\/\/(www\.)?.+.?$/。
下面的例子没有遵守这个风格。

下面先容它的语法规则

一、行定位符(^和$)

行定位符便是用来描述字符串的边界。
“^”表示行的开始,“$”表示行的结尾。

php正则匹配空格PHP入门念书笔记十一正则表达式语律例则 Angular

如:^stu 表示是匹配字符串是stu开头的,student,study 就可以被找出来,而tastu,tbstuay就不能匹配了。

stu$ 表示是匹配字符串是stu结尾的,tastu就可以被找出来了。

如果想要匹配的字符串可以涌如今字符串的任意位置,那么直接写stu就可以了。

二、单词定界符(\b、\B)

想匹配字符串涌现的任意位置,可以直策应用字符串。
像tm可以在 html,utmost中被找出来。
但现在如果要匹配单词tm,而不是单词的一部分,就可以利用单词界定符\b表示要查找的字符串为一个完全的单词。
如:\btm\b

\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

:匹配前面的字符零次或者多次。
如:gogle,该表达式可以匹配的范围从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:任意一个空缺字符(空格、换行符、换页符、回车符、水平制表符),相称于[\f\n\r\t]

\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])\1\2

除了可以利用数字来表示分组外,还可以自己来指定分组名称。

语法格式:(?P<subname>)

如果想要反向引用该分组,利用如下语法:

语法格式:(?P=subname)

重写表达式([a-z])([A-Z])\1\2,为这两个分组分别命名,并反向引用他们,正则表达式如下:

(?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中一些正则表达式函数。