个部分。如果分隔成功,返回的值为各个分隔后部分组成的数组,失败则返回false。可选limit表示最大分割块数。如果limit为5,那么即使string有>5个的地方符合pattern,string也只被分割为5个部分,最后一个部分是string去掉前四个部分后剩下的部分。返回值中也只有5个元素。
三.perl风格正则表达式及相关函数
1.perl正则语法
perl分隔符,可使用"/","!"和"{}"。
例1:/^[^0-9]/ !^[0-9]! {^[0-9]}三个都一样。
在分隔符内部,分隔字符本身就是一个特殊敏感字符,要进行转义。如果用分隔符"/",正则中又用了表达字符的"/",则必须要用"\/"。如果混合用"/"和"!"就没问题。
例2:/\/\/$/ !//$! 两者也相同
例3:!^\!\![0-9]$! /^!![0-9]$/ 两者也相同
2.perl特殊意义字符
\a ASCII值为7的告警符
\b 词的边界
\A 和脱出符号("/")等价
\B 非词边界
\cn 控制字符
\d 单个数字
\D 单个非数字
\s 单个空白
\S 单个非空白
\w 单个的字母或下划线
\W 单个的非词字符(不是字母也不是下划线)
\Z 从目标字串的尾部开始匹配
3.高级特性
1)或运算"|":
例如!^ex|em!匹配条件是ex或em开头的字符串,还可以写成!^e(x|m)!。
注意:()内的内容代表子模式\
2)逻辑符号后面的模式选项
!正则表达式!逻辑选项
A:只匹配位于目标字串开头的字符。
E:该选项使转义字符$构成的正则表达式只匹配目标字符串的结尾字符。如果选择m选项,该选项就被忽略。
U:该选项禁止最大长度的搜索。一般情况下,搜索会尽量找最长的匹配字符串。例如模式/a+/在"caaaaab"字符串中的匹配结果是"aaaaa",但是使用该选项的模式/a+/U匹配的结果会是"a"。
S:对模式进行学习,提高查找速度。
i:该选项忽略大小写。
m:该选项将含有换行符的字符串视为多行而不是一行。这个时候"$","^"等字符会匹配每个换行符。
s:该选项使句点"."也匹配换行符。
x:该选项通知PHP解释器在分析的时候忽略正则表达式定义中的非转义空格符。这样可以在正则表达式中使用空格来增强其可读性,但这时在表达式中使用空格符必须使用转义字符。
3)扩展模式符号。
(?#comment) 添加注释comment,可以增强正则可读性。
(?=pattern) 指定在模式之后必须跟随值pattern。
(?!pattern) 指定在模式之后不能跟随值pattern。
(?n) 在模式内部而非结尾处定义模式选项n。
(?: ) 消耗字符,不捕获匹配结果。
例:echo ereg("?:^a$","a");//无任何输出。
4.per正则函数
1.preg_grep函数
preg_grep(pattern,array input);
输入数组input中寻找匹配模式pattern的字串,并将所有的匹配字符串返回。返回值就是所有匹配的字符串组成的数组。
2.preg_match函数
preg_match(pattern,string subject,[array matches])
该函数在subject字符串中寻找匹配pattern的字符串。如果找到则返回一个非零值,否则返回零值。如果选用了可选项matches,那么匹配的字符串将被放到第一个元素的位置,可以用$matches[0]来读取,圆括号匹配的结果也按顺序放在这个数组中,第一个是$matches,第二个是$matches,依次类推。
3.preg_match_all函数
preg_match_all(pattern,subject,array matches,[int order])
该函数在subject字符串中寻找匹配pattern的互不重叠的文本,找到了匹配的文本则返回匹配文本的个数,否则返回0。匹配文本被放在二维数组matches中,matches[0]中存放的是所有符合的字符串。各种