字符串与正则表达式
字符串处理
字符串是PHP中重要的数据类型之一。在web应用中,很多情况下需要对字符串进行处理和分析,通常涉及字符串的格式化、连接与分割、比较、查找等一系列操作。
字符串特点:PHP是弱类型语言,所以其他类型的数据一般都可以直接应用于字符串操作函数里,而自动转换成字符串类型进行处理。
注:不要希望可以将一个字符转换成整型时能够用得到该字符的编码(C语言可以),PHP中可以使用ord()和chr()函数。
常用字符串输出函数:
echo() 输出字符串
print() 输出一个或多个字符串
die() 输出一条信息并退出当前脚本
printf() 输出格式化字符串
sprint() 把格式化的字符串写入一个变量
常用字符串格式化函数:
trim()、ltrim()、rtrim() 从字符串中删除空格或其他预定义字符
str_pad() 把字符串填充为新的长度
strtolower() 把字符串转换为小写
strtoupper() 把字符串转换为大写
ucfirst() 把字符串中首字母转换为大写
ucwords() 把字符串中每个单词首字母大写
nl2br() 把字符串中每个新行之前插入HTML换行符
htmlspecilchars() 把一些预定义的字符转换成HTML实体
htmlspecilchars_decode() 把一些HTML实体转换成字符
md5() 将一个字符进行MD5加密
正则表达式
正则表达式也称为模式表达式,主要作用就是实现字符串的匹配、查找、替换和分割操作
PHP中两个正则库:PCRE库(主用,函数名以‘preg_’开头)、POSIX扩展语法(PHP4以前,函数名以'ereg_'开头)
几个重要的正则函数:
preg_match() 进行正则表达式匹配
preg_match_all() 进行全局正则表达式匹配
preg_replace() 执行正则表达式的搜索和替换
preg_split() 用正则表达式分割字符串
preg_grep() 返回与模式匹配的数组单元
正则表达式语法规则:
定界符:通常习惯使用双斜杠 /正则表达式/ (也可以使用其他符合作为定界符)
原 子:正则表达式的最基本组成单位,而且在每个模式中最少包含一个原子。原子是由所有那些未显示指定为元字符的打印和非打印字符组成。
> 单个字符、数字,如a-z,A-Z,0-9。
> 模式单元,如(ABC)可以理解为由多个原子组成的大的原子。
> 原子表,如 [ABC]。
> 重新使用的模式单元,如:\\1
> 普通转义字符,如:\d, \D, \w
> 转义元字符,如:\*,\.
*> 元字符
\d 等价于 [0-9]
\D 等价于 [^0-9]
\w 等价于 [0-9a-zA-Z]
\W 等价于 [^0-9a-zA-Z]
\s 等价于 [\f\n\r\t\v]
\S 等价于 [^\f\n\r\t\v]
元字符:
[] 表示单个字符的原子表
例如:[aoeiu] 表示任意一个元音字母
[0-9] 表示任意一位数字
[a-z][0-9]表示小写字和一位数字构成的两位字符
[a-zA-Z0-9] 表示任意一位大小字母或数字
[^] 表示除中括号内原子之外的任何字符 是[]的取反
例如:[^0-9] 表示任意一位非数字字符
[^a-z] 表示任意一位非小写字母
{m} 表示对前面原子的数量控制,表示是m次
例如:[0-9]{4} 表示4位数字0000-9999
[1][3-8][0-9]{9} 手机号码
[\-]?[0-9]+
{m,} 表示对前面原子的数量控制,表示是至少m次
例如: [0-9]{2,} 表示两位及以上的数字
{m,n}表示对前面原子的数量控制,表示是m到n次
例如: [a-z]{6,8} 表示6到8位的小写字母bb
* 表示对前面原子的数量控制,表示是任意次,等价于{0,}
+ 表示对前面原子的数量控制,表示至少1次,等价于{1,}
? 表示对前面原子的数量控制,表示0次或1次(可有可无) 等价于{0,1}
例如:正整数:[1-9][0-9]*
整数:[\-]?[0-9]+
() 表示一个整体原子,【还有一个子存储单元的作用】。
也可以使用?:来拒绝子存储。 (?:.*?)
例如: (red) 字串red
(red|blue) 字串red或blue
(abc){2} 表示两个abc
| 表示或的意思
(rea|blue) 字串red或blue
^ 用在正则单元块的开头处,表示必须以指定的开头
$ 用在正则单元块的结尾处,表示必须以指定的结尾
. 表示任意一个除换行符之外的字符
常用组合: .*? 或 .+? 表示最小匹配所有字符(拒绝贪婪匹配)
模式修正符:i 、m 、s 、x 、e 、U 、 D
i 表示不区分大小写;
"/[a-zA-Z]/" <==>"/[a-z]/i"
s 表示匹配视为单行(就是可以让点.支持换行)
U 表示拒绝贪婪匹配