1.元字符
注:在任意的元字符前加上反斜线,将失去其元字符意义,表示匹配它。
点号(.):匹配任意一个字符,换行符(\n)除外。
反斜线(\):作为转义字符。
2.量词
星号(*):用于匹配前一个条目零次或多次。
加号(+):表示匹配前一个条目一次以上。
问号(?):表示匹配前一个条目出现一次或零次。
花括号({}):用于表示重复次数。
eg:/(read){3,100}/ 表示read可以重复3到100次
/(read){3,}/ 表示可以重复3到无穷次
/(read){3}/ 表示重复3次。
3.模式分组
圆括号(()):对字符进行串分组。
反向引用的写法是在反斜线的后面跟上数字。应用反向引用来对前面最近的圆括号中的模式进行匹配。数字表示匹配第几个括号。
eg:模式:/y(....) d\1 “yabba dabba d” 匹配正确。
模式:/y(.)(.)\2\1/ 匹配"abba"。
模式:/y((.)(.)\2\1)d\1/ 匹配“yabba dabba d”。
\g{N}可以将\111变为\g{1}11.其中N可以为负数,表示倒着数括号。
eg:模式:/(.)\g{1}11/ 匹配成功"aa11"。
4.择一匹配
竖线(|):表示要么匹配左边的内容,要么匹配右边的内容。
eg:模式:/fread(and|or)barney/ 只对freadandbarney和freadorbarney匹配成功。
5.字符集
方括号([]):表示只能对方括号中的字符集的一个字符进行匹配。
连接符(-):可以用来表示范围。
脱字符(^):表示字符集中的字符除外
eg:模式:/[adhjifeg]/ 对方括号中的8个字符中的一个匹配。
模式:/[a-zA-Z]/ 对52个大小字母中的一个进行匹配
6.字符集的简写
\d:表示一个数字
\s:表示能匹配任意空白字符
\w:表示有[a-zA-Z0-9]组成的字符
\D:等同于[^\d]
\S:等同于[^\s]
\W:等同于[^\w]
7.定界符
可以选用任何成对的定界符。/read/是m/read/的缩写。也可以运用其他的定界符表示,如:m<read>,m[read],m{read},m,read,。
8.模式匹配修饰符
/i:表示大小写无关。 eg:模式:/fred/i 对Fred,FRed等匹配成功。
/s:表示匹配任意字符,包含换行符。(需要和.号一起使用) eg:模式/Bary.*fred/s 对“Barydsfsdfds\nsdfds\ndffred”匹配成功。
/x:表示可以在模式中加入空白。 eg:模式:/-?[0-9]+\.?[0-9]*/ 等同于 /-? [0-9]+ \.? [0-9]*/x。
组合修饰符:可以将上面的多可修饰符放在一起。
9.锚位
给定锚位,可以让模式从指定位置开始匹配。
\A:匹配字符串的绝对开始。 eg:m{\Ahttps?://}i
\z:匹配字符串的绝对末尾。 eg:m{\.png\z}i
\Z:匹配行尾,后面可以跟着换行符。
\b:单词边界锚位(由\w组成的单词)。 eg:/\bfread\b/ 仅对fread匹配成功。
\B:表示非单词锚位 。 eg:/\bsercd\B/ 对sercdfsd,sercdfdsd等匹配成功,对resercdfsd,sercd等匹配不成功。
10.绑定操作符=~
默认情况下的操作对象是$_,我们可以通过=~来对模式进行匹配。例如:if($sdfsd=~/sdfds/)....
11.模式的内插
正则表达式内部可以进行双引号的内插。
12优先级
1.圆括号(())具有最高优先级,用于分组和捕获。
2.第二级为量词,用于表示重复次数。量词有点号,问号,加号,花括号。
3.第三级为锚位和序列。有:\A,\Z,\z,^,$,\B,\b
4.第四级为竖线(|)。
5.最低级为原子。如:a,[abc],\d,\1,\g{2}.
eg:/\Aread|binray\Z/ 表示要么匹配以read开始的的字符串,或者以binray结束的字符串。