霜天部落 | 关注LAMP高性能、高并发架构的设计与研究

正则表达式语法笔记

最近整理了一些正则表达式方面的语法,卸下来以便参考。

正则表达式字符簇:

^ 头匹配符

$ 尾匹配符

星号* >=0个字符{0,}

加号+ >=1个字符{1,}

问号? 1或者0个字符{0,1}

. 匹配除了换行符(\n)之外的字符

( 子模式的开始

) 子模式的结束

[a-z] 匹配所有的小写字母

[A-Z] 匹配所有的大写字母

[a-zA-Z] 匹配所有的字母

[0-9] 匹配所有的数字

[\n\t\r\f] 匹配所有的空字符

[/.-]需含有/,.,-的任一字符

表示空的:

[^A-Z]匹配所有非大写字母

[^0-9]匹配所有非数字

^[^0-9]匹配所有以非数字字符开头的字符串

内置的通用字符簇:

[[:alpha:]] 任何字母

[[:digit:]] 任何数字

[[:alnum:]] 任何字母和数字

[[:space:]] 任何空白字符

[[:upper:]] 任何大写字母

[[:lower:]] 任何小写字母

[[:punct:]] 任何标点符号

[[:xdigit:]] 任何16进制的数字

[[:cntrl:]] 任何ASCII值小于32的字符

{ }的作用:

{n}表示正好出现n次

^c{4}$ 表示cccc

^[0-9]{1,}$ 表示所有正数

^\-{0,1}[0-9]{1,}$ 表示所有整数

^\-{0,1}[0-9]{1,}\.{0,1}[0-9]{1,}$ 表示所有小数

^\${1}[a-zA-Z_]{1,}[a-zA-Z0-9_]{1,}$ 表示所有变量名

perl分隔符:// {} !!

perl特殊意义字符:

\a ASCII值为7的告警符

\A 和脱出符号(“/”)等价

\b 词的边界

\B 非词边界

\cn 控制字符

\d 单个数字

\D 单个非数字

\s 单个空白

\S 单个非空白

\w 单个的字母或者下划线

\W 单个非字母或者下划线

\Z 从目标字串的尾部开始匹配

perl 兼容正则表达式的一些高级特性:

|表示或的意思

!^ex|em! 以ex或者em开头的字符串

A:该选项表示只匹配位于目标字符串开头的字符

E:该选项使得转义字符$构成的正则表达式只匹配目标字符串的结尾字符。如果选择m选项,该选项就被忽略。

U:该选项禁止最大长度的搜索。一般情况下,搜索会尽量找最长的匹配字符串。例如模式/a+/在”caaaab”

字符串中的匹配结果是”aaaa”,但是使用/a+/U匹配的结果就是”a”。

S:该选项对模式进行学习,以提高查找速度。

i:该选项会使匹配忽略大小写。

m:该选项将含有换行符的字符串视为多行而不是一行,这个时候”$”,”^”等字符会匹配每个换行符。

s:该选项使句点(“.”)也匹配换行符。

x:该选项通知php解析器在分析的时候忽略正则表达式定义中的非转义空格符。